code: @VisibleForTesting
    protected long getLowWatermark(ExtractType extractType, WatermarkType watermarkType, long previousWatermark,
        int deltaForNextWatermark) {
      long lowWatermark = ConfigurationKeys.DEFAULT_WATERMARK_VALUE;
  
      if (this.isFullDump() || this.isWatermarkOverride()) {
        String timeZone =
            this.state.getProp(ConfigurationKeys.SOURCE_TIMEZONE, ConfigurationKeys.DEFAULT_SOURCE_TIMEZONE);
        /*
         * SOURCE_QUERYBASED_START_VALUE could be:
         *  - a simple string, e.g. "12345"
         *  - a timestamp string, e.g. "20140101000000"
         *  - a string with a time directive, e.g. "CURRENTDAY-X", "CURRENTHOUR-X", (X is a number)
         */
        lowWatermark =
            Utils.getLongWithCurrentDate(this.state.getProp(ConfigurationKeys.SOURCE_QUERYBASED_START_VALUE), timeZone);
        LOG.info("Overriding low water mark with the given start value: " + lowWatermark);
      } else {
        if (isSnapshot(extractType)) {
          lowWatermark = this.getSnapshotLowWatermark(watermarkType, previousWatermark, deltaForNextWatermark);
        } else {
          lowWatermark = this.getAppendLowWatermark(watermarkType, previousWatermark, deltaForNextWatermark);
        }
      }
      return (lowWatermark == 0 ? ConfigurationKeys.DEFAULT_WATERMARK_VALUE : lowWatermark);
    }
docs: Get low water mark:
  (1) Use {@link ConfigurationKeys#SOURCE_QUERYBASED_START_VALUE} iff it is a full dump (or watermark override is enabled)
  (2) Otherwise use previous watermark (fallback to {@link ConfigurationKeys#SOURCE_QUERYBASED_START_VALUE} iff previous watermark is unavailable)
  
  @param extractType Extract type
  @param watermarkType Watermark type
  @param previousWatermark Previous water mark
  @param deltaForNextWatermark delta number for next water mark
  @return low water mark in {@link Partitioner#WATERMARKTIMEFORMAT}