Skip to content

Commit da53970

Browse files
committed
FIT performers - handle errors on stream in FluxStreamer
A previous fix converts stream errors correctly for IteratorBasedStreamer, but missed FluxStreamer. Change-Id: I9779a487877ad289c06d551c26c740a024da6b53 Reviewed-on: https://review.couchbase.org/c/couchbase-jvm-clients/+/183711 Tested-by: Build Bot <[email protected]> Tested-by: <[email protected]> Reviewed-by: <[email protected]>
1 parent 1a3f728 commit da53970

File tree

4 files changed

+22
-16
lines changed

4 files changed

+22
-16
lines changed

core-fit-performer/src/main/java/com/couchbase/client/performer/core/stream/IteratorBasedStreamer.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,13 @@
1313
public abstract class IteratorBasedStreamer<T> extends Streamer<T> {
1414
protected volatile int demanded = 0;
1515
protected volatile boolean cancelled = false;
16-
protected final Function<Throwable, com.couchbase.client.protocol.shared.Exception> convertException;
1716

1817
public IteratorBasedStreamer(PerRun perRun,
1918
String streamId,
2019
Config streamConfig,
2120
Function<T, Result> convertResult,
2221
Function<Throwable, com.couchbase.client.protocol.shared.Exception> convertException) {
23-
super(perRun, streamId, streamConfig, convertResult);
24-
this.convertException = convertException;
22+
super(perRun, streamId, streamConfig, convertResult, convertException);
2523
}
2624

2725
protected abstract T next();
@@ -30,7 +28,7 @@ public IteratorBasedStreamer(PerRun perRun,
3028

3129
private void enqueueNext() {
3230
T next = next();
33-
Result result = convert.apply(next);
31+
Result result = convertResult.apply(next);
3432
perRun.resultsStream().enqueue(result);
3533
int streamedNow = streamed.incrementAndGet();
3634
logger.info("Streamer {} got and enqueued an item, has sent {}", streamId, streamedNow);

core-fit-performer/src/main/java/com/couchbase/client/performer/core/stream/Streamer.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,20 @@ abstract public class Streamer<T> extends Thread {
1919
protected final PerRun perRun;
2020
protected final String streamId;
2121
protected final Config streamConfig;
22-
protected final Function<T, Result> convert;
22+
protected final Function<T, Result> convertResult;
23+
protected final Function<Throwable, com.couchbase.client.protocol.shared.Exception> convertException;
2324
protected final AtomicInteger streamed = new AtomicInteger(0);
2425

2526
public Streamer(PerRun perRun,
2627
String streamId,
2728
Config streamConfig,
28-
Function<T, Result> convert) {
29+
Function<T, Result> convertResult,
30+
Function<Throwable, com.couchbase.client.protocol.shared.Exception> convertException) {
2931
this.perRun = perRun;
3032
this.streamId = streamId;
3133
this.streamConfig = streamConfig;
32-
this.convert = convert;
34+
this.convertResult = convertResult;
35+
this.convertException = convertException;
3336
}
3437

3538
public String streamId() {

java-fit-performer/src/main/java/com/couchbase/ReactiveJavaSdkCommandExecutor.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,8 @@ private Mono<Result> performOperationReactive(com.couchbase.client.protocol.sdk.
155155
else results = collection.scan(scanType);
156156
result.setElapsedNanos(System.nanoTime() - start);
157157
var streamer = new FluxStreamer<ScanResult>(results, perRun, request.getStreamConfig().getStreamId(), request.getStreamConfig(),
158-
(ScanResult r) -> {
159-
return processScanResult(request, r);
160-
});
158+
(ScanResult r) -> processScanResult(request, r),
159+
(Throwable err) -> convertException(err));
161160
perRun.streamerOwner().addAndStart(streamer);
162161
result.setStream(com.couchbase.client.protocol.streams.Signal.newBuilder()
163162
.setCreated(com.couchbase.client.protocol.streams.Created.newBuilder()
@@ -176,4 +175,4 @@ private Mono<Result> performOperationReactive(com.couchbase.client.protocol.sdk.
176175
protected Exception convertException(Throwable raw) {
177176
return convertExceptionShared(raw);
178177
}
179-
}
178+
}

java-fit-performer/src/main/java/com/couchbase/stream/FluxStreamer.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@ public class FluxStreamer<T> extends Streamer<T> {
2121
private final Flux<T> results;
2222
private final AtomicReference<BaseSubscriber> subscriberRef = new AtomicReference<>();
2323

24-
public FluxStreamer(Flux<T> results, PerRun perRun, String streamId, Config streamConfig, Function<T, Result> convert) {
25-
super(perRun, streamId, streamConfig, convert);
24+
public FluxStreamer(Flux<T> results,
25+
PerRun perRun,
26+
String streamId,
27+
Config streamConfig,
28+
Function<T, Result> convertResult,
29+
Function<Throwable, com.couchbase.client.protocol.shared.Exception> convertException) {
30+
super(perRun, streamId, streamConfig, convertResult, convertException);
2631
this.results = results;
2732
}
2833

@@ -49,7 +54,7 @@ protected void hookOnSubscribe(Subscription subscription) {
4954
protected void hookOnNext(T value) {
5055
logger.info("Flux streamer {} sending one", streamId);
5156

52-
perRun.resultsStream().enqueue(convert.apply(value));
57+
perRun.resultsStream().enqueue(convertResult.apply(value));
5358
streamed.incrementAndGet();
5459
}
5560

@@ -79,8 +84,9 @@ protected void hookOnError(Throwable throwable) {
7984

8085
perRun.resultsStream().enqueue(Result.newBuilder()
8186
.setStream(com.couchbase.client.protocol.streams.Signal.newBuilder()
82-
// todo convert error
83-
.setError(com.couchbase.client.protocol.streams.Error.newBuilder().setStreamId(streamId)))
87+
.setError(com.couchbase.client.protocol.streams.Error.newBuilder()
88+
.setException(convertException.apply(throwable))
89+
.setStreamId(streamId)))
8490
.build());
8591
}
8692

0 commit comments

Comments
 (0)