void poll(RequestRegistrationCallback<PutOperation> requestRegistrationCallback) {
    if (operationCompleted) {
      return;
    }
    metadataPutChunk.poll(requestRegistrationCallback);
    if (metadataPutChunk.isComplete()) {
      if (getNumDataChunks() > 1) {
        onChunkOperationComplete(metadataPutChunk);
      }
    } else if (!metadataPutChunk.isReady()) {
      for (PutChunk chunk : putChunks) {
        if (chunk.isReady()) {
          chunk.poll(requestRegistrationCallback);
          if (chunk.isComplete()) {
            onChunkOperationComplete(chunk);
            // After each chunk is processed, check whether the operation itself has completed
            if (operationCompleted) {
              return;
            }
          }
        }
      }
    }
  }
For this operation, create and populate put requests for chunks (in the form of {@link RequestInfo}) to
send out.
@param requestRegistrationCallback the {@link RequestRegistrationCallback} to call for every request that gets
                                   created as part of this poll operation.
ambry-router/src/main/java/com/github/ambry/router/PutOperation.java