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 Details

  • Method Details

    • push

      public void push(ReadChangeStreamResponse response)
      Description copied from interface: com.google.cloud.bigtable.gaxx.reframing.Reframer
      Refill internal buffers with inner/upstream response. Should only be invoked if Reframer.hasFullFrame() returns false.
      Specified by:
      push in interface com.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
    • hasFullFrame

      public boolean hasFullFrame()
      Description copied from interface: com.google.cloud.bigtable.gaxx.reframing.Reframer
      Checks if there is a frame to be popped.

      Note that this method might update internal to buffer the next response.

      Specified by:
      hasFullFrame in interface com.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
    • hasPartialFrame

      public boolean hasPartialFrame()
      Description copied from interface: com.google.cloud.bigtable.gaxx.reframing.Reframer
      Checks if there is any incomplete data. Used to check if the stream closed prematurely.
      Specified by:
      hasPartialFrame in interface com.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>
    • pop

      public ChangeStreamRecordT pop()
      Description copied from interface: com.google.cloud.bigtable.gaxx.reframing.Reframer
      Returns and removes the current completed frame. Should only be called if hasFullFrame returns true.
      Specified by:
      pop in interface com.google.cloud.bigtable.gaxx.reframing.Reframer<ChangeStreamRecordT,ReadChangeStreamResponse>