@Override
 public void viewAccepted(View view) {
   ConsistentHash newHash = consistentHash.withExclusively(getMemberNames(view));
   if (!consistentHash.equals(newHash)) {
     int messagesLost = 0;
     // check whether the members with outstanding callbacks are all alive
     for (Map.Entry<String, MemberAwareCommandCallback> entry : callbacks.entrySet()) {
       if (!entry.getValue().isMemberLive(view)) {
         MemberAwareCommandCallback callback = callbacks.remove(entry.getKey());
         if (callback != null) {
           messagesLost++;
           callback.onFailure(
               new RemoteCommandHandlingException(
                   "The connection with the destination was lost before the result was reported."));
         }
       }
     }
     consistentHash = newHash;
     logger.info("Membership has changed. Rebuilt consistent hash ring.");
     logger.debug("New distributed hash: {}", consistentHash.toString());
     if (messagesLost > 0 && logger.isWarnEnabled()) {
       logger.warn(
           "A member was disconnected while waiting for a reply. {} messages are lost without reply.",
           messagesLost);
     }
   }
 }
 @SuppressWarnings("unchecked")
 private void processReplyMessage(ReplyMessage replyMessage) {
   MemberAwareCommandCallback callback = callbacks.remove(replyMessage.getCommandIdentifier());
   if (callback != null) {
     if (replyMessage.isSuccess()) {
       callback.onSuccess(replyMessage.getReturnValue(serializer));
     } else {
       callback.onFailure(replyMessage.getError(serializer));
     }
   }
 }