Class 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
    • Method Detail

      • 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>