code: private void processOperation(CompletableOperation operation) throws Exception {
          Preconditions.checkState(!operation.isDone(), "The Operation has already been processed.");
  
          Operation entry = operation.getOperation();
          synchronized (this.stateLock) {
              // Update Metadata and Operations with any missing data (offsets, lengths, etc) - the Metadata Updater
              // has all the knowledge for that task.
              this.metadataUpdater.preProcessOperation(entry);
  
              // Entry is ready to be serialized; assign a sequence number.
              entry.setSequenceNumber(this.metadataUpdater.nextOperationSequenceNumber());
              this.dataFrameBuilder.append(entry);
              this.metadataUpdater.acceptOperation(entry);
          }
  
          log.trace("{}: DataFrameBuilder.Append {}.", this.traceObjectId, entry);
      }
docs: Processes a single operation.
  Steps:
  <ol>
  <li> Pre-processes operation (in MetadataUpdater).
  <li> Assigns Sequence Number.
  <li> Appends to DataFrameBuilder.
  <li> Accepts operation in MetadataUpdater.
  </ol>
  
  @param operation        The operation to process.
  @throws Exception If an exception occurred while processing this operation. Depending on the type of the exception,
  this could be due to the operation itself being invalid, or because we are unable to process any more operations.