Class FallbackPageToken

java.lang.Object
tech.ydb.yoj.repository.db.list.token.FallbackPageToken
All Implemented Interfaces:
PageToken

public class FallbackPageToken extends Object implements PageToken
Page token which eases migration from one token implementation (fallback) to another (primary). It attempts to decode page token first using primary implementation, and, failing that, using the fallback; and can encode listing results using either fallback or primary, depending on the value of encodeAsPrimary flag.

Changing old token implementation oldImpl to new implementation newImpl should go as follows:

  1. Deploy the app using FallbackPageToken(primary=newImpl, fallback=oldImpl, encodeAsPrimary=false) so that all app instances encode listing results using the least common denominator, oldImpl.
  2. Deploy the app using FallbackPageToken(primary=newImpl, fallback=oldImpl, encodeAsPrimary=true). Old tokens can still be decoded, but all app instances will encode their listing results using newImpl.
  3. Deploy new application version using newImpl only, because no app instances use oldImpl to encode listing results any more.
  • Constructor Details

    • FallbackPageToken

      public FallbackPageToken()
  • Method Details

    • encode

      @Nullable public <T, R> String encode(@NonNull @NonNull GenericListResult<T,R> result)
      Description copied from interface: PageToken
      Encodes information about next search result page.
      Specified by:
      encode in interface PageToken
      Type Parameters:
      T - search request type
      R - search result type
      Parameters:
      result - current search result page
      Returns:
      next page token or null if this is the last page of results
    • decode

      @NonNull public <T> ListRequest.Builder<T> decode(@NonNull ListRequest.Builder<T> bldr, @NonNull @NonNull String token) throws BadListingException.InvalidPageToken
      Description copied from interface: PageToken
      Decodes page token into listing request.
      This method must be called only once per page, because it changes the listing request builder's state and is therefore non-idempotent.
      Specified by:
      decode in interface PageToken
      Type Parameters:
      T - search request type
      Parameters:
      bldr - listing request builder
      token - page token
      Returns:
      listing request builder for to the page encoded by the token
      Throws:
      BadListingException.InvalidPageToken - page token is invalid