private void retryOperation(final AsyncBlock asyncBlock, final SingleResultCallback<List<RawBsonDocument>> callback) { if (resumeToken != null) { changeStreamOperation.startOperationTimeForResume(null); changeStreamOperation.resumeAfter(resumeToken); } changeStreamOperation.executeAsync(binding, new SingleResultCallback<AsyncBatchCursor<T>>() { @Override public void onResult(final AsyncBatchCursor<T> result, final Throwable t) { if (t != null) { callback.onResult(null, t); } else { wrapped = ((AsyncChangeStreamBatchCursor<T>) result).getWrapped(); binding.release(); // release the new change stream batch cursor's reference to the binding resumeableOperation(asyncBlock, callback); } } }); }
private <S> ReadOperation<BatchCursor<S>> createChangeStreamOperation(final Codec<S> codec) { return new ChangeStreamOperation<S>(namespace, fullDocument, createBsonDocumentList(pipeline), codec, changeStreamLevel) .batchSize(getBatchSize()) .collation(collation) .maxAwaitTime(maxAwaitTimeMS, MILLISECONDS) .resumeAfter(resumeToken) .startAtOperationTime(startAtOperationTime); }
<R> R resumeableOperation(final Function<BatchCursor<RawBsonDocument>, R> function) { while (true) { try { return function.apply(wrapped); } catch (Throwable t) { if (!isRetryableError(t)) { throw MongoException.fromThrowableNonNull(t); } } wrapped.close(); if (resumeToken != null) { changeStreamOperation.startOperationTimeForResume(null); changeStreamOperation.resumeAfter(resumeToken); } wrapped = ((ChangeStreamBatchCursor<T>) changeStreamOperation.execute(binding)).getWrapped(); binding.release(); // release the new change stream batch cursor's reference to the binding } } }
private void retryOperation(final AsyncBlock asyncBlock, final SingleResultCallback<List<RawBsonDocument>> callback) { if (resumeToken != null) { changeStreamOperation.startOperationTimeForResume(null); changeStreamOperation.resumeAfter(resumeToken); } changeStreamOperation.executeAsync(binding, new SingleResultCallback<AsyncBatchCursor<T>>() { @Override public void onResult(final AsyncBatchCursor<T> result, final Throwable t) { if (t != null) { callback.onResult(null, t); } else { wrapped = ((AsyncChangeStreamBatchCursor<T>) result).getWrapped(); binding.release(); // release the new change stream batch cursor's reference to the binding resumeableOperation(asyncBlock, callback); } } }); }
private <S> ReadOperation<BatchCursor<S>> createChangeStreamOperation(final Codec<S> codec) { return new ChangeStreamOperation<S>(namespace, fullDocument, createBsonDocumentList(pipeline), codec, changeStreamLevel) .batchSize(getBatchSize()) .collation(collation) .maxAwaitTime(maxAwaitTimeMS, MILLISECONDS) .resumeAfter(resumeToken) .startAtOperationTime(startAtOperationTime); }
private <S> ReadOperation<BatchCursor<S>> createChangeStreamOperation(final Codec<S> codec) { return new ChangeStreamOperation<S>(namespace, fullDocument, createBsonDocumentList(pipeline), codec, changeStreamLevel) .batchSize(getBatchSize()) .collation(collation) .maxAwaitTime(maxAwaitTimeMS, MILLISECONDS) .resumeAfter(resumeToken) .startAtOperationTime(startAtOperationTime); }
<R> R resumeableOperation(final Function<BatchCursor<RawBsonDocument>, R> function) { while (true) { try { return function.apply(wrapped); } catch (Throwable t) { if (!isRetryableError(t)) { throw MongoException.fromThrowableNonNull(t); } } wrapped.close(); if (resumeToken != null) { changeStreamOperation.startOperationTimeForResume(null); changeStreamOperation.resumeAfter(resumeToken); } wrapped = ((ChangeStreamBatchCursor<T>) changeStreamOperation.execute(binding)).getWrapped(); binding.release(); // release the new change stream batch cursor's reference to the binding } } }