Skip to content

Commit

Permalink
Expose Sequence Number based Optimistic Concurrency Control in the re…
Browse files Browse the repository at this point in the history
…st layer (#36721)

Relates #36148 
Relates #10708
  • Loading branch information
bleskes authored and davidkyle committed Dec 18, 2018
1 parent 557a5be commit 7872365
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,14 @@
"type" : "time",
"description" : "Explicit operation timeout"
},
"if_seq_no_match" : {
"type" : "number",
"description" : "only perform the delete operation if the last operation that has changed the document has the specified sequence number"
},
"if_primary_term_match" : {
"type" : "number",
"description" : "only perform the delete operation if the last operation that has changed the document has the specified primary term"
},
"version" : {
"type" : "number",
"description" : "Explicit version number for concurrency control"
Expand Down
8 changes: 8 additions & 0 deletions rest-api-spec/src/main/resources/rest-api-spec/api/index.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@
"options" : ["internal", "external", "external_gte", "force"],
"description" : "Specific version type"
},
"if_seq_no_match" : {
"type" : "number",
"description" : "only perform the index operation if the last operation that has changed the document has the specified sequence number"
},
"if_primary_term_match" : {
"type" : "number",
"description" : "only perform the index operation if the last operation that has changed the document has the specified primary term"
},
"pipeline" : {
"type" : "string",
"description" : "The pipeline id to preprocess incoming documents with"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
"Compare And Swap Sequence Numbers":

- skip:
version: " - 6.99.99"
reason: cas ops are introduced in 7.0.0

- do:
index:
index: test_1
id: 1
body: { foo: bar }
- match: { _version: 1}
- set: { _seq_no: seqno }
- set: { _primary_term: primary_term }

- do:
get:
index: test_1
id: 1
- match: { _seq_no: $seqno }
- match: { _primary_term: $primary_term }

- do:
catch: conflict
index:
index: test_1
id: 1
if_seq_no_match: 10000
if_primary_term_match: $primary_term
body: { foo: bar2 }

- do:
catch: conflict
index:
index: test_1
id: 1
if_seq_no_match: $seqno
if_primary_term_match: 1000
body: { foo: bar2 }

- do:
index:
index: test_1
id: 1
if_seq_no_match: $seqno
if_primary_term_match: $primary_term
body: { foo: bar2 }

- match: { _version: 2 }
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public long getVersion() {
}

/**
* The sequence number assigned to the last operation to have changed this document, if found.
* The sequence number assigned to the last operation that has changed this document, if found.
*/
public long getSeqNo() {
return getResult.getSeqNo();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public long getVersion() {
}

/**
* The sequence number assigned to the last operation to have changed this document, if found.
* The sequence number assigned to the last operation that has changed this document, if found.
*/
public long getSeqNo() {
return seqNo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC
deleteRequest.setRefreshPolicy(request.param("refresh"));
deleteRequest.version(RestActions.parseVersion(request));
deleteRequest.versionType(VersionType.fromString(request.param("version_type"), deleteRequest.versionType()));
deleteRequest.setIfMatch(
request.paramAsLong("if_seq_no_match", deleteRequest.ifSeqNoMatch()),
request.paramAsLong("if_primary_term_match", deleteRequest.ifPrimaryTermMatch())
);

String waitForActiveShards = request.param("wait_for_active_shards");
if (waitForActiveShards != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC
indexRequest.setRefreshPolicy(request.param("refresh"));
indexRequest.version(RestActions.parseVersion(request));
indexRequest.versionType(VersionType.fromString(request.param("version_type"), indexRequest.versionType()));
indexRequest.ifMatch(
request.paramAsLong("if_seq_no_match", indexRequest.ifSeqNoMatch()),
request.paramAsLong("if_primary_term_match", indexRequest.ifPrimaryTermMatch())
);
String sOpType = request.param("op_type");
String waitForActiveShards = request.param("wait_for_active_shards");
if (waitForActiveShards != null) {
Expand Down

0 comments on commit 7872365

Please sign in to comment.