private ChangeFeedCacheEntry getNextChangeFeed(String partitionId, String startRequestContinuationToken,
      String cacheSessionId) throws CosmosException {
    List<CloudBlobMetadata> changeFeedEntries = new ArrayList<>(defaultCacheSize);
    try {
      String newRequestContinuationToken =
          cosmosDataAccessor.queryChangeFeedAsync(startRequestContinuationToken, defaultCacheSize, changeFeedEntries,
              partitionId, azureMetrics.changeFeedQueryTime).join();
      return new ChangeFeedCacheEntry(startRequestContinuationToken, newRequestContinuationToken, cacheSessionId,
          changeFeedEntries, partitionId);
    } catch (CompletionException e) {
      Exception ex = Utils.extractFutureExceptionCause(e);
      if (ex instanceof CosmosException) {
        throw ((CosmosException) ex);
      }
      throw new RuntimeException("Error getting change feed for partitionId " + partitionId, ex);
    }
  }
Populate change feed cache by querying Cosmos for the next set of change feed entries after the specified request continuation token.
@param partitionId Partition for which the change feed cache needs to be populated.
@param startRequestContinuationToken request continuation token from which the change feed query needs to be made.
@param cacheSessionId cacheSessionId to use in the cache.
@return {@link ChangeFeedCacheEntry} object representing new cache entry.
ambry-cloud/src/main/java/com/github/ambry/cloud/azure/CosmosChangeFeedBasedReplicationFeed.java