diff --git a/server/src/main/java/org/elasticsearch/action/update/UpdateHelper.java b/server/src/main/java/org/elasticsearch/action/update/UpdateHelper.java index 255161c8f32..a8a5fb8f72f 100644 --- a/server/src/main/java/org/elasticsearch/action/update/UpdateHelper.java +++ b/server/src/main/java/org/elasticsearch/action/update/UpdateHelper.java @@ -163,19 +163,6 @@ public class UpdateHelper { return new Result(indexRequest, DocWriteResponse.Result.CREATED, null, null); } - /** - * Calculate the version to use for the update request, using either the existing version if internal versioning is used, or the get - * result document's version if the version type is "FORCE". - */ - static long calculateUpdateVersion(UpdateRequest request, GetResult getResult) { - if (request.versionType() != VersionType.INTERNAL) { - assert request.versionType() == VersionType.FORCE; - return request.version(); // remember, match_any is excluded by the conflict test - } else { - return getResult.getVersion(); - } - } - /** * Calculate a routing value to be used, either the included index request's routing, or retrieved document's routing when defined. */ @@ -195,7 +182,6 @@ public class UpdateHelper { * containing a new {@code IndexRequest} to be executed on the primary and replicas. */ Result prepareUpdateIndexRequest(ShardId shardId, UpdateRequest request, GetResult getResult, boolean detectNoop) { - final long updateVersion = calculateUpdateVersion(request, getResult); final IndexRequest currentRequest = request.doc(); final String routing = calculateRouting(getResult, currentRequest); final Tuple> sourceAndContent = XContentHelper.convertToMap(getResult.internalSourceRef(), true); @@ -215,7 +201,8 @@ public class UpdateHelper { } else { final IndexRequest finalIndexRequest = Requests.indexRequest(request.index()) .type(request.type()).id(request.id()).routing(routing) - .source(updatedSourceAsMap, updateSourceContentType).version(updateVersion).versionType(request.versionType()) + .source(updatedSourceAsMap, updateSourceContentType) + .setIfSeqNo(getResult.getSeqNo()).setIfPrimaryTerm(getResult.getPrimaryTerm()) .waitForActiveShards(request.waitForActiveShards()).timeout(request.timeout()) .setRefreshPolicy(request.getRefreshPolicy()); return new Result(finalIndexRequest, DocWriteResponse.Result.UPDATED, updatedSourceAsMap, updateSourceContentType); @@ -228,7 +215,6 @@ public class UpdateHelper { * primary and replicas. */ Result prepareUpdateScriptRequest(ShardId shardId, UpdateRequest request, GetResult getResult, LongSupplier nowInMillis) { - final long updateVersion = calculateUpdateVersion(request, getResult); final IndexRequest currentRequest = request.doc(); final String routing = calculateRouting(getResult, currentRequest); final Tuple> sourceAndContent = XContentHelper.convertToMap(getResult.internalSourceRef(), true); @@ -256,14 +242,16 @@ public class UpdateHelper { case INDEX: final IndexRequest indexRequest = Requests.indexRequest(request.index()) .type(request.type()).id(request.id()).routing(routing) - .source(updatedSourceAsMap, updateSourceContentType).version(updateVersion).versionType(request.versionType()) + .source(updatedSourceAsMap, updateSourceContentType) + .setIfSeqNo(getResult.getSeqNo()).setIfPrimaryTerm(getResult.getPrimaryTerm()) .waitForActiveShards(request.waitForActiveShards()).timeout(request.timeout()) .setRefreshPolicy(request.getRefreshPolicy()); return new Result(indexRequest, DocWriteResponse.Result.UPDATED, updatedSourceAsMap, updateSourceContentType); case DELETE: DeleteRequest deleteRequest = Requests.deleteRequest(request.index()) .type(request.type()).id(request.id()).routing(routing) - .version(updateVersion).versionType(request.versionType()).waitForActiveShards(request.waitForActiveShards()) + .setIfSeqNo(getResult.getSeqNo()).setIfPrimaryTerm(getResult.getPrimaryTerm()) + .waitForActiveShards(request.waitForActiveShards()) .timeout(request.timeout()).setRefreshPolicy(request.getRefreshPolicy()); return new Result(deleteRequest, DocWriteResponse.Result.DELETED, updatedSourceAsMap, updateSourceContentType); default: diff --git a/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java b/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java index 4534fbe23e3..5a734352eaf 100644 --- a/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java @@ -38,7 +38,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.common.xcontent.json.JsonXContent; import org.elasticsearch.env.Environment; -import org.elasticsearch.index.VersionType; import org.elasticsearch.index.get.GetResult; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.script.MockScriptEngine; @@ -570,24 +569,6 @@ public class UpdateRequestTests extends ESTestCase { assertThat(UpdateHelper.calculateRouting(getResult, indexRequest), equalTo("routing1")); } - @SuppressWarnings("deprecated") // VersionType.FORCE is deprecated - public void testCalculateUpdateVersion() throws Exception { - long randomVersion = randomIntBetween(0, 100); - GetResult getResult = new GetResult("test", "type", "1", 0, 1, randomVersion, true, new BytesArray("{}"), null); - - UpdateRequest request = new UpdateRequest("test", "type1", "1"); - long version = UpdateHelper.calculateUpdateVersion(request, getResult); - - // Use the get result's version - assertThat(version, equalTo(randomVersion)); - - request = new UpdateRequest("test", "type1", "1").versionType(VersionType.FORCE).version(1337); - version = UpdateHelper.calculateUpdateVersion(request, getResult); - - // Use the forced update request version - assertThat(version, equalTo(1337L)); - } - public void testNoopDetection() throws Exception { ShardId shardId = new ShardId("test", "", 0); GetResult getResult = new GetResult("test", "type", "1", 0, 1, 0, true,