diff --git a/src/main/java/io/tarantool/driver/api/space/options/DeleteOptions.java b/src/main/java/io/tarantool/driver/api/space/options/DeleteOptions.java index 82a97343..b6ab548a 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/DeleteOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/DeleteOptions.java @@ -3,6 +3,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithBucketIdOptions; import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithVshardRouterOptions; /** * Marker interface for space delete operation options @@ -11,5 +12,6 @@ * @author Alexey Kuzin */ public interface DeleteOptions> - extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions { + extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, + OperationWithVshardRouterOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/InsertManyOptions.java b/src/main/java/io/tarantool/driver/api/space/options/InsertManyOptions.java index 49f147fe..ee1f1584 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/InsertManyOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/InsertManyOptions.java @@ -4,6 +4,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithRollbackOnErrorOptions; import io.tarantool.driver.api.space.options.crud.OperationWithStopOnErrorOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithVshardRouterOptions; /** * Marker interface for space insert_many operation options @@ -12,5 +13,5 @@ */ public interface InsertManyOptions> extends OperationWithTimeoutOptions, OperationWithFieldsOptions, OperationWithRollbackOnErrorOptions, - OperationWithStopOnErrorOptions { + OperationWithStopOnErrorOptions, OperationWithVshardRouterOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/InsertOptions.java b/src/main/java/io/tarantool/driver/api/space/options/InsertOptions.java index 140c03ac..85b95e57 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/InsertOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/InsertOptions.java @@ -3,6 +3,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithBucketIdOptions; import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithVshardRouterOptions; /** * Marker interface for space insert operation options @@ -11,5 +12,6 @@ * @author Alexey Kuzin */ public interface InsertOptions> - extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions { + extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, + OperationWithVshardRouterOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/ReplaceManyOptions.java b/src/main/java/io/tarantool/driver/api/space/options/ReplaceManyOptions.java index c34a4eb7..a376efd4 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/ReplaceManyOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/ReplaceManyOptions.java @@ -4,6 +4,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithRollbackOnErrorOptions; import io.tarantool.driver.api.space.options.crud.OperationWithStopOnErrorOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithVshardRouterOptions; /** * Marker interface for space replace_many operation options @@ -12,5 +13,5 @@ */ public interface ReplaceManyOptions> extends OperationWithTimeoutOptions, OperationWithFieldsOptions, OperationWithRollbackOnErrorOptions, - OperationWithStopOnErrorOptions { + OperationWithStopOnErrorOptions, OperationWithVshardRouterOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/ReplaceOptions.java b/src/main/java/io/tarantool/driver/api/space/options/ReplaceOptions.java index cead190f..ca8c46cd 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/ReplaceOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/ReplaceOptions.java @@ -3,6 +3,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithBucketIdOptions; import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithVshardRouterOptions; /** * Marker interface for space replace operation options @@ -11,5 +12,6 @@ * @author Alexey Kuzin */ public interface ReplaceOptions> - extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions { + extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, + OperationWithVshardRouterOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java b/src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java index c7c6815d..3286233a 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java @@ -5,6 +5,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions; import io.tarantool.driver.api.space.options.crud.OperationWithModeOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithVshardRouterOptions; /** * Marker interface for space select operation options @@ -16,5 +17,5 @@ */ public interface SelectOptions> extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, - OperationWithModeOptions, OperationWithBatchSizeOptions { + OperationWithModeOptions, OperationWithBatchSizeOptions, OperationWithVshardRouterOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/UpdateOptions.java b/src/main/java/io/tarantool/driver/api/space/options/UpdateOptions.java index 8f463f62..52694d81 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/UpdateOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/UpdateOptions.java @@ -3,6 +3,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithBucketIdOptions; import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithVshardRouterOptions; /** * Marker interface for space update operation options @@ -11,5 +12,6 @@ * @author Alexey Kuzin */ public interface UpdateOptions> - extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions { + extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, + OperationWithVshardRouterOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/UpsertOptions.java b/src/main/java/io/tarantool/driver/api/space/options/UpsertOptions.java index df93d261..c329140a 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/UpsertOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/UpsertOptions.java @@ -3,6 +3,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithBucketIdOptions; import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithVshardRouterOptions; /** * Marker interface for space upsert operation options @@ -11,5 +12,6 @@ * @author Alexey Kuzin */ public interface UpsertOptions> - extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions { + extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, + OperationWithVshardRouterOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithVshardRouterOptions.java b/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithVshardRouterOptions.java new file mode 100644 index 00000000..47f1fd7a --- /dev/null +++ b/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithVshardRouterOptions.java @@ -0,0 +1,38 @@ +package io.tarantool.driver.api.space.options.crud; + +import java.util.Optional; + +import io.tarantool.driver.api.space.options.Options; +import io.tarantool.driver.api.space.options.Self; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; + +/** + * Base interface for all operation options that may have a configurable "vshard_router" value. + */ +public interface OperationWithVshardRouterOptions> + extends Options, Self { + + /** + * Sets "vshard_router" option value. Cartridge vshard group name or vshard router instance. Set this parameter + * if your space is not a part of the default vshard cluster. + * + * @param vshardRouter cartridge vshard group name or vshard router instance. Set this parameter if your space + * is not a part of the default vshard cluster. + * @return this options instance. + * @throws IllegalArgumentException if vshardRouter is null or consists only of spaces. + */ + default T withVshardRouter(String vshardRouter) throws IllegalArgumentException { + if (vshardRouter.trim().isEmpty()) { + throw new IllegalArgumentException("\"vshardRouter\" parameter cannot be empty or consist only of spaces."); + } + addOption(ProxyOption.VSHARD_ROUTER, vshardRouter); + return self(); + } + + /** + * @return "vshard_router" option value. + */ + default Optional getVshardRouter() { + return getOption(ProxyOption.VSHARD_ROUTER, String.class); + } +} diff --git a/src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java b/src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java index c2b9de5f..54e45c5a 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java +++ b/src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java @@ -23,7 +23,9 @@ public enum ProxyOption { AFTER("after"), - FIRST("first"); + FIRST("first"), + + VSHARD_ROUTER("vshard_router"); private final String name; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceDeleteOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceDeleteOptionsIT.java index c8f51faf..925d2643 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceDeleteOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceDeleteOptionsIT.java @@ -9,6 +9,7 @@ import io.tarantool.driver.api.space.options.ProxyDeleteOptions; import io.tarantool.driver.api.space.options.ProxyInsertOptions; import io.tarantool.driver.api.space.options.DeleteOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; @@ -161,4 +162,25 @@ public void withFieldsTest() throws ExecutionException, InterruptedException { assertEquals(1, tuple.getInteger(0)); assertEquals("FIO", tuple.getString(1)); } + + @Test + public void withVshardRouterTest() { + TarantoolSpaceOperations> profileSpace = + client.space(TEST_SPACE_NAME); + + TarantoolTuple tarantoolTuple = tupleFactory.create(1, null, "FIO", 50, 100); + profileSpace.insert(tarantoolTuple).join(); + + Conditions conditions = Conditions.equals(PK_FIELD_NAME, 1); + final String groupName = "default"; + DeleteOptions options = ProxyDeleteOptions.create().withVshardRouter(groupName); + + TarantoolResult deleteResult = profileSpace.delete(conditions, options).join(); + TarantoolResult selectResultAfterDelete = profileSpace.select(Conditions.any()).join(); + List crudDeleteOpts = client.eval("return crud_delete_opts").join(); + + assertEquals(groupName, ((HashMap) crudDeleteOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + assertEquals(1, deleteResult.size()); + assertEquals(0, selectResultAfterDelete.size()); + } } diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java index ccb4ed1a..fbcf21ea 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java @@ -6,6 +6,7 @@ import io.tarantool.driver.api.conditions.Conditions; import io.tarantool.driver.api.space.TarantoolSpaceOperations; import io.tarantool.driver.api.space.options.InsertManyOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.space.options.crud.enums.RollbackOnError; import io.tarantool.driver.api.space.options.crud.enums.StopOnError; import io.tarantool.driver.api.space.options.ProxyInsertManyOptions; @@ -188,4 +189,23 @@ public void withFieldsTest() throws ExecutionException, InterruptedException { assertEquals(String.valueOf(i), tuple.getString(1)); } } + + @Test + public void withVshardRouterTest() { + TarantoolSpaceOperations> profileSpace = + client.space(TEST_SPACE_NAME); + + List tarantoolTuples = Arrays.asList( + tupleFactory.create(0, null, "0", 0, 0), + tupleFactory.create(1, null, "1", 1, 1)); + + final String groupName = "default"; + InsertManyOptions options = ProxyInsertManyOptions.create() + .withVshardRouter(groupName); + + TarantoolResult insertManyResult = profileSpace.insertMany(tarantoolTuples, options).join(); + List crudInsertManyOpts = client.eval("return crud_insert_many_opts").join(); + assertEquals(2, insertManyResult.size()); + assertEquals(groupName, ((HashMap) crudInsertManyOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + } } diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertOptionsIT.java index 9e3389ad..ae7a5df5 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertOptionsIT.java @@ -9,6 +9,7 @@ import io.tarantool.driver.api.space.options.SelectOptions; import io.tarantool.driver.api.space.options.ProxyInsertOptions; import io.tarantool.driver.api.space.options.ProxySelectOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; @@ -267,4 +268,21 @@ public void withFieldsTest() throws ExecutionException, InterruptedException { assertEquals(1, tuple.getInteger(0)); assertEquals("FIO", tuple.getString(1)); } + + @Test + public void withVshardRouterTest() { + TarantoolSpaceOperations> profileSpace = + client.space(TEST_SPACE_NAME); + + TarantoolTuple tarantoolTuple = tupleFactory.create(1, null, "FIO", 50, 100); + + final String groupName = "default"; + InsertOptions options = ProxyInsertOptions.create().withVshardRouter(groupName); + + TarantoolResult insertResult = profileSpace.insert(tarantoolTuple, options).join(); + List crudInsertOpts = client.eval("return crud_insert_opts").join(); + + assertEquals(1, insertResult.size()); + assertEquals(groupName, ((HashMap) crudInsertOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + } } diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java index 6a93323c..626052a6 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java @@ -5,6 +5,7 @@ import io.tarantool.driver.api.TarantoolResult; import io.tarantool.driver.api.space.TarantoolSpaceOperations; import io.tarantool.driver.api.space.options.ReplaceManyOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.space.options.crud.enums.RollbackOnError; import io.tarantool.driver.api.space.options.crud.enums.StopOnError; import io.tarantool.driver.api.space.options.ProxyReplaceManyOptions; @@ -171,4 +172,24 @@ public void withFieldsTest() throws ExecutionException, InterruptedException { assertEquals(String.valueOf(i), tuple.getString(1)); } } + + @Test + public void withVsharRouterTest() { + TarantoolSpaceOperations> profileSpace = + client.space(TEST_SPACE_NAME); + + List tarantoolTuples = Arrays.asList( + tupleFactory.create(0, null, "0", 0, 0), + tupleFactory.create(1, null, "1", 1, 1)); + + final String groupName = "default"; + ReplaceManyOptions options = ProxyReplaceManyOptions.create() + .withVshardRouter(groupName); + + TarantoolResult replaceResult = profileSpace.replaceMany(tarantoolTuples, options).join(); + List crudReplaceManyOpts = client.eval("return crud_replace_many_opts").join(); + + assertEquals(groupName, ((HashMap) crudReplaceManyOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + assertEquals(2, replaceResult.size()); + } } diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceOptionsIT.java index 5d8a5c78..10c9ec1d 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceOptionsIT.java @@ -8,6 +8,7 @@ import io.tarantool.driver.api.space.options.ReplaceOptions; import io.tarantool.driver.api.space.options.ProxyDeleteOptions; import io.tarantool.driver.api.space.options.ProxyReplaceOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; @@ -167,4 +168,21 @@ public void withFieldsTest() throws ExecutionException, InterruptedException { assertEquals(1, tuple.getInteger(0)); assertEquals("FIO", tuple.getString(1)); } + + @Test + public void withVsharRouterTest() { + TarantoolSpaceOperations> profileSpace = + client.space(TEST_SPACE_NAME); + + TarantoolTuple tarantoolTuple = tupleFactory.create(1, null, "FIO", 50, 100); + + final String groupName = "default"; + ReplaceOptions options = ProxyReplaceOptions.create().withVshardRouter(groupName); + + TarantoolResult replaceResult = profileSpace.replace(tarantoolTuple, options).join(); + List crudReplaceOpts = client.eval("return crud_replace_opts").join(); + + assertEquals(1, replaceResult.size()); + assertEquals(groupName, ((HashMap) crudReplaceOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + } } diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java index 8c023dd7..a433410f 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java @@ -8,6 +8,7 @@ import io.tarantool.driver.api.space.options.SelectOptions; import io.tarantool.driver.api.space.TarantoolSpaceOperations; import io.tarantool.driver.api.space.options.ProxySelectOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; @@ -174,4 +175,19 @@ public void withModeTest() throws ExecutionException, InterruptedException { crudSelectOpts = client.eval("return crud_select_opts").get(); assertEquals(Mode.WRITE.value(), ((HashMap) crudSelectOpts.get(0)).get("mode")); } + + @Test + public void withVshardRouterTest() { + TarantoolSpaceOperations> operations = + client.space(TEST_SPACE_NAME); + + operations.select(Conditions.any()).join(); + List crudSelectOpts = client.eval("return crud_select_opts").join(); + assertNull(((HashMap) crudSelectOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + + final String routerName = "default"; + operations.select(Conditions.any(), ProxySelectOptions.create().withVshardRouter(routerName)).join(); + crudSelectOpts = client.eval("return crud_select_opts").join(); + assertEquals(routerName, ((HashMap) crudSelectOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + } } diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpdateOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpdateOptionsIT.java index c528ab3b..7bb519fd 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpdateOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpdateOptionsIT.java @@ -7,6 +7,7 @@ import io.tarantool.driver.api.space.TarantoolSpaceOperations; import io.tarantool.driver.api.space.options.UpdateOptions; import io.tarantool.driver.api.space.options.ProxyUpdateOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; @@ -158,4 +159,25 @@ public void withFieldsTest() throws ExecutionException, InterruptedException { assertEquals(1, tuple.getInteger(0)); assertEquals("FIO", tuple.getString(1)); } + + @Test + public void withVshardRouterTest() { + TarantoolSpaceOperations> profileSpace = + client.space(TEST_SPACE_NAME); + + TarantoolTuple tarantoolTuple = tupleFactory.create(1, null, "FIO", 50, 100); + Conditions conditions = Conditions.equals(PK_FIELD_NAME, 1); + + final String groupName = "default"; + UpdateOptions options = ProxyUpdateOptions.create().withVshardRouter(groupName); + + TarantoolTuple insertTuple = profileSpace.insert(tarantoolTuple).join().get(0); + TarantoolResult updateResult = profileSpace.update(conditions, insertTuple, options).join(); + + List crudUpdateOpts = client.eval("return crud_update_opts").join(); + + assertEquals(1, updateResult.size()); + assertEquals(groupName, ((HashMap) crudUpdateOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + } } + diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpsertOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpsertOptionsIT.java index 91b47c93..882daa1a 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpsertOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpsertOptionsIT.java @@ -6,6 +6,8 @@ import io.tarantool.driver.api.conditions.Conditions; import io.tarantool.driver.api.space.TarantoolSpaceOperations; import io.tarantool.driver.api.space.options.ProxyUpsertOptions; +import io.tarantool.driver.api.space.options.UpsertOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; @@ -127,4 +129,21 @@ public void withBucketIdTest() throws ExecutionException, InterruptedException { crudUpsertOpts = client.eval("return crud_upsert_opts").get(); assertEquals(bucketId, ((HashMap) crudUpsertOpts.get(0)).get("bucket_id")); } + + @Test + public void withVshardRouterTest() { + TarantoolSpaceOperations> profileSpace = + client.space(TEST_SPACE_NAME); + + TarantoolTuple tarantoolTuple = tupleFactory.create(1, null, "FIO", 50, 100); + Conditions conditions = Conditions.equals(PK_FIELD_NAME, 1); + + final String groupName = "default"; + UpsertOptions options = ProxyUpsertOptions.create().withVshardRouter(groupName); + + profileSpace.upsert(conditions, tarantoolTuple, TupleOperations.set("age", 50), options).join(); + List crudUpsertOpts = client.eval("return crud_upsert_opts").join(); + + assertEquals(groupName, ((HashMap) crudUpsertOpts.get(0)).get(ProxyOption.VSHARD_ROUTER.toString())); + } }