Class BufferingChangeStreamCursor<TResult>
java.lang.Object
io.debezium.connector.mongodb.events.BufferingChangeStreamCursor<TResult>
- Type Parameters:
TResult- the type of documents the cursor contains
- All Implemented Interfaces:
com.mongodb.client.MongoChangeStreamCursor<BufferingChangeStreamCursor.ResumableChangeStreamEvent<TResult>>,com.mongodb.client.MongoCursor<BufferingChangeStreamCursor.ResumableChangeStreamEvent<TResult>>,Closeable,AutoCloseable,Iterator<BufferingChangeStreamCursor.ResumableChangeStreamEvent<TResult>>
@NotThreadSafe
public class BufferingChangeStreamCursor<TResult>
extends Object
implements com.mongodb.client.MongoChangeStreamCursor<BufferingChangeStreamCursor.ResumableChangeStreamEvent<TResult>>
An implementation of
MongoChangeStreamCursor which immediately starts consuming available events into a buffer.
Internally this cursor starts a BufferingChangeStreamCursor.EventFetcher as a separate thread on provided executor.
Although the implementation is internally thread safe the cursors is not meant to be accessed concurrently from multiple threads.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classRunnable responsible for fetching events fromChangeStreamIterableand buffering them in provided queue;static final classCombination of change stream event and resume token -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final ExecutorServiceprivate final BufferingChangeStreamCursor.EventFetcher<TResult>private org.bson.BsonDocumentprivate static final org.slf4j.Loggerstatic final intprivate final DelayStrategy -
Constructor Summary
ConstructorsConstructorDescriptionBufferingChangeStreamCursor(BufferingChangeStreamCursor.EventFetcher<TResult> fetcher, ExecutorService executor, DelayStrategy throttler) Creates new prefetching cursorBufferingChangeStreamCursor(BufferingChangeStreamCursor.EventFetcher<TResult> fetcher, ExecutorService executor, Duration throttleMaxSleep) -
Method Summary
Modifier and TypeMethodDescriptionintvoidclose()static <TResult> BufferingChangeStreamCursor<TResult>fromIterable(com.mongodb.client.ChangeStreamIterable<TResult> stream, MongoDbTaskContext taskContext, MongoDbStreamingChangeEventSourceMetrics metrics, Clock clock) org.bson.BsonDocumentcom.mongodb.ServerAddresscom.mongodb.ServerCursorbooleanhasNext()next()Returns next event in buffer.Repeatedly polling fetcher for new event, exponentially waiting between polls until limit is reachedstart()tryNext()Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.mongodb.client.MongoCursor
forEachRemaining
-
Field Details
-
LOGGER
private static final org.slf4j.Logger LOGGER -
THROTTLE_NO_MESSAGE_BEFORE_PAUSE
public static final int THROTTLE_NO_MESSAGE_BEFORE_PAUSE- See Also:
-
fetcher
-
executor
-
throttler
-
lastResumeToken
private org.bson.BsonDocument lastResumeToken
-
-
Constructor Details
-
BufferingChangeStreamCursor
public BufferingChangeStreamCursor(BufferingChangeStreamCursor.EventFetcher<TResult> fetcher, ExecutorService executor, DelayStrategy throttler) Creates new prefetching cursor- Parameters:
fetcher- MongoDB change event fetcherexecutor- executor used to dispatch buffering threadthrottler- throttling mechanism
-
BufferingChangeStreamCursor
public BufferingChangeStreamCursor(BufferingChangeStreamCursor.EventFetcher<TResult> fetcher, ExecutorService executor, Duration throttleMaxSleep)
-
-
Method Details
-
fromIterable
public static <TResult> BufferingChangeStreamCursor<TResult> fromIterable(com.mongodb.client.ChangeStreamIterable<TResult> stream, MongoDbTaskContext taskContext, MongoDbStreamingChangeEventSourceMetrics metrics, Clock clock) -
start
-
tryNext
- Specified by:
tryNextin interfacecom.mongodb.client.MongoCursor<TResult>
-
next
Returns next event in buffer. Not that unlike other Mongo implementation this method does not block- Specified by:
nextin interfaceIterator<TResult>- Specified by:
nextin interfacecom.mongodb.client.MongoCursor<TResult>- Returns:
- event
- Throws:
NoSuchElementException- when no element is available
-
pollWithDelay
Repeatedly polling fetcher for new event, exponentially waiting between polls until limit is reached- Returns:
- event or null if not available within time limit
-
hasNext
public boolean hasNext() -
available
public int available()- Specified by:
availablein interfacecom.mongodb.client.MongoCursor<TResult>
-
getResumeToken
public org.bson.BsonDocument getResumeToken()- Specified by:
getResumeTokenin interfacecom.mongodb.client.MongoChangeStreamCursor<TResult>
-
getServerCursor
public com.mongodb.ServerCursor getServerCursor()- Specified by:
getServerCursorin interfacecom.mongodb.client.MongoCursor<TResult>
-
getServerAddress
public com.mongodb.ServerAddress getServerAddress()- Specified by:
getServerAddressin interfacecom.mongodb.client.MongoCursor<TResult>
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Specified by:
closein interfacecom.mongodb.client.MongoCursor<TResult>
-