import socket
EXCEPTION_MESSAGE_TYPE = 0
def retryable(cls):
cls.retryable = True
return cls
[docs]class HazelcastError(Exception):
"""General HazelcastError class."""
def __init__(self, message=None, cause=None):
super(HazelcastError, self).__init__(message, cause)
def __str__(self):
message, cause = self.args
if cause:
return "%s\nCaused by: %s" % (message, str(cause))
return message or self.__class__.__name__
[docs]class ArrayIndexOutOfBoundsError(HazelcastError):
pass
[docs]class ArrayStoreError(HazelcastError):
pass
[docs]class AuthenticationError(HazelcastError):
pass
[docs]class CacheNotExistsError(HazelcastError):
pass
[docs]@retryable
class CallerNotMemberError(HazelcastError):
pass
[docs]class CancellationError(HazelcastError):
pass
[docs]class ClassCastError(HazelcastError):
pass
[docs]class ClassNotFoundError(HazelcastError):
pass
[docs]class ConcurrentModificationError(HazelcastError):
pass
[docs]class ConfigMismatchError(HazelcastError):
pass
[docs]class ConfigurationError(HazelcastError):
pass
[docs]class DistributedObjectDestroyedError(HazelcastError):
pass
[docs]class DuplicateInstanceNameError(HazelcastError):
pass
[docs]class HazelcastEOFError(HazelcastError):
pass
[docs]class ExecutionError(HazelcastError):
pass
[docs]@retryable
class HazelcastInstanceNotActiveError(HazelcastError):
pass
[docs]class HazelcastOverloadError(HazelcastError):
pass
[docs]class HazelcastSerializationError(HazelcastError):
pass
[docs]class HazelcastIOError(HazelcastError):
pass
[docs]class IllegalArgumentError(HazelcastError):
pass
[docs]class IllegalAccessException(HazelcastError):
pass
[docs]class IllegalAccessError(HazelcastError):
pass
[docs]class IllegalMonitorStateError(HazelcastError):
pass
[docs]class IllegalStateError(HazelcastError):
pass
[docs]class IllegalThreadStateError(HazelcastError):
pass
[docs]class IndexOutOfBoundsError(HazelcastError):
pass
[docs]class HazelcastInterruptedError(HazelcastError):
pass
[docs]class InvalidAddressError(HazelcastError):
pass
[docs]class InvalidConfigurationError(HazelcastError):
pass
[docs]@retryable
class MemberLeftError(HazelcastError):
pass
[docs]class NegativeArraySizeError(HazelcastError):
pass
[docs]class NoSuchElementError(HazelcastError):
pass
[docs]class NotSerializableError(HazelcastError):
pass
[docs]class NullPointerError(HazelcastError):
pass
[docs]class OperationTimeoutError(HazelcastError):
pass
[docs]@retryable
class PartitionMigratingError(HazelcastError):
pass
[docs]class QueryError(HazelcastError):
pass
[docs]class QueryResultSizeExceededError(HazelcastError):
pass
[docs]class SplitBrainProtectionError(HazelcastError):
pass
[docs]class ReachedMaxSizeError(HazelcastError):
pass
[docs]class RejectedExecutionError(HazelcastError):
pass
[docs]class ResponseAlreadySentError(HazelcastError):
pass
[docs]@retryable
class RetryableHazelcastError(HazelcastError):
pass
[docs]@retryable
class RetryableIOError(HazelcastError):
pass
[docs]class HazelcastRuntimeError(HazelcastError):
pass
[docs]class SecurityError(HazelcastError):
pass
[docs]class SocketError(HazelcastError):
pass
[docs]class StaleSequenceError(HazelcastError):
pass
[docs]class TargetDisconnectedError(HazelcastError):
pass
[docs]@retryable
class TargetNotMemberError(HazelcastError):
pass
[docs]class HazelcastTimeoutError(HazelcastError):
pass
[docs]class TopicOverloadError(HazelcastError):
pass
[docs]class TransactionError(HazelcastError):
pass
[docs]class TransactionNotActiveError(HazelcastError):
pass
[docs]class TransactionTimedOutError(HazelcastError):
pass
[docs]class URISyntaxError(HazelcastError):
pass
[docs]class UnsupportedOperationError(HazelcastError):
pass
[docs]@retryable
class WrongTargetError(HazelcastError):
pass
[docs]class XAError(HazelcastError):
pass
[docs]class AccessControlError(HazelcastError):
pass
[docs]class LoginError(HazelcastError):
pass
[docs]class UnsupportedCallbackError(HazelcastError):
pass
[docs]class NoDataMemberInClusterError(HazelcastError):
pass
[docs]class ReplicatedMapCantBeCreatedOnLiteMemberError(HazelcastError):
pass
[docs]class MaxMessageSizeExceededError(HazelcastError):
pass
[docs]class WANReplicationQueueFullError(HazelcastError):
pass
[docs]class HazelcastAssertionError(HazelcastError):
pass
[docs]class OutOfMemoryError(HazelcastError):
pass
[docs]class StackOverflowError(HazelcastError):
pass
[docs]class NativeOutOfMemoryError(HazelcastError):
pass
[docs]class ServiceNotFoundError(HazelcastError):
pass
[docs]class StaleTaskIdError(HazelcastError):
pass
[docs]class DuplicateTaskError(HazelcastError):
pass
[docs]class StaleTaskError(HazelcastError):
pass
[docs]class LocalMemberResetError(HazelcastError):
pass
[docs]class IndeterminateOperationStateError(HazelcastError):
pass
[docs]class NodeIdOutOfRangeError(HazelcastError):
pass
[docs]@retryable
class TargetNotReplicaError(HazelcastError):
pass
[docs]class MutationDisallowedError(HazelcastError):
pass
[docs]class ConsistencyLostError(HazelcastError):
pass
[docs]class HazelcastClientNotActiveError(HazelcastError):
def __init__(self, message="Client is not active"):
super(HazelcastClientNotActiveError, self).__init__(message)
[docs]class HazelcastCertificationError(HazelcastError):
pass
[docs]class ClientOfflineError(HazelcastError):
def __init__(self):
super(ClientOfflineError, self).__init__("No connection found to cluster")
[docs]class ClientNotAllowedInClusterError(HazelcastError):
pass
[docs]class VersionMismatchError(HazelcastError):
pass
[docs]class NoSuchMethodError(HazelcastError):
pass
[docs]class NoSuchMethodException(HazelcastError):
pass
[docs]class NoSuchFieldError(HazelcastError):
pass
[docs]class NoSuchFieldException(HazelcastError):
pass
[docs]class NoClassDefFoundError(HazelcastError):
pass
[docs]class UndefinedErrorCodeError(HazelcastError):
pass
[docs]class SessionExpiredError(HazelcastError):
pass
[docs]class WaitKeyCancelledError(HazelcastError):
pass
[docs]class LockAcquireLimitReachedError(HazelcastError):
pass
[docs]class LockOwnershipLostError(HazelcastError):
pass
[docs]class CPGroupDestroyedError(HazelcastError):
pass
[docs]@retryable
class CannotReplicateError(HazelcastError):
pass
[docs]class LeaderDemotedError(HazelcastError):
pass
[docs]class StaleAppendRequestError(HazelcastError):
pass
[docs]class NotLeaderError(HazelcastError):
pass
# Error Codes
_UNDEFINED = 0
_ARRAY_INDEX_OUT_OF_BOUNDS = 1
_ARRAY_STORE = 2
_AUTHENTICATION = 3
_CACHE = 4
_CACHE_LOADER = 5
_CACHE_NOT_EXISTS = 6
_CACHE_WRITER = 7
_CALLER_NOT_MEMBER = 8
_CANCELLATION = 9
_CLASS_CAST = 10
_CLASS_NOT_FOUND = 11
_CONCURRENT_MODIFICATION = 12
_CONFIG_MISMATCH = 13
_DISTRIBUTED_OBJECT_DESTROYED = 14
_EOF = 15
_ENTRY_PROCESSOR = 16
_EXECUTION = 17
_HAZELCAST = 18
_HAZELCAST_INSTANCE_NOT_ACTIVE = 19
_HAZELCAST_OVERLOAD = 20
_HAZELCAST_SERIALIZATION = 21
_IO = 22
_ILLEGAL_ARGUMENT = 23
_ILLEGAL_ACCESS_EXCEPTION = 24
_ILLEGAL_ACCESS_ERROR = 25
_ILLEGAL_MONITOR_STATE = 26
_ILLEGAL_STATE = 27
_ILLEGAL_THREAD_STATE = 28
_INDEX_OUT_OF_BOUNDS = 29
_INTERRUPTED = 30
_INVALID_ADDRESS = 31
_INVALID_CONFIGURATION = 32
_MEMBER_LEFT = 33
_NEGATIVE_ARRAY_SIZE = 34
_NO_SUCH_ELEMENT = 35
_NOT_SERIALIZABLE = 36
_NULL_POINTER = 37
_OPERATION_TIMEOUT = 38
_PARTITION_MIGRATING = 39
_QUERY = 40
_QUERY_RESULT_SIZE_EXCEEDED = 41
_SPLIT_BRAIN_PROTECTION = 42
_REACHED_MAX_SIZE = 43
_REJECTED_EXECUTION = 44
_RESPONSE_ALREADY_SENT = 45
_RETRYABLE_HAZELCAST = 46
_RETRYABLE_IO = 47
_RUNTIME = 48
_SECURITY = 49
_SOCKET = 50
_STALE_SEQUENCE = 51
_TARGET_DISCONNECTED = 52
_TARGET_NOT_MEMBER = 53
_TIMEOUT = 54
_TOPIC_OVERLOAD = 55
_TRANSACTION = 56
_TRANSACTION_NOT_ACTIVE = 57
_TRANSACTION_TIMED_OUT = 58
_URI_SYNTAX = 59
_UTF_DATA_FORMAT = 60
_UNSUPPORTED_OPERATION = 61
_WRONG_TARGET = 62
_XA = 63
_ACCESS_CONTROL = 64
_LOGIN = 65
_UNSUPPORTED_CALLBACK = 66
_NO_DATA_MEMBER = 67
_REPLICATED_MAP_CANT_BE_CREATED = 68
_MAX_MESSAGE_SIZE_EXCEEDED = 69
_WAN_REPLICATION_QUEUE_FULL = 70
_ASSERTION_ERROR = 71
_OUT_OF_MEMORY_ERROR = 72
_STACK_OVERFLOW_ERROR = 73
_NATIVE_OUT_OF_MEMORY_ERROR = 74
_SERVICE_NOT_FOUND = 75
_STALE_TASK_ID = 76
_DUPLICATE_TASK = 77
_STALE_TASK = 78
_LOCAL_MEMBER_RESET = 79
_INDETERMINATE_OPERATION_STATE = 80
_FLAKE_ID_NODE_ID_OUT_OF_RANGE_EXCEPTION = 81
_TARGET_NOT_REPLICA_EXCEPTION = 82
_MUTATION_DISALLOWED_EXCEPTION = 83
_CONSISTENCY_LOST_EXCEPTION = 84
_SESSION_EXPIRED_EXCEPTION = 85
_WAIT_KEY_CANCELLED_EXCEPTION = 86
_LOCK_ACQUIRE_LIMIT_REACHED_EXCEPTION = 87
_LOCK_OWNERSHIP_LOST_EXCEPTION = 88
_CP_GROUP_DESTROYED_EXCEPTION = 89
_CANNOT_REPLICATE_EXCEPTION = 90
_LEADER_DEMOTED_EXCEPTION = 91
_STALE_APPEND_REQUEST_EXCEPTION = 92
_NOT_LEADER_EXCEPTION = 93
_VERSION_MISMATCH_EXCEPTION = 94
_NO_SUCH_METHOD_ERROR = 95
_NO_SUCH_METHOD_EXCEPTION = 96
_NO_SUCH_FIELD_ERROR = 97
_NO_SUCH_FIELD_EXCEPTION = 98
_NO_CLASS_DEF_FOUND_ERROR = 99
_ERROR_CODE_TO_ERROR = {
_ARRAY_INDEX_OUT_OF_BOUNDS: ArrayIndexOutOfBoundsError,
_ARRAY_STORE: ArrayStoreError,
_AUTHENTICATION: AuthenticationError,
_CACHE_NOT_EXISTS: CacheNotExistsError,
_CALLER_NOT_MEMBER: CallerNotMemberError,
_CANCELLATION: CancellationError,
_CLASS_CAST: ClassCastError,
_CLASS_NOT_FOUND: ClassNotFoundError,
_CONCURRENT_MODIFICATION: ConcurrentModificationError,
_CONFIG_MISMATCH: ConfigMismatchError,
_DISTRIBUTED_OBJECT_DESTROYED: DistributedObjectDestroyedError,
_EOF: HazelcastEOFError,
_EXECUTION: ExecutionError,
_HAZELCAST: HazelcastError,
_HAZELCAST_INSTANCE_NOT_ACTIVE: HazelcastInstanceNotActiveError,
_HAZELCAST_OVERLOAD: HazelcastOverloadError,
_HAZELCAST_SERIALIZATION: HazelcastSerializationError,
_IO: HazelcastIOError,
_ILLEGAL_ARGUMENT: IllegalArgumentError,
_ILLEGAL_ACCESS_EXCEPTION: IllegalAccessException,
_ILLEGAL_ACCESS_ERROR: IllegalAccessError,
_ILLEGAL_MONITOR_STATE: IllegalMonitorStateError,
_ILLEGAL_STATE: IllegalStateError,
_ILLEGAL_THREAD_STATE: IllegalThreadStateError,
_INDEX_OUT_OF_BOUNDS: IndexOutOfBoundsError,
_INTERRUPTED: HazelcastInterruptedError,
_INVALID_ADDRESS: InvalidAddressError,
_INVALID_CONFIGURATION: InvalidConfigurationError,
_MEMBER_LEFT: MemberLeftError,
_NEGATIVE_ARRAY_SIZE: NegativeArraySizeError,
_NO_SUCH_ELEMENT: NoSuchElementError,
_NOT_SERIALIZABLE: NotSerializableError,
_NULL_POINTER: NullPointerError,
_OPERATION_TIMEOUT: OperationTimeoutError,
_PARTITION_MIGRATING: PartitionMigratingError,
_QUERY: QueryError,
_QUERY_RESULT_SIZE_EXCEEDED: QueryResultSizeExceededError,
_SPLIT_BRAIN_PROTECTION: SplitBrainProtectionError,
_REACHED_MAX_SIZE: ReachedMaxSizeError,
_REJECTED_EXECUTION: RejectedExecutionError,
_RESPONSE_ALREADY_SENT: ResponseAlreadySentError,
_RETRYABLE_HAZELCAST: RetryableHazelcastError,
_RETRYABLE_IO: RetryableIOError,
_RUNTIME: HazelcastRuntimeError,
_SECURITY: SecurityError,
_SOCKET: socket.error,
_STALE_SEQUENCE: StaleSequenceError,
_TARGET_DISCONNECTED: TargetDisconnectedError,
_TARGET_NOT_MEMBER: TargetNotMemberError,
_TIMEOUT: HazelcastTimeoutError,
_TOPIC_OVERLOAD: TopicOverloadError,
_TRANSACTION: TransactionError,
_TRANSACTION_NOT_ACTIVE: TransactionNotActiveError,
_TRANSACTION_TIMED_OUT: TransactionTimedOutError,
_URI_SYNTAX: URISyntaxError,
_UTF_DATA_FORMAT: UTFDataFormatError,
_UNSUPPORTED_OPERATION: UnsupportedOperationError,
_WRONG_TARGET: WrongTargetError,
_XA: XAError,
_ACCESS_CONTROL: AccessControlError,
_LOGIN: LoginError,
_UNSUPPORTED_CALLBACK: UnsupportedCallbackError,
_NO_DATA_MEMBER: NoDataMemberInClusterError,
_REPLICATED_MAP_CANT_BE_CREATED: ReplicatedMapCantBeCreatedOnLiteMemberError,
_MAX_MESSAGE_SIZE_EXCEEDED: MaxMessageSizeExceededError,
_WAN_REPLICATION_QUEUE_FULL: WANReplicationQueueFullError,
_ASSERTION_ERROR: HazelcastAssertionError,
_OUT_OF_MEMORY_ERROR: OutOfMemoryError,
_STACK_OVERFLOW_ERROR: StackOverflowError,
_NATIVE_OUT_OF_MEMORY_ERROR: NativeOutOfMemoryError,
_SERVICE_NOT_FOUND: ServiceNotFoundError,
_STALE_TASK_ID: StaleTaskIdError,
_DUPLICATE_TASK: DuplicateTaskError,
_STALE_TASK: StaleTaskError,
_LOCAL_MEMBER_RESET: LocalMemberResetError,
_INDETERMINATE_OPERATION_STATE: IndeterminateOperationStateError,
_FLAKE_ID_NODE_ID_OUT_OF_RANGE_EXCEPTION: NodeIdOutOfRangeError,
_TARGET_NOT_REPLICA_EXCEPTION: TargetNotReplicaError,
_MUTATION_DISALLOWED_EXCEPTION: MutationDisallowedError,
_CONSISTENCY_LOST_EXCEPTION: ConsistencyLostError,
_SESSION_EXPIRED_EXCEPTION: SessionExpiredError,
_WAIT_KEY_CANCELLED_EXCEPTION: WaitKeyCancelledError,
_LOCK_ACQUIRE_LIMIT_REACHED_EXCEPTION: LockAcquireLimitReachedError,
_LOCK_OWNERSHIP_LOST_EXCEPTION: LockOwnershipLostError,
_CP_GROUP_DESTROYED_EXCEPTION: CPGroupDestroyedError,
_CANNOT_REPLICATE_EXCEPTION: CannotReplicateError,
_LEADER_DEMOTED_EXCEPTION: LeaderDemotedError,
_STALE_APPEND_REQUEST_EXCEPTION: StaleAppendRequestError,
_NOT_LEADER_EXCEPTION: NotLeaderError,
_VERSION_MISMATCH_EXCEPTION: VersionMismatchError,
_NO_SUCH_METHOD_ERROR: NoSuchMethodError,
_NO_SUCH_METHOD_EXCEPTION: NoSuchMethodException,
_NO_SUCH_FIELD_ERROR: NoSuchFieldError,
_NO_SUCH_FIELD_EXCEPTION: NoSuchFieldException,
_NO_CLASS_DEF_FOUND_ERROR: NoClassDefFoundError,
}
from hazelcast.protocol.builtin import ListMultiFrameCodec
from hazelcast.protocol.codec.custom.error_holder_codec import ErrorHolderCodec
class _ErrorsCodec(object):
@staticmethod
def decode(msg):
msg.next_frame()
return ListMultiFrameCodec.decode(msg, ErrorHolderCodec.decode)
def create_error_from_message(error_message):
error_holders = _ErrorsCodec.decode(error_message)
return _create_error(error_holders, 0)
def _create_error(error_holders, idx):
if idx == len(error_holders):
return None
error_holder = error_holders[idx]
error_class = _ERROR_CODE_TO_ERROR.get(error_holder.error_code, None)
stack_trace = "\n".join(
[
"\tat %s.%s(%s:%s)" % (x.class_name, x.method_name, x.file_name, x.line_number)
for x in error_holder.stack_trace_elements
]
)
message = "Exception from server: %s: %s\n %s" % (
error_holder.class_name,
error_holder.message,
stack_trace,
)
if error_class:
return error_class(message, _create_error(error_holders, idx + 1))
else:
return UndefinedErrorCodeError(message, error_holder.class_name)
def is_retryable_error(error):
return hasattr(error, "retryable")