protected void processAck(Message msg, String opName) throws Exception {
    final MessageType msgType = msg.getMessageType();
    if (msgType != MessageType.REPLY) {
      Part part = msg.getPart(0);
      if (msgType == MessageType.EXCEPTION) {
        String s = ": While performing a remote " + opName;
        Throwable t = (Throwable) part.getObject();
        if (t instanceof PutAllPartialResultException) {
          throw (PutAllPartialResultException) t;
        } else {
          throw new ServerOperationException(s, t);
        }
        // Get the exception toString part.
        // This was added for c++ thin client and not used in java
      } else if (isErrorResponse(msgType)) {
        throw new ServerOperationException(part.getString());
      } else {
        throw new InternalGemFireError("Unexpected message type " + msgType);
      }
    }
  }
Process a response that contains an ack.

@param msg the message containing the response
@param opName text describing this op
@throws Exception if response could not be processed or we received a response with a server
        exception.
geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java