summaryrefslogtreecommitdiff
path: root/core/src/test/java/org
diff options
context:
space:
mode:
authorLee Hinman <lee@writequit.org>2016-09-08 07:43:55 -0600
committerLee Hinman <lee@writequit.org>2016-09-08 07:43:55 -0600
commitb41888966584fac1717131dbee165aa638535bea (patch)
tree9033f7bbd99acab40788edfce4ced461ed2aa17e /core/src/test/java/org
parent8e7dfae7d1b44b45027622afff77251f034eb587 (diff)
Revert "Remove FORCE version_type"
This reverts commit b4cc3cd35dea2e3059142c6bd7e2eb13ca8944ac.
Diffstat (limited to 'core/src/test/java/org')
-rw-r--r--core/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java7
-rw-r--r--core/src/test/java/org/elasticsearch/index/VersionTypeTests.java40
-rw-r--r--core/src/test/java/org/elasticsearch/update/UpdateIT.java8
-rw-r--r--core/src/test/java/org/elasticsearch/versioning/SimpleVersioningIT.java30
4 files changed, 82 insertions, 3 deletions
diff --git a/core/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java b/core/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java
index 3b88efca20..03cf86397c 100644
--- a/core/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java
+++ b/core/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java
@@ -235,11 +235,14 @@ public class BulkWithUpdatesIT extends ESIntegTestCase {
.add(client().prepareUpdate("test", "type", "e1")
.setDoc("field", "2").setVersion(10)) // INTERNAL
.add(client().prepareUpdate("test", "type", "e1")
- .setDoc("field", "3").setVersion(13).setVersionType(VersionType.INTERNAL))
+ .setDoc("field", "3").setVersion(20).setVersionType(VersionType.FORCE))
+ .add(client().prepareUpdate("test", "type", "e1")
+ .setDoc("field", "4").setVersion(20).setVersionType(VersionType.INTERNAL))
.get();
assertThat(bulkResponse.getItems()[0].getFailureMessage(), containsString("version conflict"));
- assertThat(bulkResponse.getItems()[1].getFailureMessage(), containsString("version conflict"));
+ assertThat(bulkResponse.getItems()[1].getResponse().getVersion(), equalTo(20L));
+ assertThat(bulkResponse.getItems()[2].getResponse().getVersion(), equalTo(21L));
}
public void testBulkUpdateMalformedScripts() throws Exception {
diff --git a/core/src/test/java/org/elasticsearch/index/VersionTypeTests.java b/core/src/test/java/org/elasticsearch/index/VersionTypeTests.java
index 2afe0b7fea..4c79ce1b49 100644
--- a/core/src/test/java/org/elasticsearch/index/VersionTypeTests.java
+++ b/core/src/test/java/org/elasticsearch/index/VersionTypeTests.java
@@ -77,6 +77,13 @@ public class VersionTypeTests extends ESTestCase {
assertTrue(VersionType.EXTERNAL_GTE.validateVersionForReads(randomIntBetween(1, Integer.MAX_VALUE)));
assertFalse(VersionType.EXTERNAL_GTE.validateVersionForReads(randomIntBetween(Integer.MIN_VALUE, -1)));
+ assertTrue(VersionType.FORCE.validateVersionForWrites(randomIntBetween(1, Integer.MAX_VALUE)));
+ assertFalse(VersionType.FORCE.validateVersionForWrites(Versions.MATCH_ANY));
+ assertFalse(VersionType.FORCE.validateVersionForWrites(randomIntBetween(Integer.MIN_VALUE, 0)));
+ assertTrue(VersionType.FORCE.validateVersionForReads(Versions.MATCH_ANY));
+ assertTrue(VersionType.FORCE.validateVersionForReads(randomIntBetween(1, Integer.MAX_VALUE)));
+ assertFalse(VersionType.FORCE.validateVersionForReads(randomIntBetween(Integer.MIN_VALUE, -1)));
+
assertTrue(VersionType.INTERNAL.validateVersionForWrites(randomIntBetween(1, Integer.MAX_VALUE)));
assertTrue(VersionType.INTERNAL.validateVersionForWrites(Versions.MATCH_ANY));
assertFalse(VersionType.INTERNAL.validateVersionForWrites(randomIntBetween(Integer.MIN_VALUE, 0)));
@@ -146,6 +153,36 @@ public class VersionTypeTests extends ESTestCase {
}
+ public void testForceVersionConflict() throws Exception {
+ assertFalse(VersionType.FORCE.isVersionConflictForWrites(Versions.NOT_FOUND, 10, randomBoolean()));
+
+ // MATCH_ANY must throw an exception in the case of force version, as the version must be set! it used as the new value
+ try {
+ VersionType.FORCE.isVersionConflictForWrites(10, Versions.MATCH_ANY, randomBoolean());
+ fail();
+ } catch (IllegalStateException e) {
+ //yes!!
+ }
+
+ // if we didn't find a version (but the index does support it), we always accept
+ assertFalse(VersionType.FORCE.isVersionConflictForWrites(Versions.NOT_FOUND, Versions.NOT_FOUND, randomBoolean()));
+ assertFalse(VersionType.FORCE.isVersionConflictForWrites(Versions.NOT_FOUND, 10, randomBoolean()));
+
+ assertFalse(VersionType.FORCE.isVersionConflictForReads(Versions.NOT_FOUND, Versions.NOT_FOUND));
+ assertFalse(VersionType.FORCE.isVersionConflictForReads(Versions.NOT_FOUND, 10));
+ assertFalse(VersionType.FORCE.isVersionConflictForReads(Versions.NOT_FOUND, Versions.MATCH_ANY));
+
+
+ // and the standard behavior
+ assertFalse(VersionType.FORCE.isVersionConflictForWrites(10, 10, randomBoolean()));
+ assertFalse(VersionType.FORCE.isVersionConflictForWrites(9, 10, randomBoolean()));
+ assertFalse(VersionType.FORCE.isVersionConflictForWrites(10, 9, randomBoolean()));
+ assertFalse(VersionType.FORCE.isVersionConflictForReads(10, 10));
+ assertFalse(VersionType.FORCE.isVersionConflictForReads(9, 10));
+ assertFalse(VersionType.FORCE.isVersionConflictForReads(10, 9));
+ assertFalse(VersionType.FORCE.isVersionConflictForReads(10, Versions.MATCH_ANY));
+ }
+
public void testUpdateVersion() {
assertThat(VersionType.INTERNAL.updateVersion(Versions.NOT_FOUND, 10), equalTo(1L));
assertThat(VersionType.INTERNAL.updateVersion(1, 1), equalTo(2L));
@@ -159,6 +196,9 @@ public class VersionTypeTests extends ESTestCase {
assertThat(VersionType.EXTERNAL_GTE.updateVersion(1, 10), equalTo(10L));
assertThat(VersionType.EXTERNAL_GTE.updateVersion(10, 10), equalTo(10L));
+ assertThat(VersionType.FORCE.updateVersion(Versions.NOT_FOUND, 10), equalTo(10L));
+ assertThat(VersionType.FORCE.updateVersion(11, 10), equalTo(10L));
+
// Old indexing code
// if (index.versionType() == VersionType.INTERNAL) { // internal version type
// updatedVersion = (currentVersion == Versions.NOT_SET || currentVersion == Versions.NOT_FOUND) ? 1 : currentVersion + 1;
diff --git a/core/src/test/java/org/elasticsearch/update/UpdateIT.java b/core/src/test/java/org/elasticsearch/update/UpdateIT.java
index 7ea68dc10f..a71bd466ad 100644
--- a/core/src/test/java/org/elasticsearch/update/UpdateIT.java
+++ b/core/src/test/java/org/elasticsearch/update/UpdateIT.java
@@ -527,9 +527,15 @@ public class UpdateIT extends ESIntegTestCase {
.setVersionType(VersionType.EXTERNAL).execute(),
ActionRequestValidationException.class);
+
+ // With force version
+ client().prepareUpdate(indexOrAlias(), "type", "2")
+ .setScript(new Script("", ScriptService.ScriptType.INLINE, "put_values", Collections.singletonMap("text", "v10")))
+ .setVersion(10).setVersionType(VersionType.FORCE).get();
+
GetResponse get = get("test", "type", "2");
assertThat(get.getVersion(), equalTo(10L));
- assertThat((String) get.getSource().get("text"), equalTo("value"));
+ assertThat((String) get.getSource().get("text"), equalTo("v10"));
// upserts - the combination with versions is a bit weird. Test are here to ensure we do not change our behavior unintentionally
diff --git a/core/src/test/java/org/elasticsearch/versioning/SimpleVersioningIT.java b/core/src/test/java/org/elasticsearch/versioning/SimpleVersioningIT.java
index b80c5bd8e2..67e7d528e5 100644
--- a/core/src/test/java/org/elasticsearch/versioning/SimpleVersioningIT.java
+++ b/core/src/test/java/org/elasticsearch/versioning/SimpleVersioningIT.java
@@ -72,6 +72,36 @@ public class SimpleVersioningIT extends ESIntegTestCase {
assertThat(indexResponse.getVersion(), equalTo(18L));
}
+ public void testForce() throws Exception {
+ createIndex("test");
+ ensureGreen("test"); // we are testing force here which doesn't work if we are recovering at the same time - zzzzz...
+ IndexResponse indexResponse = client().prepareIndex("test", "type", "1").setSource("field1", "value1_1").setVersion(12).setVersionType(VersionType.FORCE).get();
+ assertThat(indexResponse.getVersion(), equalTo(12L));
+
+ indexResponse = client().prepareIndex("test", "type", "1").setSource("field1", "value1_2").setVersion(12).setVersionType(VersionType.FORCE).get();
+ assertThat(indexResponse.getVersion(), equalTo(12L));
+
+ indexResponse = client().prepareIndex("test", "type", "1").setSource("field1", "value1_2").setVersion(14).setVersionType(VersionType.FORCE).get();
+ assertThat(indexResponse.getVersion(), equalTo(14L));
+
+ indexResponse = client().prepareIndex("test", "type", "1").setSource("field1", "value1_1").setVersion(13).setVersionType(VersionType.FORCE).get();
+ assertThat(indexResponse.getVersion(), equalTo(13L));
+
+ client().admin().indices().prepareRefresh().execute().actionGet();
+ if (randomBoolean()) {
+ refresh();
+ }
+ for (int i = 0; i < 10; i++) {
+ assertThat(client().prepareGet("test", "type", "1").get().getVersion(), equalTo(13L));
+ }
+
+ // deleting with a lower version works.
+ long v = randomIntBetween(12, 14);
+ DeleteResponse deleteResponse = client().prepareDelete("test", "type", "1").setVersion(v).setVersionType(VersionType.FORCE).get();
+ assertEquals(DocWriteResponse.Result.DELETED, deleteResponse.getResult());
+ assertThat(deleteResponse.getVersion(), equalTo(v));
+ }
+
public void testExternalGTE() throws Exception {
createIndex("test");