@Override
  public CompletableFuture<String> queryChangeFeedAsync(String requestContinuationToken, int maxFeedSize,
      List<CloudBlobMetadata> changeFeed, String partitionPath, Timer timer) {
    if (requestContinuationToken.equals("")) {
      requestContinuationToken = "0";
    }
    // there are no changes since last continuation token or there is no change feed at all, then return
    if ((requestContinuationToken != null && Integer.parseInt(requestContinuationToken) == continuationTokenCounter + 1)
        || continuationTokenCounter == -1) {
      return CompletableFuture.completedFuture(requestContinuationToken);
    }
    // check if its an invalid continuation token
    if (requestContinuationToken != null && !continuationTokenToBlobIdMap.containsKey(requestContinuationToken)) {
      return FutureUtils.completedExceptionally(new IllegalArgumentException("Invalid continuation token"));
    }

    if (requestContinuationToken == null) {
      requestContinuationToken = "0";
    }

    // iterate through change feed till it ends or maxLimit or maxTotalSizeofEntries is reached
    String continuationTokenCtr = requestContinuationToken;
    while (continuationTokenToBlobIdMap.containsKey(continuationTokenCtr) && changeFeed.size() < maxFeedSize) {
      if (continuationTokenToBlobIdMap.get(continuationTokenCtr) != null) {
        changeFeed.add(blobIdToMetadataMap.get(continuationTokenToBlobIdMap.get(continuationTokenCtr)));
      }
      continuationTokenCtr = Integer.toString(Integer.parseInt(continuationTokenCtr) + 1);
    }
    return CompletableFuture.completedFuture(continuationTokenCtr);
  }
Add a blobid to the change feed.
@param cloudBlobMetadata {@link CloudBlobMetadata} to add.
ambry-cloud/src/test/java/com/github/ambry/cloud/azure/MockChangeFeedQuery.java