Class BufferingChangeStreamCursor.EventFetcher<TResult>
java.lang.Object
io.debezium.connector.mongodb.events.BufferingChangeStreamCursor.EventFetcher<TResult>
- Type Parameters:
TResult-
- All Implemented Interfaces:
Closeable,AutoCloseable,Runnable
- Enclosing class:
- BufferingChangeStreamCursor<TResult>
public static final class BufferingChangeStreamCursor.EventFetcher<TResult>
extends Object
implements Runnable, Closeable
Runnable responsible for fetching events from
ChangeStreamIterable and buffering them in provided queue;
This utilises standard cursors returned by ChangeStreamIterable.cursor()
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Semaphoreprivate final Clockprivate final AtomicReference<com.mongodb.client.MongoChangeStreamCursor<com.mongodb.client.model.changestream.ChangeStreamDocument<TResult>>>private final AtomicReference<Throwable>private final MongoDbStreamingChangeEventSourceMetricsprivate intprivate final Queue<BufferingChangeStreamCursor.ResumableChangeStreamEvent<TResult>>static final longprivate final AtomicBooleanprivate final com.mongodb.client.ChangeStreamIterable<TResult>private final DelayStrategy -
Constructor Summary
ConstructorsConstructorDescriptionEventFetcher(com.mongodb.client.ChangeStreamIterable<TResult> stream, int capacity, MongoDbStreamingChangeEventSourceMetrics metrics, Clock clock, DelayStrategy throttler) EventFetcher(com.mongodb.client.ChangeStreamIterable<TResult> stream, int capacity, MongoDbStreamingChangeEventSourceMetrics metrics, Clock clock, Duration throttleMaxSleep) -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()private booleanfetchEvent(com.mongodb.client.MongoChangeStreamCursor<com.mongodb.client.model.changestream.ChangeStreamDocument<TResult>> cursor) private voidfetchEvents(com.mongodb.client.MongoChangeStreamCursor<com.mongodb.client.model.changestream.ChangeStreamDocument<TResult>> cursor) getError()Returns error that occurred during event fetchingbooleanhasError()Indicates whether an error occurred during event fetchingbooleanisEmpty()booleanIndicates whether event fetching is running and the internal cursor is openpoll()voidrun()intsize()Depending on queue implementation this method may not be reliable By default seeConcurrentLinkedQueue.size()private voidthrottleIfNeeded(com.mongodb.client.model.changestream.ChangeStreamDocument<TResult> document)
-
Field Details
-
QUEUE_OFFER_TIMEOUT_MS
public static final long QUEUE_OFFER_TIMEOUT_MS- See Also:
-
stream
-
capacity
-
queue
-
throttler
-
running
-
cursorRef
private final AtomicReference<com.mongodb.client.MongoChangeStreamCursor<com.mongodb.client.model.changestream.ChangeStreamDocument<TResult>>> cursorRef -
error
-
metrics
-
clock
-
noMessageIterations
private int noMessageIterations
-
-
Constructor Details
-
EventFetcher
public EventFetcher(com.mongodb.client.ChangeStreamIterable<TResult> stream, int capacity, MongoDbStreamingChangeEventSourceMetrics metrics, Clock clock, DelayStrategy throttler) -
EventFetcher
public EventFetcher(com.mongodb.client.ChangeStreamIterable<TResult> stream, int capacity, MongoDbStreamingChangeEventSourceMetrics metrics, Clock clock, Duration throttleMaxSleep)
-
-
Method Details
-
isRunning
public boolean isRunning()Indicates whether event fetching is running and the internal cursor is open- Returns:
- true if running, false otherwise
-
hasError
public boolean hasError()Indicates whether an error occurred during event fetching- Returns:
- true if error occurred, false otherwise
-
getError
Returns error that occurred during event fetching- Returns:
- error or null if no error occurred
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable
-
poll
-
isEmpty
public boolean isEmpty() -
size
public int size()Depending on queue implementation this method may not be reliable By default seeConcurrentLinkedQueue.size()- Returns:
- approximate number of elements in queue
-
run
public void run() -
fetchEvents
private void fetchEvents(com.mongodb.client.MongoChangeStreamCursor<com.mongodb.client.model.changestream.ChangeStreamDocument<TResult>> cursor) throws InterruptedException - Throws:
InterruptedException
-
fetchEvent
private Optional<BufferingChangeStreamCursor.ResumableChangeStreamEvent<TResult>> fetchEvent(com.mongodb.client.MongoChangeStreamCursor<com.mongodb.client.model.changestream.ChangeStreamDocument<TResult>> cursor) -
throttleIfNeeded
private void throttleIfNeeded(com.mongodb.client.model.changestream.ChangeStreamDocument<TResult> document) -
enqueue
private boolean enqueue(BufferingChangeStreamCursor.ResumableChangeStreamEvent<TResult> event) throws InterruptedException - Throws:
InterruptedException
-