Skip to content

Commit d0ab43b

Browse files
committed
Add support for "yield_every" option
Closes #458
1 parent 14e051a commit d0ab43b

File tree

4 files changed

+54
-2
lines changed

4 files changed

+54
-2
lines changed

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
@@ -5,6 +5,7 @@
55
import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions;
66
import io.tarantool.driver.api.space.options.crud.OperationWithModeOptions;
77
import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions;
8+
import io.tarantool.driver.api.space.options.crud.OperationWithYieldEveryOptions;
89

910
/**
1011
* Marker interface for space select operation options
@@ -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>, OperationWithYieldEveryOptions<T> {
2021
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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+
public interface OperationWithYieldEveryOptions<T extends OperationWithYieldEveryOptions<T>>
10+
extends Options, Self<T> {
11+
12+
/**
13+
* Sets number of tuples processed on storage to yield after, "yield_every" should be > 0.
14+
* @param yieldEvery number of tuples processed on storage to yield after, "yield_every" should be > 0.
15+
* @return this option instance.
16+
* @throws IllegalArgumentException if yieldEvery < 0.
17+
*/
18+
default T withYieldEvery(int yieldEvery) throws IllegalArgumentException {
19+
if (yieldEvery <= 0) {
20+
throw new IllegalArgumentException("Parameter \"yield_every\" must be greater than 0");
21+
}
22+
addOption(ProxyOption.YIELD_EVERY, yieldEvery);
23+
return self();
24+
}
25+
26+
/**
27+
* @return "yield_every" parameter value.
28+
*/
29+
default Optional<Integer> getYieldEvery() {
30+
return getOption(ProxyOption.BUCKET_ID, Integer.class);
31+
}
32+
}

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+
YIELD_EVERY("yield_every");
2729

2830
private final String name;
2931

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

Lines changed: 17 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;
@@ -174,4 +175,20 @@ public void withModeTest() throws ExecutionException, InterruptedException {
174175
crudSelectOpts = client.eval("return crud_select_opts").get();
175176
assertEquals(Mode.WRITE.value(), ((HashMap<?, ?>) crudSelectOpts.get(0)).get("mode"));
176177
}
178+
179+
@Test
180+
public void withYieldEveryTest() {
181+
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> profileSpace =
182+
client.space(TEST_SPACE_NAME);
183+
184+
profileSpace.select(Conditions.any()).join();
185+
List<?> crudSelectOpts = client.eval("return crud_select_opts").join();
186+
assertNull(((HashMap<?, ?>) crudSelectOpts.get(0)).get(ProxyOption.YIELD_EVERY.toString()));
187+
188+
final int yieldEvery = 2_000;
189+
profileSpace.select(Conditions.any(), ProxySelectOptions.create().withYieldEvery(yieldEvery)).join();
190+
crudSelectOpts = client.eval("return crud_select_opts").join();
191+
assertEquals(yieldEvery,
192+
((HashMap<?, ?>) crudSelectOpts.get(0)).get(ProxyOption.YIELD_EVERY.toString()));
193+
}
177194
}

0 commit comments

Comments
 (0)