# 이 실패를 위한 어휘 MongoFailureCategory.java:3 /** MongoFailureCategory.java:4 * Stable parent category of a failure (design §15). MongoFailureCategory.java:5 * MongoFailureCategory.java:6 *
Server codes and driver error labels change between releases; this category does not. It is MongoFailureCategory.java:7 * the value that appears in metrics and dashboards, which is why an unrecognised server code maps MongoFailureCategory.java:8 * to {@link #UNCLASSIFIED} rather than inventing a new category at runtime and blowing up metric MongoFailureCategory.java:9 * cardinality. MongoFailureCategory.java:10 */ MongoFailureCategory.java:63 MongoFailureCategory.java:64 /** The platform refused the operation locally before contacting a server. */ MongoFailureCategory.java:65 OPERATION_REJECTED, MongoFailureCategory.java:66 MongoFailureCategory.java:67 /** The stored document's schema version is outside the supported range. */ MongoFailureCategory.java:68 SCHEMA_VERSION_UNSUPPORTED, MongoFailureCategory.java:69 MongoFailureCategory.java:70 /** A recognised failure with no more specific stable category. */ MongoFailureCategory.java:71 UNCLASSIFIED MongoFailureCategory.java:72 } MongoDataSchemaUnsupportedException.java:5 /** MongoDataSchemaUnsupportedException.java:6 * A stored document's schema version is outside the supported range (design §12.2). MongoDataSchemaUnsupportedException.java:7 * MongoDataSchemaUnsupportedException.java:8 *
Raised before domain deserialization, which is the whole value: a document written by a newer
MongoDataSchemaUnsupportedException.java:9 * release, or one left behind by a retired version, must not be silently coerced into the current
MongoDataSchemaUnsupportedException.java:10 * shape. Versions are integers and carry no data, so both are safe to name in the message.
MongoDataSchemaUnsupportedException.java:11 */
MongoDataSchemaUnsupportedException.java:12 public final class MongoDataSchemaUnsupportedException extends MongoPersistenceException {
MongoDataSchemaUnsupportedException.java:13
MongoDataSchemaUnsupportedException.java:14 @Serial private static final long serialVersionUID = 1L;
MongoDataSchemaUnsupportedException.java:15
MongoDataSchemaUnsupportedException.java:16 private final int documentVersion;
MongoDataSchemaUnsupportedException.java:17
MongoDataSchemaUnsupportedException.java:18 private final int minimumSupported;
MongoDataSchemaUnsupportedException.java:19
MongoDataSchemaUnsupportedException.java:20 private final int currentVersion;
MongoDataSchemaUnsupportedException.java:21
MongoDataSchemaUnsupportedException.java:22 public MongoDataSchemaUnsupportedException(
MongoDataSchemaUnsupportedException.java:23 MongoFailureContext failureContext,
MongoDataSchemaUnsupportedException.java:24 int documentVersion,
MongoDataSchemaUnsupportedException.java:25 int minimumSupported,
MongoDataSchemaUnsupportedException.java:26 int currentVersion) {
MongoDataSchemaUnsupportedException.java:27 super(
MongoDataSchemaUnsupportedException.java:28 "stored schema version "
MongoDataSchemaUnsupportedException.java:29 + documentVersion
MongoDataSchemaUnsupportedException.java:30 + " is outside the supported range ["
MongoDataSchemaUnsupportedException.java:31 + minimumSupported
MongoDataSchemaUnsupportedException.java:32 + ", "
MongoDataSchemaUnsupportedException.java:33 + currentVersion
MongoDataSchemaUnsupportedException.java:34 + "]",
MongoDataSchemaUnsupportedException.java:35 failureContext);
MongoDataSchemaUnsupportedException.java:36 this.documentVersion = documentVersion;
MongoDataSchemaUnsupportedException.java:37 this.minimumSupported = minimumSupported;
MongoDataSchemaUnsupportedException.java:38 this.currentVersion = currentVersion;
MongoDataSchemaUnsupportedException.java:39 }
MongoDataSchemaUnsupportedException.java:40
MongoDataSchemaUnsupportedException.java:41 /** The version found on the stored document. */
MongoDataSchemaUnsupportedException.java:42 public int documentVersion() {
MongoDataSchemaUnsupportedException.java:43 return documentVersion;
MongoDataSchemaUnsupportedException.java:44 }
MongoDataSchemaUnsupportedException.java:45
MongoDataSchemaUnsupportedException.java:46 /** The oldest version this release can still read. */
MongoDataSchemaUnsupportedException.java:47 public int minimumSupported() {
MongoDataSchemaUnsupportedException.java:48 return minimumSupported;
MongoDataSchemaUnsupportedException.java:49 }
MongoDataSchemaUnsupportedException.java:50
MongoDataSchemaUnsupportedException.java:51 /** The version this release writes. */
MongoDataSchemaUnsupportedException.java:52 public int currentVersion() {
MongoDataSchemaUnsupportedException.java:53 return currentVersion;
MongoDataSchemaUnsupportedException.java:54 }
# 프로덕션 생성 지점 전수
MongoSchemaVersionPolicy.java:85 return new MongoDataSchemaUnsupportedException(
DefaultMongoFailureTranslator.java:111 new MongoDataSchemaUnsupportedException(failureContext, -1, -1, -1);
# 버전을 아는 쪽
MongoSchemaVersionPolicy.java:82 private MongoDataSchemaUnsupportedException unsupported(DocumentSchemaVersion version) {
MongoSchemaVersionPolicy.java:83 MongoFailureContext context =
MongoSchemaVersionPolicy.java:84 MongoFailureContext.rejected(new MongoOperationName("schema.version-check"));
MongoSchemaVersionPolicy.java:85 return new MongoDataSchemaUnsupportedException(
MongoSchemaVersionPolicy.java:86 context, version.value(), range.minimumSupported().value(), range.current().value());
MongoSchemaVersionPolicy.java:87 }
그 context 가 무엇을 담는가 :
MongoFailureContext.java:135 public static MongoFailureContext rejected(MongoOperationName operationName) {
MongoFailureContext.java:136 return new MongoFailureContext(
MongoFailureContext.java:137 MongoOperationScope.ofOperation(operationName),
MongoFailureContext.java:138 MongoOperationType.UNKNOWN,
MongoFailureContext.java:139 MongoConsistencyProfile.PRIMARY_LOCAL,
MongoFailureContext.java:140 MongoFailureCategory.OPERATION_REJECTED,
MongoFailureContext.java:141 MongoExecutionOutcome.NOT_SENT,
MongoFailureContext.java:142 false,
MongoFailureContext.java:143 false,
MongoFailureContext.java:144 Set.of(),
MongoFailureContext.java:145 "",
MongoFailureContext.java:146 1,
MongoFailureContext.java:147 Duration.ZERO,
MongoFailureContext.java:148 "");
MongoFailureContext.java:149 }
# 전용 category 를 붙이는 쪽
DefaultMongoFailureTranslator.java:88 elapsed,
DefaultMongoFailureTranslator.java:89 "");
DefaultMongoFailureTranslator.java:90
DefaultMongoFailureTranslator.java:91 return switch (classification.category()) {
DefaultMongoFailureTranslator.java:92 case DUPLICATE_KEY -> new MongoDuplicateKeyException(failureContext);
DefaultMongoFailureTranslator.java:93 case SCHEMA_VALIDATION -> new MongoSchemaValidationException(failureContext);
DefaultMongoFailureTranslator.java:94 case OPTIMISTIC_CONFLICT -> new MongoOptimisticConflictException(failureContext);
DefaultMongoFailureTranslator.java:95 case WRITE_CONFLICT -> new MongoWriteConflictException(failureContext);
DefaultMongoFailureTranslator.java:96 case TRANSACTION_TRANSIENT -> new MongoTransactionTransientException(failureContext);
DefaultMongoFailureTranslator.java:97 case TRANSACTION_COMMIT_UNKNOWN ->
DefaultMongoFailureTranslator.java:98 new MongoTransactionCommitUnknownException(
DefaultMongoFailureTranslator.java:99 failureContext, "read the transaction record, version or idempotency key");
DefaultMongoFailureTranslator.java:100 case WRITE_CONCERN -> new MongoWriteConcernException(failureContext);
DefaultMongoFailureTranslator.java:101 case READ_CONCERN -> new MongoReadConcernException(failureContext);
DefaultMongoFailureTranslator.java:102 case SERVER_SELECTION -> new MongoServerSelectionException(failureContext);
DefaultMongoFailureTranslator.java:103 case CONNECTION -> new MongoConnectionException(failureContext);
DefaultMongoFailureTranslator.java:104 case TIMEOUT -> new MongoTimeoutException(failureContext);
DefaultMongoFailureTranslator.java:105 case CURSOR -> new MongoCursorException(failureContext);
DefaultMongoFailureTranslator.java:106 case DOCUMENT_TOO_LARGE -> new MongoDocumentTooLargeException(failureContext, -1L, -1L);
DefaultMongoFailureTranslator.java:107 case SHARD_ROUTING -> new MongoShardRoutingException(failureContext);
DefaultMongoFailureTranslator.java:108 case RESUME -> new MongoResumeException(failureContext);
DefaultMongoFailureTranslator.java:109 case ENCRYPTION -> new MongoEncryptionException(failureContext);
DefaultMongoFailureTranslator.java:110 case SCHEMA_VERSION_UNSUPPORTED ->
DefaultMongoFailureTranslator.java:111 new MongoDataSchemaUnsupportedException(failureContext, -1, -1, -1);
DefaultMongoFailureTranslator.java:112 // Bulk partial failure and local rejection are raised by the layers that own their detail —
DefaultMongoFailureTranslator.java:113 // per-item results and the guardrail that refused — so a failure that reaches translation
DefaultMongoFailureTranslator.java:114 // carrying either category is one this release does not recognise.
DefaultMongoFailureTranslator.java:115 case BULK_PARTIAL_FAILURE, OPERATION_REJECTED, UNCLASSIFIED ->
DefaultMongoFailureTranslator.java:116 new MongoUnclassifiedFailureException(failureContext);
DefaultMongoFailureTranslator.java:117 };
DefaultMongoFailureTranslator.java:118 }
# 그 case 에 도달할 수 있는가
SCHEMA_VERSION_UNSUPPORTED 가 저장소 전체에 나오는 줄 : 2 개
MongoFailureCategory.java:68 SCHEMA_VERSION_UNSUPPORTED,
DefaultMongoFailureTranslator.java:110 case SCHEMA_VERSION_UNSUPPORTED ->
[대조] OPERATION_REJECTED 는 : 4 개
분류기가 category 를 정하는 자리 전부 :
DefaultMongoFailureClassifier.java:24 /** Server codes whose meaning the platform maps to a stable category. */
DefaultMongoFailureClassifier.java:25 private static final Map Nothing was written, so the outcome is {@code NO_WRITE_PERFORMED} rather than {@code
MongoFailureContext.java:155 * NOT_SENT}: the read did reach the server, and what came back is unusable.
MongoFailureContext.java:156 */
MongoFailureContext.java:157 public static MongoFailureContext schemaMismatch(MongoOperationName operationName) {
MongoFailureContext.java:158 return new MongoFailureContext(
MongoFailureContext.java:159 MongoOperationScope.ofOperation(operationName),
MongoFailureContext.java:160 MongoOperationType.FIND,
MongoFailureContext.java:161 MongoConsistencyProfile.PRIMARY_LOCAL,
MongoFailureContext.java:162 MongoFailureCategory.SCHEMA_VALIDATION,
MongoFailureContext.java:163 MongoExecutionOutcome.NO_WRITE_PERFORMED,
MongoFailureContext.java:164 false,
MongoFailureContext.java:165 false,
MongoFailureContext.java:166 Set.of(),
MongoFailureContext.java:167 "",
MongoFailureContext.java:168 1,
MongoFailureContext.java:169 Duration.ZERO,
MongoFailureContext.java:170 "");
MongoFailureContext.java:171 }
MongoFailureContext.java:172
그 팩터리를 부르는 자리 :
MongoFailureContext.java:157 public static MongoFailureContext schemaMismatch(MongoOperationName operationName) {
PolicyAwareMongoTypeMapper.java:112 dev.caskeleton.adapter.outbound.mongo.api.error.MongoFailureContext.schemaMismatch(
PolicyAwareMongoTypeMapper.java:185 MongoFailureContext.schemaMismatch(READ_OPERATION)));
PolicyAwareMongoTypeMapper.java:192 throw new MongoSchemaValidationException(MongoFailureContext.schemaMismatch(READ_OPERATION));
# 두 생성 지점이 조립되는가
new MongoSchemaVersionPolicy 를 부르는 main 줄 : 0 개
그 타입이 main 에 나오는 자리 전부 :
MongoSchemaVersionPolicy.java:17 public final class MongoSchemaVersionPolicy {
MongoSchemaVersionPolicy.java:22 public MongoSchemaVersionPolicy(
MongoSchemaVersionPolicy.java:29 public MongoSchemaVersionPolicy(MongoSchemaVersionRange range, boolean legacyReadsEnabled) {
[대조] new MongoSchemaVersionPolicy 를 부르는 시험 줄 : 6 개
DefaultMongoFailureTranslator 를 빈으로 만드는 main 줄 : 2 개
MongoPlatformAutoConfiguration.java:93 return new DefaultMongoFailureTranslator(classifier);
DefaultMongoFailureTranslator.java:47 return new DefaultMongoFailureTranslator(new DefaultMongoFailureClassifier());
# 같은 모양이 하나 더
MongoDocumentTooLargeException.java:26 }
MongoDocumentTooLargeException.java:27
MongoDocumentTooLargeException.java:28 /** Estimated serialized size. A size, not content: safe to log. */
MongoDocumentTooLargeException.java:29 public long estimatedBytes() {
MongoDocumentTooLargeException.java:30 return estimatedBytes;
MongoDocumentTooLargeException.java:31 }
MongoDocumentTooLargeException.java:32
MongoDocumentTooLargeException.java:33 /** The configured ceiling that was exceeded. */
MongoDocumentTooLargeException.java:34 public long budgetBytes() {
MongoDocumentTooLargeException.java:35 return budgetBytes;
MongoDocumentTooLargeException.java:36 }
# 그 정책을 검사하는 시험이 무엇을 단언하는가
MongoSchemaVersionPolicyTest.java:4 import static org.assertj.core.api.Assertions.assertThatThrownBy;
MongoSchemaVersionPolicyTest.java:15 void rejectsFutureVersion() {
MongoSchemaVersionPolicyTest.java:20 assertThatThrownBy(() -> policy.requireReadable(new DocumentSchemaVersion(5)))
MongoSchemaVersionPolicyTest.java:21 .isInstanceOf(MongoDataSchemaUnsupportedException.class);
MongoSchemaVersionPolicyTest.java:25 void rejectsRetiredVersion() {
MongoSchemaVersionPolicyTest.java:30 assertThatThrownBy(() -> policy.requireReadable(new DocumentSchemaVersion(1)))
MongoSchemaVersionPolicyTest.java:31 .isInstanceOf(MongoDataSchemaUnsupportedException.class);
MongoSchemaVersionPolicyTest.java:35 void missingVersionIsLegacyOnlyWhenTheCollectionAllowsIt() {
MongoSchemaVersionPolicyTest.java:43 assertThat(permissive.resolveMissingVersion()).isEqualTo(DocumentSchemaVersion.LEGACY_V0);
MongoSchemaVersionPolicyTest.java:44 assertThatThrownBy(strict::resolveMissingVersion)
MongoSchemaVersionPolicyTest.java:45 .isInstanceOf(MongoDataSchemaUnsupportedException.class);
MongoSchemaVersionPolicyTest.java:49 void newWritesAlwaysUseTheCurrentVersion() {
MongoSchemaVersionPolicyTest.java:54 assertThat(policy.writeVersion()).isEqualTo(new DocumentSchemaVersion(4));
MongoSchemaVersionPolicyTest.java:58 void readingAnOlderSupportedVersionIsAMeteredConversion() {
MongoSchemaVersionPolicyTest.java:63 assertThat(policy.requiresReadTimeConversion(new DocumentSchemaVersion(3))).isTrue();
MongoSchemaVersionPolicyTest.java:64 assertThat(policy.requiresReadTimeConversion(new DocumentSchemaVersion(4))).isFalse();
MongoSchemaVersionPolicyTest.java:68 void aNegativeVersionIsNotAVersion() {
MongoSchemaVersionPolicyTest.java:69 assertThatThrownBy(() -> new DocumentSchemaVersion(-1))
MongoSchemaVersionPolicyTest.java:70 .isInstanceOf(IllegalArgumentException.class);
그 시험이 category 나 세 버전 값을 단언하는 줄 : 0 개