Skip to content

Commit 7eac932

Browse files
committed
Add support for "balance" option
Closes #462
1 parent 14e051a commit 7eac932

4 files changed

Lines changed: 56 additions & 2 deletions

File tree

src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.tarantool.driver.api.space.options;
22

3+
import io.tarantool.driver.api.space.options.crud.OperationWithBalanceOptions;
34
import io.tarantool.driver.api.space.options.crud.OperationWithBatchSizeOptions;
45
import io.tarantool.driver.api.space.options.crud.OperationWithBucketIdOptions;
56
import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions;
@@ -16,5 +17,5 @@
1617
*/
1718
public interface SelectOptions<T extends SelectOptions<T>>
1819
extends OperationWithBucketIdOptions<T>, OperationWithTimeoutOptions<T>, OperationWithFieldsOptions<T>,
19-
OperationWithModeOptions<T>, OperationWithBatchSizeOptions<T> {
20+
OperationWithModeOptions<T>, OperationWithBatchSizeOptions<T>, OperationWithBalanceOptions<T> {
2021
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.tarantool.driver.api.space.options.crud;
2+
3+
import java.util.Optional;
4+
5+
import io.tarantool.driver.api.space.options.Options;
6+
import io.tarantool.driver.api.space.options.Self;
7+
import io.tarantool.driver.api.space.options.crud.enums.ProxyOption;
8+
9+
/**
10+
* Base interface for all operation options that may have a configurable "balance" option.
11+
*
12+
* @author Belonogov Nikolay
13+
*/
14+
public interface OperationWithBalanceOptions<T extends OperationWithBalanceOptions<T>> extends Options, Self<T> {
15+
16+
/**
17+
* Sets "balance" option value to true. If true then use replica according to vshard load balancing policy. Default
18+
* value is false.
19+
*
20+
* @return this options instance.
21+
*/
22+
default T balance() {
23+
addOption(ProxyOption.BALANCE, true);
24+
return self();
25+
}
26+
27+
/**
28+
* @return "balance" option value.
29+
*/
30+
default Optional<Boolean> getBalance() {
31+
return getOption(ProxyOption.BALANCE, Boolean.class);
32+
}
33+
}

src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ public enum ProxyOption {
2323

2424
AFTER("after"),
2525

26-
FIRST("first");
26+
FIRST("first"),
27+
28+
BALANCE("balance");
2729

2830
private final String name;
2931

src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.tarantool.driver.api.space.options.SelectOptions;
99
import io.tarantool.driver.api.space.TarantoolSpaceOperations;
1010
import io.tarantool.driver.api.space.options.ProxySelectOptions;
11+
import io.tarantool.driver.api.space.options.crud.enums.ProxyOption;
1112
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
1213
import io.tarantool.driver.api.tuple.TarantoolTuple;
1314
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
@@ -28,6 +29,7 @@
2829
import static org.junit.jupiter.api.Assertions.assertEquals;
2930
import static org.junit.jupiter.api.Assertions.assertNotNull;
3031
import static org.junit.jupiter.api.Assertions.assertNull;
32+
import static org.junit.jupiter.api.Assertions.assertTrue;
3133

3234
/**
3335
* @author Artyom Dubinin
@@ -174,4 +176,20 @@ public void withModeTest() throws ExecutionException, InterruptedException {
174176
crudSelectOpts = client.eval("return crud_select_opts").get();
175177
assertEquals(Mode.WRITE.value(), ((HashMap<?, ?>) crudSelectOpts.get(0)).get("mode"));
176178
}
179+
180+
@Test
181+
public void withBalanceTest() {
182+
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> operations =
183+
client.space(TEST_SPACE_NAME);
184+
185+
SelectOptions<ProxySelectOptions> options = ProxySelectOptions.create().balance();
186+
187+
assertTrue(options.getBalance().isPresent());
188+
assertTrue(options.getBalance().get());
189+
190+
operations.select(Conditions.any(), options).join();
191+
List<?> crudSelectOpts = client.eval("return crud_select_opts").join();
192+
193+
assertEquals(true, ((HashMap<?, ?>) crudSelectOpts.get(0)).get(ProxyOption.BALANCE.toString()));
194+
}
177195
}

0 commit comments

Comments
 (0)