code: private void readBufferAndLogMetrics(final Operation currentOp,
      final ByteBuffer rbuf, final MemcachedNode node) throws IOException {
      currentOp.readFromBuffer(rbuf);
      if (currentOp.getState() == OperationState.COMPLETE) {
        getLogger().debug("Completed read op: %s and giving the next %d "
          + "bytes", currentOp, rbuf.remaining());
        Operation op = node.removeCurrentReadOp();
        assert op == currentOp : "Expected to pop " + currentOp + " got "
          + op;
  
        if (op.hasErrored()) {
          metrics.markMeter(OVERALL_RESPONSE_FAIL_METRIC);
        } else {
          metrics.markMeter(OVERALL_RESPONSE_SUCC_METRIC);
        }
      } else if (currentOp.getState() == OperationState.RETRY) {
        handleRetryInformation(currentOp.getErrorMsg());
        getLogger().debug("Reschedule read op due to NOT_MY_VBUCKET error: "
          + "%s ", currentOp);
        ((VBucketAware) currentOp).addNotMyVbucketNode(
          currentOp.getHandlingNode());
        Operation op = node.removeCurrentReadOp();
        assert op == currentOp : "Expected to pop " + currentOp + " got "
          + op;
  
        retryOperation(currentOp);
        metrics.markMeter(OVERALL_RESPONSE_RETRY_METRIC);
      }
    }
docs: Read from the buffer and add metrics information.
  
  @param currentOp the current operation to read.
  @param rbuf the read buffer to read from.
  @param node the node to read from.
  @throws IOException if reading was not successful.