@Override
  public void run() {
    final Address endpoint = getCallerAddress();
    if (endpoint == null) {
      return;
    }

    final ClusterServiceImpl clusterService = getService();
    final ILogger logger = getLogger();
    final MemberImpl member = clusterService.getMember(endpoint);
    if (member == null) {
      logger.warning(
          "MasterConfirmation has been received from "
              + endpoint
              + ", but it is not a member of this cluster!");
      OperationService operationService = getNodeEngine().getOperationService();
      operationService.send(new MemberRemoveOperation(clusterService.getThisAddress()), endpoint);
    } else {
      if (clusterService.isMaster()) {
        clusterService.getClusterHeartbeatManager().acceptMasterConfirmation(member, timestamp);
      } else {
        logger.warning(endpoint + " has sent MasterConfirmation, but this node is not master!");
      }
    }
  }
    private void callDisconnectionOperation(ClientEndpointImpl endpoint) {
      Collection<Member> memberList = nodeEngine.getClusterService().getMembers();
      OperationService operationService = nodeEngine.getOperationService();
      ClientDisconnectionOperation op = createClientDisconnectionOperation(endpoint.getUuid());
      operationService.runOperationOnCallingThread(op);

      for (Member member : memberList) {
        if (!member.localMember()) {
          op = createClientDisconnectionOperation(endpoint.getUuid());
          operationService.send(op, member.getAddress());
        }
      }
    }
  private void invokeCheckReplicaVersion(int partitionId, int replicaIndex, Address target) {
    InternalPartitionServiceImpl partitionService = getService();
    long[] currentVersions = partitionService.getPartitionReplicaVersions(partitionId);
    long currentReplicaVersion = currentVersions[replicaIndex - 1];

    if (currentReplicaVersion > 0) {
      CheckReplicaVersion op =
          createCheckReplicaVersion(partitionId, replicaIndex, currentReplicaVersion);
      NodeEngine nodeEngine = getNodeEngine();
      OperationService operationService = nodeEngine.getOperationService();
      if (sync) {
        operationService
            .createInvocationBuilder(InternalPartitionService.SERVICE_NAME, op, target)
            .setExecutionCallback(callback)
            .setTryCount(OPERATION_TRY_COUNT)
            .setTryPauseMillis(OPERATION_TRY_PAUSE_MILLIS)
            .invoke();
      } else {
        operationService.send(op, target);
      }
    } else {
      notifyCallback(true);
    }
  }