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 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) booleanisEmpty()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 -
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
-
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
-