Skip to content

Commit ae1a7f4

Browse files
Version conflict exception message enhancement (#29432)
Report doc is not found rather on PUT ?version=X rather current version [-1] is different than the one provided Closes #21278 (cherry picked from commit 03d1a7e)
1 parent 6964a95 commit ae1a7f4

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

server/src/main/java/org/elasticsearch/index/VersionType.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public String explainConflictForWrites(long currentVersion, long expectedVersion
3838
if (expectedVersion == Versions.MATCH_DELETED) {
3939
return "document already exists (current version [" + currentVersion + "])";
4040
}
41+
if (currentVersion == Versions.NOT_FOUND) {
42+
return "document does not exist (expected version [" + expectedVersion + "])";
43+
}
4144
return "current version [" + currentVersion + "] is different than the one provided [" + expectedVersion + "]";
4245
}
4346

@@ -48,6 +51,9 @@ public boolean isVersionConflictForReads(long currentVersion, long expectedVersi
4851

4952
@Override
5053
public String explainConflictForReads(long currentVersion, long expectedVersion) {
54+
if (currentVersion == Versions.NOT_FOUND) {
55+
return "document does not exist (expected version [" + expectedVersion + "])";
56+
}
5157
return "current version [" + currentVersion + "] is different than the one provided [" + expectedVersion + "]";
5258
}
5359

@@ -123,6 +129,9 @@ public boolean isVersionConflictForReads(long currentVersion, long expectedVersi
123129

124130
@Override
125131
public String explainConflictForReads(long currentVersion, long expectedVersion) {
132+
if (currentVersion == Versions.NOT_FOUND) {
133+
return "document does not exist (expected version [" + expectedVersion + "])";
134+
}
126135
return "current version [" + currentVersion + "] is different than the one provided [" + expectedVersion + "]";
127136
}
128137

@@ -178,6 +187,9 @@ public boolean isVersionConflictForReads(long currentVersion, long expectedVersi
178187

179188
@Override
180189
public String explainConflictForReads(long currentVersion, long expectedVersion) {
190+
if (currentVersion == Versions.NOT_FOUND) {
191+
return "document does not exist (expected version [" + expectedVersion + "])";
192+
}
181193
return "current version [" + currentVersion + "] is different than the one provided [" + expectedVersion + "]";
182194
}
183195

server/src/test/java/org/elasticsearch/index/VersionTypeTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ public void testInternalVersionConflict() throws Exception {
3535
assertFalse(VersionType.INTERNAL.isVersionConflictForWrites(Versions.NOT_FOUND, Versions.MATCH_ANY, randomBoolean()));
3636
assertFalse(VersionType.INTERNAL.isVersionConflictForReads(Versions.NOT_FOUND, Versions.MATCH_ANY));
3737

38+
assertEquals("current version [1] is different than the one provided [2]",
39+
VersionType.INTERNAL.explainConflictForReads(1, 2));
40+
assertEquals("document does not exist (expected version [2])",
41+
VersionType.INTERNAL.explainConflictForReads(Versions.NOT_FOUND, 2));
42+
3843
// deletes
3944
assertFalse(VersionType.INTERNAL.isVersionConflictForWrites(Versions.NOT_FOUND, Versions.MATCH_DELETED, true));
4045
assertFalse(VersionType.INTERNAL.isVersionConflictForWrites(10, Versions.MATCH_DELETED, true));
@@ -70,13 +75,23 @@ public void testVersionValidation() {
7075
assertTrue(VersionType.EXTERNAL.validateVersionForReads(randomIntBetween(1, Integer.MAX_VALUE)));
7176
assertFalse(VersionType.EXTERNAL.validateVersionForReads(randomIntBetween(Integer.MIN_VALUE, -1)));
7277

78+
assertEquals("current version [1] is different than the one provided [2]",
79+
VersionType.EXTERNAL.explainConflictForReads(1, 2));
80+
assertEquals("document does not exist (expected version [2])",
81+
VersionType.EXTERNAL.explainConflictForReads(Versions.NOT_FOUND, 2));
82+
7383
assertTrue(VersionType.EXTERNAL_GTE.validateVersionForWrites(randomIntBetween(1, Integer.MAX_VALUE)));
7484
assertFalse(VersionType.EXTERNAL_GTE.validateVersionForWrites(Versions.MATCH_ANY));
7585
assertFalse(VersionType.EXTERNAL_GTE.validateVersionForWrites(randomIntBetween(Integer.MIN_VALUE, 0)));
7686
assertTrue(VersionType.EXTERNAL_GTE.validateVersionForReads(Versions.MATCH_ANY));
7787
assertTrue(VersionType.EXTERNAL_GTE.validateVersionForReads(randomIntBetween(1, Integer.MAX_VALUE)));
7888
assertFalse(VersionType.EXTERNAL_GTE.validateVersionForReads(randomIntBetween(Integer.MIN_VALUE, -1)));
7989

90+
assertEquals("current version [1] is different than the one provided [2]",
91+
VersionType.EXTERNAL_GTE.explainConflictForReads(1, 2));
92+
assertEquals("document does not exist (expected version [2])",
93+
VersionType.EXTERNAL_GTE.explainConflictForReads(Versions.NOT_FOUND, 2));
94+
8095
assertTrue(VersionType.INTERNAL.validateVersionForWrites(randomIntBetween(1, Integer.MAX_VALUE)));
8196
assertTrue(VersionType.INTERNAL.validateVersionForWrites(Versions.MATCH_ANY));
8297
assertFalse(VersionType.INTERNAL.validateVersionForWrites(randomIntBetween(Integer.MIN_VALUE, 0)));

0 commit comments

Comments
 (0)