Class ChangeStreamRecordMerger<ChangeStreamRecordT>
java.lang.Object
com.google.cloud.bigtable.data.v2.stub.changestream.ChangeStreamRecordMerger<ChangeStreamRecordT>
- All Implemented Interfaces:
com.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
@InternalApi
public class ChangeStreamRecordMerger<ChangeStreamRecordT>
extends Object
implements com.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
An implementation of a
Reframer that feeds the change stream record merging ChangeStreamStateMachine.
ReframingResponseObserver pushes ReadChangeStreamResponses into this class and
pops a change stream record containing one of the following: 1) Heartbeat. 2) CloseStream. 3)
ChangeStreamMutation(a representation of a fully merged logical mutation).
Example usage:
ChangeStreamRecordMerger<ChangeStreamRecord> changeStreamRecordMerger =
new ChangeStreamRecordMerger<>(myChangeStreamRecordAdaptor);
while(responseIterator.hasNext()) {
ReadChangeStreamResponse response = responseIterator.next();
if (changeStreamRecordMerger.hasFullFrame()) {
ChangeStreamRecord changeStreamRecord = changeStreamRecordMerger.pop();
// Do something with change stream record.
} else {
changeStreamRecordMerger.push(response);
}
}
if (changeStreamRecordMerger.hasPartialFrame()) {
throw new RuntimeException("Incomplete stream");
}
This class is considered an internal implementation detail and not meant to be used by applications.
Package-private for internal use.
- See Also:
-
for more details
-
Constructor Summary
ConstructorsConstructorDescriptionChangeStreamRecordMerger(ChangeStreamRecordAdapter.ChangeStreamRecordBuilder<ChangeStreamRecordT> changeStreamRecordBuilder) -
Method Summary
Modifier and TypeMethodDescriptionbooleanChecks if there is a frame to be popped.booleanChecks if there is any incomplete data.pop()Returns and removes the current completed frame.voidpush(ReadChangeStreamResponse response) Refill internal buffers with inner/upstream response.
-
Constructor Details
-
ChangeStreamRecordMerger
public ChangeStreamRecordMerger(ChangeStreamRecordAdapter.ChangeStreamRecordBuilder<ChangeStreamRecordT> changeStreamRecordBuilder)
-
-
Method Details
-
push
Description copied from interface:com.google.cloud.bigtable.gaxx.reframing.ReframerRefill internal buffers with inner/upstream response. Should only be invoked ifReframer.hasFullFrame()returns false.- Specified by:
pushin interfacecom.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
-
hasFullFrame
public boolean hasFullFrame()Description copied from interface:com.google.cloud.bigtable.gaxx.reframing.ReframerChecks if there is a frame to be popped.Note that this method might update internal to buffer the next response.
- Specified by:
hasFullFramein interfacecom.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
-
hasPartialFrame
public boolean hasPartialFrame()Description copied from interface:com.google.cloud.bigtable.gaxx.reframing.ReframerChecks if there is any incomplete data. Used to check if the stream closed prematurely.- Specified by:
hasPartialFramein interfacecom.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
-
pop
Description copied from interface:com.google.cloud.bigtable.gaxx.reframing.ReframerReturns and removes the current completed frame. Should only be called if hasFullFrame returns true.- Specified by:
popin interfacecom.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
-