From 7b67ad4f6c3e661c74fd7c95c00ad4f475e638de Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 13 Aug 2018 10:29:34 +0200 Subject: [PATCH] DATAMONGO-2045 - Polishing. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return false instead of null in isTransactionFailureCode(…)/isClientSessionFailureCode(…) to prevent null-dereference. Add initial size to HashMap instances with known number of elements. Fix typos in private constant names. Fix duplicate error code ids. Original pull request: #592. --- .../core/MongoExceptionTranslator.java | 15 ++++++------ .../data/mongodb/util/MongoDbErrorCodes.java | 23 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java index 302da62b0..e3f985dab 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java @@ -16,6 +16,7 @@ package org.springframework.data.mongodb.core; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -53,17 +54,17 @@ import com.mongodb.bulk.BulkWriteError; */ public class MongoExceptionTranslator implements PersistenceExceptionTranslator { - private static final Set DULICATE_KEY_EXCEPTIONS = new HashSet( + private static final Set DUPLICATE_KEY_EXCEPTIONS = new HashSet<>( Arrays.asList("MongoException.DuplicateKey", "DuplicateKeyException")); - private static final Set RESOURCE_FAILURE_EXCEPTIONS = new HashSet( + private static final Set RESOURCE_FAILURE_EXCEPTIONS = new HashSet<>( Arrays.asList("MongoException.Network", "MongoSocketException", "MongoException.CursorNotFound", "MongoCursorNotFoundException", "MongoServerSelectionException", "MongoTimeoutException")); - private static final Set RESOURCE_USAGE_EXCEPTIONS = new HashSet( - Arrays.asList("MongoInternalException")); + private static final Set RESOURCE_USAGE_EXCEPTIONS = new HashSet<>( + Collections.singletonList("MongoInternalException")); - private static final Set DATA_INTEGRETY_EXCEPTIONS = new HashSet( + private static final Set DATA_INTEGRITY_EXCEPTIONS = new HashSet<>( Arrays.asList("WriteConcernException", "MongoWriteException", "MongoBulkWriteException")); /* @@ -81,7 +82,7 @@ public class MongoExceptionTranslator implements PersistenceExceptionTranslator String exception = ClassUtils.getShortName(ClassUtils.getUserClass(ex.getClass())); - if (DULICATE_KEY_EXCEPTIONS.contains(exception)) { + if (DUPLICATE_KEY_EXCEPTIONS.contains(exception)) { return new DuplicateKeyException(ex.getMessage(), ex); } @@ -93,7 +94,7 @@ public class MongoExceptionTranslator implements PersistenceExceptionTranslator return new InvalidDataAccessResourceUsageException(ex.getMessage(), ex); } - if (DATA_INTEGRETY_EXCEPTIONS.contains(exception)) { + if (DATA_INTEGRITY_EXCEPTIONS.contains(exception)) { if (ex instanceof MongoServerException) { if (((MongoServerException) ex).getCode() == 11000) { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoDbErrorCodes.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoDbErrorCodes.java index bce052d3b..68b66ca38 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoDbErrorCodes.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoDbErrorCodes.java @@ -40,7 +40,7 @@ public final class MongoDbErrorCodes { static { - dataAccessResourceFailureCodes = new HashMap<>(10); + dataAccessResourceFailureCodes = new HashMap<>(12, 1f); dataAccessResourceFailureCodes.put(6, "HostUnreachable"); dataAccessResourceFailureCodes.put(7, "HostNotFound"); dataAccessResourceFailureCodes.put(89, "NetworkTimeout"); @@ -54,7 +54,7 @@ public final class MongoDbErrorCodes { dataAccessResourceFailureCodes.put(13441, "BadOffsetInFile"); dataAccessResourceFailureCodes.put(13640, "DataFileHeaderCorrupt"); - dataIntegrityViolationCodes = new HashMap<>(6); + dataIntegrityViolationCodes = new HashMap<>(6, 1f); dataIntegrityViolationCodes.put(67, "CannotCreateIndex"); dataIntegrityViolationCodes.put(68, "IndexAlreadyExists"); dataIntegrityViolationCodes.put(85, "IndexOptionsConflict"); @@ -62,13 +62,13 @@ public final class MongoDbErrorCodes { dataIntegrityViolationCodes.put(112, "WriteConflict"); dataIntegrityViolationCodes.put(117, "ConflictingOperationInProgress"); - duplicateKeyCodes = new HashMap<>(3); + duplicateKeyCodes = new HashMap<>(4, 1f); duplicateKeyCodes.put(3, "OBSOLETE_DuplicateKey"); duplicateKeyCodes.put(84, "DuplicateKeyValue"); duplicateKeyCodes.put(11000, "DuplicateKey"); duplicateKeyCodes.put(11001, "DuplicateKey"); - invalidDataAccessApiUsageExeption = new HashMap<>(); + invalidDataAccessApiUsageExeption = new HashMap<>(31, 1f); invalidDataAccessApiUsageExeption.put(5, "GraphContainsCycle"); invalidDataAccessApiUsageExeption.put(9, "FailedToParse"); invalidDataAccessApiUsageExeption.put(14, "TypeMismatch"); @@ -82,8 +82,7 @@ public final class MongoDbErrorCodes { invalidDataAccessApiUsageExeption.put(30, "InvalidPath"); invalidDataAccessApiUsageExeption.put(40, "ConflictingUpdateOperators"); invalidDataAccessApiUsageExeption.put(45, "UserDataInconsistent"); - invalidDataAccessApiUsageExeption.put(30, "DollarPrefixedFieldName"); - invalidDataAccessApiUsageExeption.put(52, "InvalidPath"); + invalidDataAccessApiUsageExeption.put(52, "DollarPrefixedFieldName"); invalidDataAccessApiUsageExeption.put(53, "InvalidIdField"); invalidDataAccessApiUsageExeption.put(54, "NotSingleValueField"); invalidDataAccessApiUsageExeption.put(55, "InvalidDBRef"); @@ -101,23 +100,23 @@ public final class MongoDbErrorCodes { invalidDataAccessApiUsageExeption.put(17280, "KeyTooLong"); invalidDataAccessApiUsageExeption.put(13334, "ShardKeyTooBig"); - permissionDeniedCodes = new HashMap<>(); + permissionDeniedCodes = new HashMap<>(8, 1f); permissionDeniedCodes.put(11, "UserNotFound"); permissionDeniedCodes.put(18, "AuthenticationFailed"); permissionDeniedCodes.put(31, "RoleNotFound"); permissionDeniedCodes.put(32, "RolesNotRelated"); - permissionDeniedCodes.put(33, "PrvilegeNotFound"); + permissionDeniedCodes.put(33, "PrivilegeNotFound"); permissionDeniedCodes.put(15847, "CannotAuthenticate"); permissionDeniedCodes.put(16704, "CannotAuthenticateToAdminDB"); permissionDeniedCodes.put(16705, "CannotAuthenticateToAdminDB"); - clientSessionCodes = new HashMap<>(); + clientSessionCodes = new HashMap<>(4, 1f); clientSessionCodes.put(206, "NoSuchSession"); clientSessionCodes.put(213, "DuplicateSession"); clientSessionCodes.put(228, "SessionTransferIncomplete"); clientSessionCodes.put(264, "TooManyLogicalSessions"); - transactionCodes = new HashMap<>(); + transactionCodes = new HashMap<>(8, 1f); transactionCodes.put(217, "IncompleteTransactionHistory"); transactionCodes.put(225, "TransactionTooOld"); transactionCodes.put(244, "TransactionAborted"); @@ -168,7 +167,7 @@ public final class MongoDbErrorCodes { * @since 2.1 */ public static boolean isClientSessionFailureCode(@Nullable Integer errorCode) { - return errorCode == null ? null : clientSessionCodes.containsKey(errorCode); + return errorCode == null ? false : clientSessionCodes.containsKey(errorCode); } /** @@ -179,6 +178,6 @@ public final class MongoDbErrorCodes { * @since 2.1 */ public static boolean isTransactionFailureCode(@Nullable Integer errorCode) { - return errorCode == null ? null : transactionCodes.containsKey(errorCode); + return errorCode == null ? false : transactionCodes.containsKey(errorCode); } }