diff --git a/core/src/main/java/org/elasticsearch/ElasticsearchException.java b/core/src/main/java/org/elasticsearch/ElasticsearchException.java index 9b6bc54b045..a4befb67d4a 100644 --- a/core/src/main/java/org/elasticsearch/ElasticsearchException.java +++ b/core/src/main/java/org/elasticsearch/ElasticsearchException.java @@ -49,6 +49,8 @@ import static org.elasticsearch.cluster.metadata.IndexMetaData.INDEX_UUID_NA_VAL */ public class ElasticsearchException extends RuntimeException implements ToXContent, Writeable { + public static final Version V_5_1_0_UNRELEASED = Version.fromId(5010099); + public static final Version UNKNOWN_VERSION_ADDED = Version.fromId(0); public static final String REST_EXCEPTION_SKIP_CAUSE = "rest.exception.cause.skip"; public static final String REST_EXCEPTION_SKIP_STACK_TRACE = "rest.exception.stacktrace.skip"; public static final boolean REST_EXCEPTION_SKIP_STACK_TRACE_DEFAULT = true; @@ -210,8 +212,12 @@ public class ElasticsearchException extends RuntimeException implements ToXConte /** * Returns true iff the given class is a registered for an exception to be read. */ - public static boolean isRegistered(Class exception) { - return CLASS_TO_ELASTICSEARCH_EXCEPTION_HANDLE.containsKey(exception); + public static boolean isRegistered(Class exception, Version version) { + ElasticsearchExceptionHandle elasticsearchExceptionHandle = CLASS_TO_ELASTICSEARCH_EXCEPTION_HANDLE.get(exception); + if (elasticsearchExceptionHandle != null) { + return version.onOrAfter(elasticsearchExceptionHandle.versionAdded); + } + return false; } static Set> getRegisteredKeys() { // for testing @@ -432,279 +438,294 @@ public class ElasticsearchException extends RuntimeException implements ToXConte */ enum ElasticsearchExceptionHandle { INDEX_SHARD_SNAPSHOT_FAILED_EXCEPTION(org.elasticsearch.index.snapshots.IndexShardSnapshotFailedException.class, - org.elasticsearch.index.snapshots.IndexShardSnapshotFailedException::new, 0), + org.elasticsearch.index.snapshots.IndexShardSnapshotFailedException::new, 0, UNKNOWN_VERSION_ADDED), DFS_PHASE_EXECUTION_EXCEPTION(org.elasticsearch.search.dfs.DfsPhaseExecutionException.class, - org.elasticsearch.search.dfs.DfsPhaseExecutionException::new, 1), + org.elasticsearch.search.dfs.DfsPhaseExecutionException::new, 1, UNKNOWN_VERSION_ADDED), EXECUTION_CANCELLED_EXCEPTION(org.elasticsearch.common.util.CancellableThreads.ExecutionCancelledException.class, - org.elasticsearch.common.util.CancellableThreads.ExecutionCancelledException::new, 2), + org.elasticsearch.common.util.CancellableThreads.ExecutionCancelledException::new, 2, UNKNOWN_VERSION_ADDED), MASTER_NOT_DISCOVERED_EXCEPTION(org.elasticsearch.discovery.MasterNotDiscoveredException.class, - org.elasticsearch.discovery.MasterNotDiscoveredException::new, 3), + org.elasticsearch.discovery.MasterNotDiscoveredException::new, 3, UNKNOWN_VERSION_ADDED), ELASTICSEARCH_SECURITY_EXCEPTION(org.elasticsearch.ElasticsearchSecurityException.class, - org.elasticsearch.ElasticsearchSecurityException::new, 4), + org.elasticsearch.ElasticsearchSecurityException::new, 4, UNKNOWN_VERSION_ADDED), INDEX_SHARD_RESTORE_EXCEPTION(org.elasticsearch.index.snapshots.IndexShardRestoreException.class, - org.elasticsearch.index.snapshots.IndexShardRestoreException::new, 5), + org.elasticsearch.index.snapshots.IndexShardRestoreException::new, 5, UNKNOWN_VERSION_ADDED), INDEX_CLOSED_EXCEPTION(org.elasticsearch.indices.IndexClosedException.class, - org.elasticsearch.indices.IndexClosedException::new, 6), + org.elasticsearch.indices.IndexClosedException::new, 6, UNKNOWN_VERSION_ADDED), BIND_HTTP_EXCEPTION(org.elasticsearch.http.BindHttpException.class, - org.elasticsearch.http.BindHttpException::new, 7), + org.elasticsearch.http.BindHttpException::new, 7, UNKNOWN_VERSION_ADDED), REDUCE_SEARCH_PHASE_EXCEPTION(org.elasticsearch.action.search.ReduceSearchPhaseException.class, - org.elasticsearch.action.search.ReduceSearchPhaseException::new, 8), + org.elasticsearch.action.search.ReduceSearchPhaseException::new, 8, UNKNOWN_VERSION_ADDED), NODE_CLOSED_EXCEPTION(org.elasticsearch.node.NodeClosedException.class, - org.elasticsearch.node.NodeClosedException::new, 9), + org.elasticsearch.node.NodeClosedException::new, 9, UNKNOWN_VERSION_ADDED), SNAPSHOT_FAILED_ENGINE_EXCEPTION(org.elasticsearch.index.engine.SnapshotFailedEngineException.class, - org.elasticsearch.index.engine.SnapshotFailedEngineException::new, 10), + org.elasticsearch.index.engine.SnapshotFailedEngineException::new, 10, UNKNOWN_VERSION_ADDED), SHARD_NOT_FOUND_EXCEPTION(org.elasticsearch.index.shard.ShardNotFoundException.class, - org.elasticsearch.index.shard.ShardNotFoundException::new, 11), + org.elasticsearch.index.shard.ShardNotFoundException::new, 11, UNKNOWN_VERSION_ADDED), CONNECT_TRANSPORT_EXCEPTION(org.elasticsearch.transport.ConnectTransportException.class, - org.elasticsearch.transport.ConnectTransportException::new, 12), + org.elasticsearch.transport.ConnectTransportException::new, 12, UNKNOWN_VERSION_ADDED), NOT_SERIALIZABLE_TRANSPORT_EXCEPTION(org.elasticsearch.transport.NotSerializableTransportException.class, - org.elasticsearch.transport.NotSerializableTransportException::new, 13), + org.elasticsearch.transport.NotSerializableTransportException::new, 13, UNKNOWN_VERSION_ADDED), RESPONSE_HANDLER_FAILURE_TRANSPORT_EXCEPTION(org.elasticsearch.transport.ResponseHandlerFailureTransportException.class, - org.elasticsearch.transport.ResponseHandlerFailureTransportException::new, 14), + org.elasticsearch.transport.ResponseHandlerFailureTransportException::new, 14, UNKNOWN_VERSION_ADDED), INDEX_CREATION_EXCEPTION(org.elasticsearch.indices.IndexCreationException.class, - org.elasticsearch.indices.IndexCreationException::new, 15), + org.elasticsearch.indices.IndexCreationException::new, 15, UNKNOWN_VERSION_ADDED), INDEX_NOT_FOUND_EXCEPTION(org.elasticsearch.index.IndexNotFoundException.class, - org.elasticsearch.index.IndexNotFoundException::new, 16), + org.elasticsearch.index.IndexNotFoundException::new, 16, UNKNOWN_VERSION_ADDED), ILLEGAL_SHARD_ROUTING_STATE_EXCEPTION(org.elasticsearch.cluster.routing.IllegalShardRoutingStateException.class, - org.elasticsearch.cluster.routing.IllegalShardRoutingStateException::new, 17), + org.elasticsearch.cluster.routing.IllegalShardRoutingStateException::new, 17, UNKNOWN_VERSION_ADDED), BROADCAST_SHARD_OPERATION_FAILED_EXCEPTION(org.elasticsearch.action.support.broadcast.BroadcastShardOperationFailedException.class, - org.elasticsearch.action.support.broadcast.BroadcastShardOperationFailedException::new, 18), + org.elasticsearch.action.support.broadcast.BroadcastShardOperationFailedException::new, 18, UNKNOWN_VERSION_ADDED), RESOURCE_NOT_FOUND_EXCEPTION(org.elasticsearch.ResourceNotFoundException.class, - org.elasticsearch.ResourceNotFoundException::new, 19), + org.elasticsearch.ResourceNotFoundException::new, 19, UNKNOWN_VERSION_ADDED), ACTION_TRANSPORT_EXCEPTION(org.elasticsearch.transport.ActionTransportException.class, - org.elasticsearch.transport.ActionTransportException::new, 20), + org.elasticsearch.transport.ActionTransportException::new, 20, UNKNOWN_VERSION_ADDED), ELASTICSEARCH_GENERATION_EXCEPTION(org.elasticsearch.ElasticsearchGenerationException.class, - org.elasticsearch.ElasticsearchGenerationException::new, 21), + org.elasticsearch.ElasticsearchGenerationException::new, 21, UNKNOWN_VERSION_ADDED), // 22 was CreateFailedEngineException INDEX_SHARD_STARTED_EXCEPTION(org.elasticsearch.index.shard.IndexShardStartedException.class, - org.elasticsearch.index.shard.IndexShardStartedException::new, 23), + org.elasticsearch.index.shard.IndexShardStartedException::new, 23, UNKNOWN_VERSION_ADDED), SEARCH_CONTEXT_MISSING_EXCEPTION(org.elasticsearch.search.SearchContextMissingException.class, - org.elasticsearch.search.SearchContextMissingException::new, 24), + org.elasticsearch.search.SearchContextMissingException::new, 24, UNKNOWN_VERSION_ADDED), GENERAL_SCRIPT_EXCEPTION(org.elasticsearch.script.GeneralScriptException.class, - org.elasticsearch.script.GeneralScriptException::new, 25), + org.elasticsearch.script.GeneralScriptException::new, 25, UNKNOWN_VERSION_ADDED), BATCH_OPERATION_EXCEPTION(org.elasticsearch.index.shard.TranslogRecoveryPerformer.BatchOperationException.class, - org.elasticsearch.index.shard.TranslogRecoveryPerformer.BatchOperationException::new, 26), + org.elasticsearch.index.shard.TranslogRecoveryPerformer.BatchOperationException::new, 26, UNKNOWN_VERSION_ADDED), SNAPSHOT_CREATION_EXCEPTION(org.elasticsearch.snapshots.SnapshotCreationException.class, - org.elasticsearch.snapshots.SnapshotCreationException::new, 27), - DELETE_FAILED_ENGINE_EXCEPTION(org.elasticsearch.index.engine.DeleteFailedEngineException.class, - org.elasticsearch.index.engine.DeleteFailedEngineException::new, 28),// deprecated in 6.0, remove in 7.0 + org.elasticsearch.snapshots.SnapshotCreationException::new, 27, UNKNOWN_VERSION_ADDED), + DELETE_FAILED_ENGINE_EXCEPTION(org.elasticsearch.index.engine.DeleteFailedEngineException.class, // deprecated in 6.0, remove in 7.0 + org.elasticsearch.index.engine.DeleteFailedEngineException::new, 28, UNKNOWN_VERSION_ADDED), DOCUMENT_MISSING_EXCEPTION(org.elasticsearch.index.engine.DocumentMissingException.class, - org.elasticsearch.index.engine.DocumentMissingException::new, 29), + org.elasticsearch.index.engine.DocumentMissingException::new, 29, UNKNOWN_VERSION_ADDED), SNAPSHOT_EXCEPTION(org.elasticsearch.snapshots.SnapshotException.class, - org.elasticsearch.snapshots.SnapshotException::new, 30), + org.elasticsearch.snapshots.SnapshotException::new, 30, UNKNOWN_VERSION_ADDED), INVALID_ALIAS_NAME_EXCEPTION(org.elasticsearch.indices.InvalidAliasNameException.class, - org.elasticsearch.indices.InvalidAliasNameException::new, 31), + org.elasticsearch.indices.InvalidAliasNameException::new, 31, UNKNOWN_VERSION_ADDED), INVALID_INDEX_NAME_EXCEPTION(org.elasticsearch.indices.InvalidIndexNameException.class, - org.elasticsearch.indices.InvalidIndexNameException::new, 32), + org.elasticsearch.indices.InvalidIndexNameException::new, 32, UNKNOWN_VERSION_ADDED), INDEX_PRIMARY_SHARD_NOT_ALLOCATED_EXCEPTION(org.elasticsearch.indices.IndexPrimaryShardNotAllocatedException.class, - org.elasticsearch.indices.IndexPrimaryShardNotAllocatedException::new, 33), + org.elasticsearch.indices.IndexPrimaryShardNotAllocatedException::new, 33, UNKNOWN_VERSION_ADDED), TRANSPORT_EXCEPTION(org.elasticsearch.transport.TransportException.class, - org.elasticsearch.transport.TransportException::new, 34), + org.elasticsearch.transport.TransportException::new, 34, UNKNOWN_VERSION_ADDED), ELASTICSEARCH_PARSE_EXCEPTION(org.elasticsearch.ElasticsearchParseException.class, - org.elasticsearch.ElasticsearchParseException::new, 35), + org.elasticsearch.ElasticsearchParseException::new, 35, UNKNOWN_VERSION_ADDED), SEARCH_EXCEPTION(org.elasticsearch.search.SearchException.class, - org.elasticsearch.search.SearchException::new, 36), + org.elasticsearch.search.SearchException::new, 36, UNKNOWN_VERSION_ADDED), MAPPER_EXCEPTION(org.elasticsearch.index.mapper.MapperException.class, - org.elasticsearch.index.mapper.MapperException::new, 37), + org.elasticsearch.index.mapper.MapperException::new, 37, UNKNOWN_VERSION_ADDED), INVALID_TYPE_NAME_EXCEPTION(org.elasticsearch.indices.InvalidTypeNameException.class, - org.elasticsearch.indices.InvalidTypeNameException::new, 38), + org.elasticsearch.indices.InvalidTypeNameException::new, 38, UNKNOWN_VERSION_ADDED), SNAPSHOT_RESTORE_EXCEPTION(org.elasticsearch.snapshots.SnapshotRestoreException.class, - org.elasticsearch.snapshots.SnapshotRestoreException::new, 39), - PARSING_EXCEPTION(org.elasticsearch.common.ParsingException.class, org.elasticsearch.common.ParsingException::new, 40), + org.elasticsearch.snapshots.SnapshotRestoreException::new, 39, UNKNOWN_VERSION_ADDED), + PARSING_EXCEPTION(org.elasticsearch.common.ParsingException.class, org.elasticsearch.common.ParsingException::new, 40, + UNKNOWN_VERSION_ADDED), INDEX_SHARD_CLOSED_EXCEPTION(org.elasticsearch.index.shard.IndexShardClosedException.class, - org.elasticsearch.index.shard.IndexShardClosedException::new, 41), + org.elasticsearch.index.shard.IndexShardClosedException::new, 41, UNKNOWN_VERSION_ADDED), RECOVER_FILES_RECOVERY_EXCEPTION(org.elasticsearch.indices.recovery.RecoverFilesRecoveryException.class, - org.elasticsearch.indices.recovery.RecoverFilesRecoveryException::new, 42), + org.elasticsearch.indices.recovery.RecoverFilesRecoveryException::new, 42, UNKNOWN_VERSION_ADDED), TRUNCATED_TRANSLOG_EXCEPTION(org.elasticsearch.index.translog.TruncatedTranslogException.class, - org.elasticsearch.index.translog.TruncatedTranslogException::new, 43), + org.elasticsearch.index.translog.TruncatedTranslogException::new, 43, UNKNOWN_VERSION_ADDED), RECOVERY_FAILED_EXCEPTION(org.elasticsearch.indices.recovery.RecoveryFailedException.class, - org.elasticsearch.indices.recovery.RecoveryFailedException::new, 44), + org.elasticsearch.indices.recovery.RecoveryFailedException::new, 44, UNKNOWN_VERSION_ADDED), INDEX_SHARD_RELOCATED_EXCEPTION(org.elasticsearch.index.shard.IndexShardRelocatedException.class, - org.elasticsearch.index.shard.IndexShardRelocatedException::new, 45), + org.elasticsearch.index.shard.IndexShardRelocatedException::new, 45, UNKNOWN_VERSION_ADDED), NODE_SHOULD_NOT_CONNECT_EXCEPTION(org.elasticsearch.transport.NodeShouldNotConnectException.class, - org.elasticsearch.transport.NodeShouldNotConnectException::new, 46), + org.elasticsearch.transport.NodeShouldNotConnectException::new, 46, UNKNOWN_VERSION_ADDED), // 47 used to be for IndexTemplateAlreadyExistsException which was deprecated in 5.1 removed in 6.0 TRANSLOG_CORRUPTED_EXCEPTION(org.elasticsearch.index.translog.TranslogCorruptedException.class, - org.elasticsearch.index.translog.TranslogCorruptedException::new, 48), + org.elasticsearch.index.translog.TranslogCorruptedException::new, 48, UNKNOWN_VERSION_ADDED), CLUSTER_BLOCK_EXCEPTION(org.elasticsearch.cluster.block.ClusterBlockException.class, - org.elasticsearch.cluster.block.ClusterBlockException::new, 49), + org.elasticsearch.cluster.block.ClusterBlockException::new, 49, UNKNOWN_VERSION_ADDED), FETCH_PHASE_EXECUTION_EXCEPTION(org.elasticsearch.search.fetch.FetchPhaseExecutionException.class, - org.elasticsearch.search.fetch.FetchPhaseExecutionException::new, 50), + org.elasticsearch.search.fetch.FetchPhaseExecutionException::new, 50, UNKNOWN_VERSION_ADDED), // 51 used to be for IndexShardAlreadyExistsException which was deprecated in 5.1 removed in 6.0 VERSION_CONFLICT_ENGINE_EXCEPTION(org.elasticsearch.index.engine.VersionConflictEngineException.class, - org.elasticsearch.index.engine.VersionConflictEngineException::new, 52), - ENGINE_EXCEPTION(org.elasticsearch.index.engine.EngineException.class, org.elasticsearch.index.engine.EngineException::new, 53), + org.elasticsearch.index.engine.VersionConflictEngineException::new, 52, UNKNOWN_VERSION_ADDED), + ENGINE_EXCEPTION(org.elasticsearch.index.engine.EngineException.class, org.elasticsearch.index.engine.EngineException::new, 53, + UNKNOWN_VERSION_ADDED), // 54 was DocumentAlreadyExistsException, which is superseded by VersionConflictEngineException - NO_SUCH_NODE_EXCEPTION(org.elasticsearch.action.NoSuchNodeException.class, org.elasticsearch.action.NoSuchNodeException::new, 55), + NO_SUCH_NODE_EXCEPTION(org.elasticsearch.action.NoSuchNodeException.class, org.elasticsearch.action.NoSuchNodeException::new, 55, + UNKNOWN_VERSION_ADDED), SETTINGS_EXCEPTION(org.elasticsearch.common.settings.SettingsException.class, - org.elasticsearch.common.settings.SettingsException::new, 56), + org.elasticsearch.common.settings.SettingsException::new, 56, UNKNOWN_VERSION_ADDED), INDEX_TEMPLATE_MISSING_EXCEPTION(org.elasticsearch.indices.IndexTemplateMissingException.class, - org.elasticsearch.indices.IndexTemplateMissingException::new, 57), + org.elasticsearch.indices.IndexTemplateMissingException::new, 57, UNKNOWN_VERSION_ADDED), SEND_REQUEST_TRANSPORT_EXCEPTION(org.elasticsearch.transport.SendRequestTransportException.class, - org.elasticsearch.transport.SendRequestTransportException::new, 58), + org.elasticsearch.transport.SendRequestTransportException::new, 58, UNKNOWN_VERSION_ADDED), ES_REJECTED_EXECUTION_EXCEPTION(org.elasticsearch.common.util.concurrent.EsRejectedExecutionException.class, - org.elasticsearch.common.util.concurrent.EsRejectedExecutionException::new, 59), + org.elasticsearch.common.util.concurrent.EsRejectedExecutionException::new, 59, UNKNOWN_VERSION_ADDED), EARLY_TERMINATION_EXCEPTION(org.elasticsearch.common.lucene.Lucene.EarlyTerminationException.class, - org.elasticsearch.common.lucene.Lucene.EarlyTerminationException::new, 60), + org.elasticsearch.common.lucene.Lucene.EarlyTerminationException::new, 60, UNKNOWN_VERSION_ADDED), // 61 used to be for RoutingValidationException NOT_SERIALIZABLE_EXCEPTION_WRAPPER(org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper.class, - org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper::new, 62), + org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper::new, 62, UNKNOWN_VERSION_ADDED), ALIAS_FILTER_PARSING_EXCEPTION(org.elasticsearch.indices.AliasFilterParsingException.class, - org.elasticsearch.indices.AliasFilterParsingException::new, 63), + org.elasticsearch.indices.AliasFilterParsingException::new, 63, UNKNOWN_VERSION_ADDED), // 64 was DeleteByQueryFailedEngineException, which was removed in 5.0 - GATEWAY_EXCEPTION(org.elasticsearch.gateway.GatewayException.class, org.elasticsearch.gateway.GatewayException::new, 65), + GATEWAY_EXCEPTION(org.elasticsearch.gateway.GatewayException.class, org.elasticsearch.gateway.GatewayException::new, 65, + UNKNOWN_VERSION_ADDED), INDEX_SHARD_NOT_RECOVERING_EXCEPTION(org.elasticsearch.index.shard.IndexShardNotRecoveringException.class, - org.elasticsearch.index.shard.IndexShardNotRecoveringException::new, 66), - HTTP_EXCEPTION(org.elasticsearch.http.HttpException.class, org.elasticsearch.http.HttpException::new, 67), + org.elasticsearch.index.shard.IndexShardNotRecoveringException::new, 66, UNKNOWN_VERSION_ADDED), + HTTP_EXCEPTION(org.elasticsearch.http.HttpException.class, org.elasticsearch.http.HttpException::new, 67, UNKNOWN_VERSION_ADDED), ELASTICSEARCH_EXCEPTION(org.elasticsearch.ElasticsearchException.class, - org.elasticsearch.ElasticsearchException::new, 68), + org.elasticsearch.ElasticsearchException::new, 68, UNKNOWN_VERSION_ADDED), SNAPSHOT_MISSING_EXCEPTION(org.elasticsearch.snapshots.SnapshotMissingException.class, - org.elasticsearch.snapshots.SnapshotMissingException::new, 69), + org.elasticsearch.snapshots.SnapshotMissingException::new, 69, UNKNOWN_VERSION_ADDED), PRIMARY_MISSING_ACTION_EXCEPTION(org.elasticsearch.action.PrimaryMissingActionException.class, - org.elasticsearch.action.PrimaryMissingActionException::new, 70), - FAILED_NODE_EXCEPTION(org.elasticsearch.action.FailedNodeException.class, org.elasticsearch.action.FailedNodeException::new, 71), - SEARCH_PARSE_EXCEPTION(org.elasticsearch.search.SearchParseException.class, org.elasticsearch.search.SearchParseException::new, 72), + org.elasticsearch.action.PrimaryMissingActionException::new, 70, UNKNOWN_VERSION_ADDED), + FAILED_NODE_EXCEPTION(org.elasticsearch.action.FailedNodeException.class, org.elasticsearch.action.FailedNodeException::new, 71, + UNKNOWN_VERSION_ADDED), + SEARCH_PARSE_EXCEPTION(org.elasticsearch.search.SearchParseException.class, org.elasticsearch.search.SearchParseException::new, 72, + UNKNOWN_VERSION_ADDED), CONCURRENT_SNAPSHOT_EXECUTION_EXCEPTION(org.elasticsearch.snapshots.ConcurrentSnapshotExecutionException.class, - org.elasticsearch.snapshots.ConcurrentSnapshotExecutionException::new, 73), + org.elasticsearch.snapshots.ConcurrentSnapshotExecutionException::new, 73, UNKNOWN_VERSION_ADDED), BLOB_STORE_EXCEPTION(org.elasticsearch.common.blobstore.BlobStoreException.class, - org.elasticsearch.common.blobstore.BlobStoreException::new, 74), + org.elasticsearch.common.blobstore.BlobStoreException::new, 74, UNKNOWN_VERSION_ADDED), INCOMPATIBLE_CLUSTER_STATE_VERSION_EXCEPTION(org.elasticsearch.cluster.IncompatibleClusterStateVersionException.class, - org.elasticsearch.cluster.IncompatibleClusterStateVersionException::new, 75), + org.elasticsearch.cluster.IncompatibleClusterStateVersionException::new, 75, UNKNOWN_VERSION_ADDED), RECOVERY_ENGINE_EXCEPTION(org.elasticsearch.index.engine.RecoveryEngineException.class, - org.elasticsearch.index.engine.RecoveryEngineException::new, 76), + org.elasticsearch.index.engine.RecoveryEngineException::new, 76, UNKNOWN_VERSION_ADDED), UNCATEGORIZED_EXECUTION_EXCEPTION(org.elasticsearch.common.util.concurrent.UncategorizedExecutionException.class, - org.elasticsearch.common.util.concurrent.UncategorizedExecutionException::new, 77), + org.elasticsearch.common.util.concurrent.UncategorizedExecutionException::new, 77, UNKNOWN_VERSION_ADDED), TIMESTAMP_PARSING_EXCEPTION(org.elasticsearch.action.TimestampParsingException.class, - org.elasticsearch.action.TimestampParsingException::new, 78), + org.elasticsearch.action.TimestampParsingException::new, 78, UNKNOWN_VERSION_ADDED), ROUTING_MISSING_EXCEPTION(org.elasticsearch.action.RoutingMissingException.class, - org.elasticsearch.action.RoutingMissingException::new, 79), - INDEX_FAILED_ENGINE_EXCEPTION(org.elasticsearch.index.engine.IndexFailedEngineException.class, - org.elasticsearch.index.engine.IndexFailedEngineException::new, 80), // deprecated in 6.0, remove in 7.0 + org.elasticsearch.action.RoutingMissingException::new, 79, UNKNOWN_VERSION_ADDED), + INDEX_FAILED_ENGINE_EXCEPTION(org.elasticsearch.index.engine.IndexFailedEngineException.class, // deprecated in 6.0, remove in 7.0 + org.elasticsearch.index.engine.IndexFailedEngineException::new, 80, UNKNOWN_VERSION_ADDED), INDEX_SHARD_RESTORE_FAILED_EXCEPTION(org.elasticsearch.index.snapshots.IndexShardRestoreFailedException.class, - org.elasticsearch.index.snapshots.IndexShardRestoreFailedException::new, 81), + org.elasticsearch.index.snapshots.IndexShardRestoreFailedException::new, 81, UNKNOWN_VERSION_ADDED), REPOSITORY_EXCEPTION(org.elasticsearch.repositories.RepositoryException.class, - org.elasticsearch.repositories.RepositoryException::new, 82), + org.elasticsearch.repositories.RepositoryException::new, 82, UNKNOWN_VERSION_ADDED), RECEIVE_TIMEOUT_TRANSPORT_EXCEPTION(org.elasticsearch.transport.ReceiveTimeoutTransportException.class, - org.elasticsearch.transport.ReceiveTimeoutTransportException::new, 83), + org.elasticsearch.transport.ReceiveTimeoutTransportException::new, 83, UNKNOWN_VERSION_ADDED), NODE_DISCONNECTED_EXCEPTION(org.elasticsearch.transport.NodeDisconnectedException.class, - org.elasticsearch.transport.NodeDisconnectedException::new, 84), + org.elasticsearch.transport.NodeDisconnectedException::new, 84, UNKNOWN_VERSION_ADDED), ALREADY_EXPIRED_EXCEPTION(org.elasticsearch.index.AlreadyExpiredException.class, - org.elasticsearch.index.AlreadyExpiredException::new, 85), + org.elasticsearch.index.AlreadyExpiredException::new, 85, UNKNOWN_VERSION_ADDED), AGGREGATION_EXECUTION_EXCEPTION(org.elasticsearch.search.aggregations.AggregationExecutionException.class, - org.elasticsearch.search.aggregations.AggregationExecutionException::new, 86), + org.elasticsearch.search.aggregations.AggregationExecutionException::new, 86, UNKNOWN_VERSION_ADDED), // 87 used to be for MergeMappingException INVALID_INDEX_TEMPLATE_EXCEPTION(org.elasticsearch.indices.InvalidIndexTemplateException.class, - org.elasticsearch.indices.InvalidIndexTemplateException::new, 88), + org.elasticsearch.indices.InvalidIndexTemplateException::new, 88, UNKNOWN_VERSION_ADDED), REFRESH_FAILED_ENGINE_EXCEPTION(org.elasticsearch.index.engine.RefreshFailedEngineException.class, - org.elasticsearch.index.engine.RefreshFailedEngineException::new, 90), + org.elasticsearch.index.engine.RefreshFailedEngineException::new, 90, UNKNOWN_VERSION_ADDED), AGGREGATION_INITIALIZATION_EXCEPTION(org.elasticsearch.search.aggregations.AggregationInitializationException.class, - org.elasticsearch.search.aggregations.AggregationInitializationException::new, 91), + org.elasticsearch.search.aggregations.AggregationInitializationException::new, 91, UNKNOWN_VERSION_ADDED), DELAY_RECOVERY_EXCEPTION(org.elasticsearch.indices.recovery.DelayRecoveryException.class, - org.elasticsearch.indices.recovery.DelayRecoveryException::new, 92), + org.elasticsearch.indices.recovery.DelayRecoveryException::new, 92, UNKNOWN_VERSION_ADDED), // 93 used to be for IndexWarmerMissingException NO_NODE_AVAILABLE_EXCEPTION(org.elasticsearch.client.transport.NoNodeAvailableException.class, - org.elasticsearch.client.transport.NoNodeAvailableException::new, 94), + org.elasticsearch.client.transport.NoNodeAvailableException::new, 94, UNKNOWN_VERSION_ADDED), INVALID_SNAPSHOT_NAME_EXCEPTION(org.elasticsearch.snapshots.InvalidSnapshotNameException.class, - org.elasticsearch.snapshots.InvalidSnapshotNameException::new, 96), + org.elasticsearch.snapshots.InvalidSnapshotNameException::new, 96, UNKNOWN_VERSION_ADDED), ILLEGAL_INDEX_SHARD_STATE_EXCEPTION(org.elasticsearch.index.shard.IllegalIndexShardStateException.class, - org.elasticsearch.index.shard.IllegalIndexShardStateException::new, 97), + org.elasticsearch.index.shard.IllegalIndexShardStateException::new, 97, UNKNOWN_VERSION_ADDED), INDEX_SHARD_SNAPSHOT_EXCEPTION(org.elasticsearch.index.snapshots.IndexShardSnapshotException.class, - org.elasticsearch.index.snapshots.IndexShardSnapshotException::new, 98), + org.elasticsearch.index.snapshots.IndexShardSnapshotException::new, 98, UNKNOWN_VERSION_ADDED), INDEX_SHARD_NOT_STARTED_EXCEPTION(org.elasticsearch.index.shard.IndexShardNotStartedException.class, - org.elasticsearch.index.shard.IndexShardNotStartedException::new, 99), + org.elasticsearch.index.shard.IndexShardNotStartedException::new, 99, UNKNOWN_VERSION_ADDED), SEARCH_PHASE_EXECUTION_EXCEPTION(org.elasticsearch.action.search.SearchPhaseExecutionException.class, - org.elasticsearch.action.search.SearchPhaseExecutionException::new, 100), + org.elasticsearch.action.search.SearchPhaseExecutionException::new, 100, UNKNOWN_VERSION_ADDED), ACTION_NOT_FOUND_TRANSPORT_EXCEPTION(org.elasticsearch.transport.ActionNotFoundTransportException.class, - org.elasticsearch.transport.ActionNotFoundTransportException::new, 101), + org.elasticsearch.transport.ActionNotFoundTransportException::new, 101, UNKNOWN_VERSION_ADDED), TRANSPORT_SERIALIZATION_EXCEPTION(org.elasticsearch.transport.TransportSerializationException.class, - org.elasticsearch.transport.TransportSerializationException::new, 102), + org.elasticsearch.transport.TransportSerializationException::new, 102, UNKNOWN_VERSION_ADDED), REMOTE_TRANSPORT_EXCEPTION(org.elasticsearch.transport.RemoteTransportException.class, - org.elasticsearch.transport.RemoteTransportException::new, 103), + org.elasticsearch.transport.RemoteTransportException::new, 103, UNKNOWN_VERSION_ADDED), ENGINE_CREATION_FAILURE_EXCEPTION(org.elasticsearch.index.engine.EngineCreationFailureException.class, - org.elasticsearch.index.engine.EngineCreationFailureException::new, 104), + org.elasticsearch.index.engine.EngineCreationFailureException::new, 104, UNKNOWN_VERSION_ADDED), ROUTING_EXCEPTION(org.elasticsearch.cluster.routing.RoutingException.class, - org.elasticsearch.cluster.routing.RoutingException::new, 105), + org.elasticsearch.cluster.routing.RoutingException::new, 105, UNKNOWN_VERSION_ADDED), INDEX_SHARD_RECOVERY_EXCEPTION(org.elasticsearch.index.shard.IndexShardRecoveryException.class, - org.elasticsearch.index.shard.IndexShardRecoveryException::new, 106), + org.elasticsearch.index.shard.IndexShardRecoveryException::new, 106, UNKNOWN_VERSION_ADDED), REPOSITORY_MISSING_EXCEPTION(org.elasticsearch.repositories.RepositoryMissingException.class, - org.elasticsearch.repositories.RepositoryMissingException::new, 107), + org.elasticsearch.repositories.RepositoryMissingException::new, 107, UNKNOWN_VERSION_ADDED), DOCUMENT_SOURCE_MISSING_EXCEPTION(org.elasticsearch.index.engine.DocumentSourceMissingException.class, - org.elasticsearch.index.engine.DocumentSourceMissingException::new, 109), + org.elasticsearch.index.engine.DocumentSourceMissingException::new, 109, UNKNOWN_VERSION_ADDED), // 110 used to be FlushNotAllowedEngineException NO_CLASS_SETTINGS_EXCEPTION(org.elasticsearch.common.settings.NoClassSettingsException.class, - org.elasticsearch.common.settings.NoClassSettingsException::new, 111), + org.elasticsearch.common.settings.NoClassSettingsException::new, 111, UNKNOWN_VERSION_ADDED), BIND_TRANSPORT_EXCEPTION(org.elasticsearch.transport.BindTransportException.class, - org.elasticsearch.transport.BindTransportException::new, 112), + org.elasticsearch.transport.BindTransportException::new, 112, UNKNOWN_VERSION_ADDED), ALIASES_NOT_FOUND_EXCEPTION(org.elasticsearch.rest.action.admin.indices.AliasesNotFoundException.class, - org.elasticsearch.rest.action.admin.indices.AliasesNotFoundException::new, 113), + org.elasticsearch.rest.action.admin.indices.AliasesNotFoundException::new, 113, UNKNOWN_VERSION_ADDED), INDEX_SHARD_RECOVERING_EXCEPTION(org.elasticsearch.index.shard.IndexShardRecoveringException.class, - org.elasticsearch.index.shard.IndexShardRecoveringException::new, 114), + org.elasticsearch.index.shard.IndexShardRecoveringException::new, 114, UNKNOWN_VERSION_ADDED), TRANSLOG_EXCEPTION(org.elasticsearch.index.translog.TranslogException.class, - org.elasticsearch.index.translog.TranslogException::new, 115), + org.elasticsearch.index.translog.TranslogException::new, 115, UNKNOWN_VERSION_ADDED), PROCESS_CLUSTER_EVENT_TIMEOUT_EXCEPTION(org.elasticsearch.cluster.metadata.ProcessClusterEventTimeoutException.class, - org.elasticsearch.cluster.metadata.ProcessClusterEventTimeoutException::new, 116), + org.elasticsearch.cluster.metadata.ProcessClusterEventTimeoutException::new, 116, UNKNOWN_VERSION_ADDED), RETRY_ON_PRIMARY_EXCEPTION(ReplicationOperation.RetryOnPrimaryException.class, - ReplicationOperation.RetryOnPrimaryException::new, 117), + ReplicationOperation.RetryOnPrimaryException::new, 117, UNKNOWN_VERSION_ADDED), ELASTICSEARCH_TIMEOUT_EXCEPTION(org.elasticsearch.ElasticsearchTimeoutException.class, - org.elasticsearch.ElasticsearchTimeoutException::new, 118), + org.elasticsearch.ElasticsearchTimeoutException::new, 118, UNKNOWN_VERSION_ADDED), QUERY_PHASE_EXECUTION_EXCEPTION(org.elasticsearch.search.query.QueryPhaseExecutionException.class, - org.elasticsearch.search.query.QueryPhaseExecutionException::new, 119), + org.elasticsearch.search.query.QueryPhaseExecutionException::new, 119, UNKNOWN_VERSION_ADDED), REPOSITORY_VERIFICATION_EXCEPTION(org.elasticsearch.repositories.RepositoryVerificationException.class, - org.elasticsearch.repositories.RepositoryVerificationException::new, 120), + org.elasticsearch.repositories.RepositoryVerificationException::new, 120, UNKNOWN_VERSION_ADDED), INVALID_AGGREGATION_PATH_EXCEPTION(org.elasticsearch.search.aggregations.InvalidAggregationPathException.class, - org.elasticsearch.search.aggregations.InvalidAggregationPathException::new, 121), + org.elasticsearch.search.aggregations.InvalidAggregationPathException::new, 121, UNKNOWN_VERSION_ADDED), // 123 used to be IndexAlreadyExistsException and was renamed RESOURCE_ALREADY_EXISTS_EXCEPTION(ResourceAlreadyExistsException.class, - ResourceAlreadyExistsException::new, 123), + ResourceAlreadyExistsException::new, 123, UNKNOWN_VERSION_ADDED), // 124 used to be Script.ScriptParseException HTTP_ON_TRANSPORT_EXCEPTION(TcpTransport.HttpOnTransportException.class, - TcpTransport.HttpOnTransportException::new, 125), + TcpTransport.HttpOnTransportException::new, 125, UNKNOWN_VERSION_ADDED), MAPPER_PARSING_EXCEPTION(org.elasticsearch.index.mapper.MapperParsingException.class, - org.elasticsearch.index.mapper.MapperParsingException::new, 126), + org.elasticsearch.index.mapper.MapperParsingException::new, 126, UNKNOWN_VERSION_ADDED), SEARCH_CONTEXT_EXCEPTION(org.elasticsearch.search.SearchContextException.class, - org.elasticsearch.search.SearchContextException::new, 127), + org.elasticsearch.search.SearchContextException::new, 127, UNKNOWN_VERSION_ADDED), SEARCH_SOURCE_BUILDER_EXCEPTION(org.elasticsearch.search.builder.SearchSourceBuilderException.class, - org.elasticsearch.search.builder.SearchSourceBuilderException::new, 128), + org.elasticsearch.search.builder.SearchSourceBuilderException::new, 128, UNKNOWN_VERSION_ADDED), ENGINE_CLOSED_EXCEPTION(org.elasticsearch.index.engine.EngineClosedException.class, - org.elasticsearch.index.engine.EngineClosedException::new, 129), + org.elasticsearch.index.engine.EngineClosedException::new, 129, UNKNOWN_VERSION_ADDED), NO_SHARD_AVAILABLE_ACTION_EXCEPTION(org.elasticsearch.action.NoShardAvailableActionException.class, - org.elasticsearch.action.NoShardAvailableActionException::new, 130), + org.elasticsearch.action.NoShardAvailableActionException::new, 130, UNKNOWN_VERSION_ADDED), UNAVAILABLE_SHARDS_EXCEPTION(org.elasticsearch.action.UnavailableShardsException.class, - org.elasticsearch.action.UnavailableShardsException::new, 131), + org.elasticsearch.action.UnavailableShardsException::new, 131, UNKNOWN_VERSION_ADDED), FLUSH_FAILED_ENGINE_EXCEPTION(org.elasticsearch.index.engine.FlushFailedEngineException.class, - org.elasticsearch.index.engine.FlushFailedEngineException::new, 132), + org.elasticsearch.index.engine.FlushFailedEngineException::new, 132, UNKNOWN_VERSION_ADDED), CIRCUIT_BREAKING_EXCEPTION(org.elasticsearch.common.breaker.CircuitBreakingException.class, - org.elasticsearch.common.breaker.CircuitBreakingException::new, 133), + org.elasticsearch.common.breaker.CircuitBreakingException::new, 133, UNKNOWN_VERSION_ADDED), NODE_NOT_CONNECTED_EXCEPTION(org.elasticsearch.transport.NodeNotConnectedException.class, - org.elasticsearch.transport.NodeNotConnectedException::new, 134), + org.elasticsearch.transport.NodeNotConnectedException::new, 134, UNKNOWN_VERSION_ADDED), STRICT_DYNAMIC_MAPPING_EXCEPTION(org.elasticsearch.index.mapper.StrictDynamicMappingException.class, - org.elasticsearch.index.mapper.StrictDynamicMappingException::new, 135), + org.elasticsearch.index.mapper.StrictDynamicMappingException::new, 135, UNKNOWN_VERSION_ADDED), RETRY_ON_REPLICA_EXCEPTION(org.elasticsearch.action.support.replication.TransportReplicationAction.RetryOnReplicaException.class, - org.elasticsearch.action.support.replication.TransportReplicationAction.RetryOnReplicaException::new, 136), + org.elasticsearch.action.support.replication.TransportReplicationAction.RetryOnReplicaException::new, 136, + UNKNOWN_VERSION_ADDED), TYPE_MISSING_EXCEPTION(org.elasticsearch.indices.TypeMissingException.class, - org.elasticsearch.indices.TypeMissingException::new, 137), + org.elasticsearch.indices.TypeMissingException::new, 137, UNKNOWN_VERSION_ADDED), FAILED_TO_COMMIT_CLUSTER_STATE_EXCEPTION(org.elasticsearch.discovery.Discovery.FailedToCommitClusterStateException.class, - org.elasticsearch.discovery.Discovery.FailedToCommitClusterStateException::new, 140), + org.elasticsearch.discovery.Discovery.FailedToCommitClusterStateException::new, 140, UNKNOWN_VERSION_ADDED), QUERY_SHARD_EXCEPTION(org.elasticsearch.index.query.QueryShardException.class, - org.elasticsearch.index.query.QueryShardException::new, 141), + org.elasticsearch.index.query.QueryShardException::new, 141, UNKNOWN_VERSION_ADDED), NO_LONGER_PRIMARY_SHARD_EXCEPTION(ShardStateAction.NoLongerPrimaryShardException.class, - ShardStateAction.NoLongerPrimaryShardException::new, 142), - SCRIPT_EXCEPTION(org.elasticsearch.script.ScriptException.class, org.elasticsearch.script.ScriptException::new, 143), - NOT_MASTER_EXCEPTION(org.elasticsearch.cluster.NotMasterException.class, org.elasticsearch.cluster.NotMasterException::new, 144), - STATUS_EXCEPTION(org.elasticsearch.ElasticsearchStatusException.class, org.elasticsearch.ElasticsearchStatusException::new, 145), + ShardStateAction.NoLongerPrimaryShardException::new, 142, UNKNOWN_VERSION_ADDED), + SCRIPT_EXCEPTION(org.elasticsearch.script.ScriptException.class, org.elasticsearch.script.ScriptException::new, 143, + UNKNOWN_VERSION_ADDED), + NOT_MASTER_EXCEPTION(org.elasticsearch.cluster.NotMasterException.class, org.elasticsearch.cluster.NotMasterException::new, 144, + UNKNOWN_VERSION_ADDED), + STATUS_EXCEPTION(org.elasticsearch.ElasticsearchStatusException.class, org.elasticsearch.ElasticsearchStatusException::new, 145, + UNKNOWN_VERSION_ADDED), TASK_CANCELLED_EXCEPTION(org.elasticsearch.tasks.TaskCancelledException.class, - org.elasticsearch.tasks.TaskCancelledException::new, 146); + org.elasticsearch.tasks.TaskCancelledException::new, 146, UNKNOWN_VERSION_ADDED), + SHARD_LOCK_OBTAIN_FAILED_EXCEPTION(org.elasticsearch.env.ShardLockObtainFailedException.class, + org.elasticsearch.env.ShardLockObtainFailedException::new, 147, V_5_1_0_UNRELEASED); final Class exceptionClass; final FunctionThatThrowsIOException constructor; final int id; + final Version versionAdded; ElasticsearchExceptionHandle(Class exceptionClass, - FunctionThatThrowsIOException constructor, int id) { + FunctionThatThrowsIOException constructor, int id, + Version versionAdded) { // We need the exceptionClass because you can't dig it out of the constructor reliably. this.exceptionClass = exceptionClass; this.constructor = constructor; + this.versionAdded = versionAdded; this.id = id; } } diff --git a/core/src/main/java/org/elasticsearch/common/io/stream/StreamOutput.java b/core/src/main/java/org/elasticsearch/common/io/stream/StreamOutput.java index 788d8dfb925..a928e234545 100644 --- a/core/src/main/java/org/elasticsearch/common/io/stream/StreamOutput.java +++ b/core/src/main/java/org/elasticsearch/common/io/stream/StreamOutput.java @@ -802,7 +802,7 @@ public abstract class StreamOutput extends OutputStream { writeVInt(17); } else { ElasticsearchException ex; - if (throwable instanceof ElasticsearchException && ElasticsearchException.isRegistered(throwable.getClass())) { + if (throwable instanceof ElasticsearchException && ElasticsearchException.isRegistered(throwable.getClass(), version)) { ex = (ElasticsearchException) throwable; } else { ex = new NotSerializableExceptionWrapper(throwable); diff --git a/core/src/main/java/org/elasticsearch/env/ShardLockObtainFailedException.java b/core/src/main/java/org/elasticsearch/env/ShardLockObtainFailedException.java index d1a8ce3b6d4..21bba81adbb 100644 --- a/core/src/main/java/org/elasticsearch/env/ShardLockObtainFailedException.java +++ b/core/src/main/java/org/elasticsearch/env/ShardLockObtainFailedException.java @@ -19,30 +19,36 @@ package org.elasticsearch.env; +import org.elasticsearch.ElasticsearchException; +import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.index.shard.ShardId; +import java.io.IOException; + /** * Exception used when the in-memory lock for a shard cannot be obtained */ -public class ShardLockObtainFailedException extends Exception { - private final ShardId shardId; +public class ShardLockObtainFailedException extends ElasticsearchException { public ShardLockObtainFailedException(ShardId shardId, String message) { - super(message); - this.shardId = shardId; + super(buildMessage(shardId, message)); + this.setShard(shardId); } public ShardLockObtainFailedException(ShardId shardId, String message, Throwable cause) { - super(message, cause); - this.shardId = shardId; + super(buildMessage(shardId, message), cause); + this.setShard(shardId); } - @Override - public String getMessage() { + public ShardLockObtainFailedException(StreamInput in) throws IOException { + super(in); + } + + private static String buildMessage(ShardId shardId, String message) { StringBuilder sb = new StringBuilder(); sb.append(shardId.toString()); sb.append(": "); - sb.append(super.getMessage()); + sb.append(message); return sb.toString(); } } diff --git a/core/src/test/java/org/elasticsearch/ExceptionSerializationTests.java b/core/src/test/java/org/elasticsearch/ExceptionSerializationTests.java index ac42bb5cdce..603272126b4 100644 --- a/core/src/test/java/org/elasticsearch/ExceptionSerializationTests.java +++ b/core/src/test/java/org/elasticsearch/ExceptionSerializationTests.java @@ -49,6 +49,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentLocation; import org.elasticsearch.discovery.DiscoverySettings; +import org.elasticsearch.env.ShardLockObtainFailedException; import org.elasticsearch.index.AlreadyExpiredException; import org.elasticsearch.index.Index; import org.elasticsearch.index.engine.RecoveryEngineException; @@ -107,6 +108,7 @@ import static java.util.Collections.emptyMap; import static java.util.Collections.emptySet; import static java.util.Collections.singleton; import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static org.hamcrest.Matchers.instanceOf; public class ExceptionSerializationTests extends ESTestCase { @@ -160,10 +162,10 @@ public class ExceptionSerializationTests extends ESTestCase { if (isEsException(clazz) == false) { return; } - if (ElasticsearchException.isRegistered(clazz.asSubclass(Throwable.class)) == false + if (ElasticsearchException.isRegistered(clazz.asSubclass(Throwable.class), Version.CURRENT) == false && ElasticsearchException.class.equals(clazz.getEnclosingClass()) == false) { notRegistered.add(clazz); - } else if (ElasticsearchException.isRegistered(clazz.asSubclass(Throwable.class))) { + } else if (ElasticsearchException.isRegistered(clazz.asSubclass(Throwable.class), Version.CURRENT)) { registered.add(clazz); try { if (clazz.getMethod("writeTo", StreamOutput.class) != null) { @@ -218,10 +220,17 @@ public class ExceptionSerializationTests extends ESTestCase { } private T serialize(T exception) throws IOException { - ElasticsearchAssertions.assertVersionSerializable(VersionUtils.randomVersion(random()), exception); + return serialize(exception, VersionUtils.randomVersion(random())); + } + + private T serialize(T exception, Version version) throws IOException { + ElasticsearchAssertions.assertVersionSerializable(version, exception); BytesStreamOutput out = new BytesStreamOutput(); + out.setVersion(version); out.writeException(exception); + StreamInput in = out.bytes().streamInput(); + in.setVersion(version); return in.readException(); } @@ -769,6 +778,7 @@ public class ExceptionSerializationTests extends ESTestCase { ids.put(144, org.elasticsearch.cluster.NotMasterException.class); ids.put(145, org.elasticsearch.ElasticsearchStatusException.class); ids.put(146, org.elasticsearch.tasks.TaskCancelledException.class); + ids.put(147, org.elasticsearch.env.ShardLockObtainFailedException.class); Map, Integer> reverse = new HashMap<>(); for (Map.Entry> entry : ids.entrySet()) { @@ -826,4 +836,28 @@ public class ExceptionSerializationTests extends ESTestCase { assertEquals(ex.status(), e.status()); assertEquals(RestStatus.TOO_MANY_REQUESTS, e.status()); } + + public void testShardLockObtainFailedException() throws IOException { + ShardId shardId = new ShardId("foo", "_na_", 1); + ShardLockObtainFailedException orig = new ShardLockObtainFailedException(shardId, "boom"); + Version version = VersionUtils.randomVersionBetween(random(), + Version.V_5_0_0, Version.CURRENT); + if (version.before(ElasticsearchException.V_5_1_0_UNRELEASED)) { + // remove this once 5_1_0 is released randomVersionBetween asserts that this version is in the constant table.. + version = ElasticsearchException.V_5_1_0_UNRELEASED; + } + ShardLockObtainFailedException ex = serialize(orig, version); + assertEquals(orig.getMessage(), ex.getMessage()); + assertEquals(orig.getShardId(), ex.getShardId()); + } + + public void testBWCShardLockObtainFailedException() throws IOException { + ShardId shardId = new ShardId("foo", "_na_", 1); + ShardLockObtainFailedException orig = new ShardLockObtainFailedException(shardId, "boom"); + Exception ex = serialize((Exception)orig, Version.V_5_0_0); + assertThat(ex, instanceOf(NotSerializableExceptionWrapper.class)); + assertEquals("shard_lock_obtain_failed_exception: [foo][1]: boom", ex.getMessage()); + } + + } diff --git a/core/src/test/java/org/elasticsearch/VersionTests.java b/core/src/test/java/org/elasticsearch/VersionTests.java index 9499b79432c..1e87f7eeb31 100644 --- a/core/src/test/java/org/elasticsearch/VersionTests.java +++ b/core/src/test/java/org/elasticsearch/VersionTests.java @@ -284,6 +284,7 @@ public class VersionTests extends ESTestCase { assertUnknownVersion(OsStats.V_5_1_0); // once we released 5.1.0 and it's added to Version.java we need to remove this constant assertUnknownVersion(QueryStringQueryBuilder.V_5_1_0_UNRELEASED); assertUnknownVersion(SimpleQueryStringBuilder.V_5_1_0_UNRELEASED); + assertUnknownVersion(ElasticsearchException.V_5_1_0_UNRELEASED); // once we released 5.0.0 and it's added to Version.java we need to remove this constant assertUnknownVersion(Script.V_5_1_0_UNRELEASED); // once we released 5.0.0 and it's added to Version.java we need to remove this constant