blob: ea03c727b4eee37564dad9bec7b1d392ac424bc6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
#include <string>
#include <gfcpp/ExceptionTypes.hpp>
#include <TXState.hpp>
#include <TSSTXStateWrapper.hpp>
namespace apache {
namespace geode {
namespace client {
void setTSSExceptionMessage(const char* exMsg);
const char* getTSSExceptionMessage();
void GfErrTypeThrowException(const char* str, GfErrType err) {
std::string func;
const char* exMsg = getTSSExceptionMessage();
if (exMsg != NULL && exMsg[0] == '\0') {
exMsg = NULL;
} else {
func.append(str);
func.append(": ");
str = func.c_str();
}
switch (err) {
case GF_NOTCON: {
NotConnectedException ex(
str, (exMsg != NULL ? exMsg : ": not connected to Geode"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_MSG: {
MessageException ex(
str, (exMsg != NULL ? exMsg
: ": message from server could not be handled"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHESERVER_EXCEPTION: {
CacheServerException ex(
str,
(exMsg != NULL ? exMsg : ": exception happened at cache server"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_NOTOWN: {
NotOwnerException ex(str, (exMsg != NULL ? exMsg : ": not own the lock"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_REGION_NOT_FOUND: {
CacheServerException ex(
str, (exMsg != NULL ? exMsg : ": region not found on server"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_REGION_NOT_GLOBAL: {
IllegalStateException ex(str,
(exMsg != NULL ? exMsg : ": region not global"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_ILLEGAL_ARGUMENT_EXCEPTION: {
IllegalArgumentException ex(
str, (exMsg != NULL ? exMsg : ": illegal argument"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_ILLEGAL_STATE_EXCEPTION: {
IllegalStateException ex(str,
(exMsg != NULL ? exMsg : ": illegal State"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_WRITER_EXCEPTION: {
CacheWriterException ex(
str, (exMsg != NULL ? exMsg : ": exception on server during write"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHEWRITER_ERROR: {
CacheWriterException ex(
str, (exMsg != NULL ? exMsg : ": exception in CacheWriter"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_LOADER_EXCEPTION: {
CacheLoaderException ex(
str, (exMsg != NULL ? exMsg : ": exception in CacheLoader"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_LISTENER_EXCEPTION: {
CacheListenerException ex(
str, (exMsg != NULL ? exMsg : ": exception in CacheListener"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_REGION_INVALID: {
RegionDestroyedException ex(
str, (exMsg != NULL ? exMsg : ": region not valid"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_PROXY: {
CacheProxyException ex(
str, (exMsg != NULL ? exMsg : ": error in Cache proxy"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_IOERR: {
GeodeIOException ex(
str, (exMsg != NULL ? exMsg : ": Input/Output error in operation"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_ENOENT: {
NoSystemException ex(str,
(exMsg != NULL ? exMsg : ": entity does not exist"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_REGION_KEYS_NOT_STRINGS: {
IllegalArgumentException ex(
str,
(exMsg != NULL ? exMsg : ": region entries do not support C access"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_REGION_ENTRY_NOT_BYTES: {
IllegalArgumentException ex(
str,
(exMsg != NULL ? exMsg
: ": existing non-null values was not a byte array"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_TIMEOUT_EXCEPTION: {
TimeoutException ex(str, (exMsg != NULL ? exMsg : ": timed out"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_TIMOUT: {
TimeoutException ex(str, (exMsg != NULL ? exMsg : ": timed out"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CLIENT_WAIT_TIMEOUT: {
TimeoutException ex(
str,
(exMsg != NULL ? exMsg
: ": timed out, possibly bucket is not available."));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_ENOMEM: {
OutOfMemoryException ex(str, (exMsg != NULL ? exMsg : ": Out of memory"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_ERANGE: {
BufferSizeExceededException ex(
str, (exMsg != NULL ? exMsg : ": Buffer Size Exceeded"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_LEASE_EXPIRED_EXCEPTION: {
LeaseExpiredException ex(
str, (exMsg != NULL ? exMsg : ": lock Lease Expired On you"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_REGION_EXISTS_EXCEPTION: {
RegionExistsException ex(
str, (exMsg != NULL ? exMsg : ": Named Region Exists"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_ENTRY_NOT_FOUND: {
EntryNotFoundException ex(str,
(exMsg != NULL ? exMsg : ": Entry not found"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_ENTRY_EXISTS: {
EntryExistsException ex(
str,
(exMsg != NULL ? exMsg : ": Entry already exists in the region"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_ENTRY_DESTROYED_EXCEPTION: {
EntryDestroyedException ex(
str, (exMsg != NULL ? exMsg : ": Entry has been destroyed"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_REGION_DESTROYED_EXCEPTION: {
RegionDestroyedException ex(
str, (exMsg != NULL ? exMsg : ": Named Region Destroyed"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_CLOSED_EXCEPTION: {
CacheClosedException ex(
str, (exMsg != NULL ? exMsg : ": Cache has been closed"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_STATISTICS_DISABLED_EXCEPTION: {
StatisticsDisabledException ex(
str,
(exMsg != NULL ? exMsg
: ": Statistics have been disabled for the region"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_CONCURRENT_MODIFICATION_EXCEPTION: {
ConcurrentModificationException ex(
str,
(exMsg != NULL ? exMsg : ": Concurrent modification in the cache"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_NOT_AUTHORIZED_EXCEPTION: {
NotAuthorizedException ex(
str, (exMsg != NULL ? exMsg : ": unauthorized operation"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_AUTHENTICATION_FAILED_EXCEPTION: {
AuthenticationFailedException ex(
str, (exMsg != NULL ? exMsg : ": authentication failed"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_AUTHENTICATION_REQUIRED_EXCEPTION: {
AuthenticationRequiredException ex(
str, (exMsg != NULL ? exMsg : ": no authentication provided"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_DUPLICATE_DURABLE_CLIENT: {
DuplicateDurableClientException ex(
str, (exMsg != NULL ? exMsg : ": Duplicate Durable Client Id"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_REMOTE_QUERY_EXCEPTION: {
QueryException ex(str, (exMsg != NULL ? exMsg : ": Query failed"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_CACHE_LOCATOR_EXCEPTION: {
ExceptionPtr exCause(new NoAvailableLocatorsException(
str, (exMsg != NULL ? exMsg : ": No locators available")));
NotConnectedException ex(
str, (exMsg != NULL ? exMsg : ": No locators available"), false,
exCause);
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_ALL_CONNECTIONS_IN_USE_EXCEPTION: {
AllConnectionsInUseException ex(
str, (exMsg != NULL ? exMsg : ": All connections are in use"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_FUNCTION_EXCEPTION: {
FunctionExecutionException ex(
str, (exMsg != NULL ? exMsg : ": Function execution failed"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_DISKFULL: {
DiskFailureException ex(str, (exMsg != NULL ? exMsg : ": Disk full"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_ROLLBACK_EXCEPTION: {
RollbackException ex(
str, (exMsg != NULL ? exMsg : ": Transaction rolled back"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_COMMIT_CONFLICT_EXCEPTION: {
CommitConflictException ex(
str, (exMsg != NULL ? exMsg : ": Commit conflict exception"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_TRANSACTION_DATA_REBALANCED_EXCEPTION: {
TransactionDataRebalancedException ex(
str,
(exMsg != NULL ? exMsg : ": Transaction data rebalanced exception"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_TRANSACTION_DATA_NODE_HAS_DEPARTED_EXCEPTION: {
TransactionDataNodeHasDepartedException ex(
str,
(exMsg != NULL ? exMsg
: ": Transaction data node has departed exception"));
setTSSExceptionMessage(NULL);
throw ex;
}
case GF_PUTALL_PARTIAL_RESULT_EXCEPTION: {
PutAllPartialResultException ex(
str, (exMsg != NULL ? exMsg : ": PutAll Partial exception"));
setTSSExceptionMessage(NULL);
throw ex;
}
default: {
char buf[64];
LOGINFO("error code: %d", err);
if (exMsg == NULL) {
ACE_OS::snprintf(buf, 64, "Unknown error code[0x%X]", err);
exMsg = buf;
}
UnknownException ex(str, exMsg);
setTSSExceptionMessage(NULL);
throw ex;
}
}
}
} // namespace client
} // namespace geode
} // namespace apache