Program: 48953
Project: 48953
Buggy source:
/** 
 * Runs operation in calling thread.
 */
private void doRunOperation(final Operation op){
  executedOperationsCount.incrementAndGet();
  RemoteCallKey callKey=null;
  try {
    if (isCallTimedOut(op)) {
      Object response=new CallTimeoutException("String_Node_Str" + op.getClass().getName() + "String_Node_Str"+ op.getInvocationTime()+ "String_Node_Str"+ op.getCallTimeout());
      op.getResponseHandler().sendResponse(response);
      return;
    }
    callKey=beforeCallExecution(op);
    final int partitionId=op.getPartitionId();
    if (op instanceof PartitionAwareOperation) {
      if (partitionId < 0) {
        throw new IllegalArgumentException("String_Node_Str" + partitionId);
      }
      final PartitionView partitionView=nodeEngine.getPartitionService().getPartition(partitionId);
      if (partitionView == null) {
        throw new PartitionMigratingException(node.getThisAddress(),partitionId,op.getClass().getName(),op.getServiceName());
      }
      if (retryDuringMigration(op) && node.partitionService.isPartitionMigrating(partitionId)) {
        throw new PartitionMigratingException(node.getThisAddress(),partitionId,op.getClass().getName(),op.getServiceName());
      }
      final Address owner=partitionView.getReplicaAddress(op.getReplicaIndex());
      if (op.validatesTarget() && !node.getThisAddress().equals(owner)) {
        throw new WrongTargetException(node.getThisAddress(),owner,partitionId,op.getReplicaIndex(),op.getClass().getName(),op.getServiceName());
      }
    }
    OperationAccessor.setStartTime(op,Clock.currentTimeMillis());
    op.beforeRun();
    if (op instanceof WaitSupport) {
      WaitSupport waitSupport=(WaitSupport)op;
      if (waitSupport.shouldWait()) {
        nodeEngine.waitNotifyService.await(waitSupport);
        return;
      }
    }
    op.run();
    final boolean returnsResponse=op.returnsResponse();
    Object response=null;
    if (op instanceof BackupAwareOperation) {
      final BackupAwareOperation backupAwareOp=(BackupAwareOperation)op;
      int syncBackupCount=0;
      if (backupAwareOp.shouldBackup()) {
        syncBackupCount=sendBackups(backupAwareOp);
      }
      if (returnsResponse) {
        response=new Response(op.getResponse(),op.getCallId(),syncBackupCount);
      }
    }
    if (returnsResponse) {
      if (response == null) {
        response=op.getResponse();
      }
      final ResponseHandler responseHandler=op.getResponseHandler();
      if (responseHandler == null) {
        throw new IllegalStateException("String_Node_Str");
      }
      responseHandler.sendResponse(response);
    }
    op.afterRun();
    if (op instanceof Notifier) {
      final Notifier notifier=(Notifier)op;
      if (notifier.shouldNotify()) {
        nodeEngine.waitNotifyService.notify(notifier);
      }
    }
  }
 catch (  Throwable e) {
    handleOperationError(op,e);
  }
 finally {
    afterCallExecution(op,callKey);
  }
}

Fixed version (ground truth):
/** 
 * Runs operation in calling thread.
 */
private void doRunOperation(final Operation op){
  executedOperationsCount.incrementAndGet();
  RemoteCallKey callKey=null;
  try {
    if (isCallTimedOut(op)) {
      Object response=new CallTimeoutException(op.getClass().getName(),op.getInvocationTime(),op.getCallTimeout());
      op.getResponseHandler().sendResponse(response);
      return;
    }
    callKey=beforeCallExecution(op);
    final int partitionId=op.getPartitionId();
    if (op instanceof PartitionAwareOperation) {
      if (partitionId < 0) {
        throw new IllegalArgumentException("String_Node_Str" + partitionId);
      }
      final PartitionView partitionView=nodeEngine.getPartitionService().getPartition(partitionId);
      if (partitionView == null) {
        throw new PartitionMigratingException(node.getThisAddress(),partitionId,op.getClass().getName(),op.getServiceName());
      }
      if (retryDuringMigration(op) && node.partitionService.isPartitionMigrating(partitionId)) {
        throw new PartitionMigratingException(node.getThisAddress(),partitionId,op.getClass().getName(),op.getServiceName());
      }
      final Address owner=partitionView.getReplicaAddress(op.getReplicaIndex());
      if (op.validatesTarget() && !node.getThisAddress().equals(owner)) {
        throw new WrongTargetException(node.getThisAddress(),owner,partitionId,op.getReplicaIndex(),op.getClass().getName(),op.getServiceName());
      }
    }
    OperationAccessor.setStartTime(op,Clock.currentTimeMillis());
    op.beforeRun();
    if (op instanceof WaitSupport) {
      WaitSupport waitSupport=(WaitSupport)op;
      if (waitSupport.shouldWait()) {
        nodeEngine.waitNotifyService.await(waitSupport);
        return;
      }
    }
    op.run();
    final boolean returnsResponse=op.returnsResponse();
    Object response=null;
    if (op instanceof BackupAwareOperation) {
      final BackupAwareOperation backupAwareOp=(BackupAwareOperation)op;
      int syncBackupCount=0;
      if (backupAwareOp.shouldBackup()) {
        syncBackupCount=sendBackups(backupAwareOp);
      }
      if (returnsResponse) {
        response=new Response(op.getResponse(),op.getCallId(),syncBackupCount);
      }
    }
    if (returnsResponse) {
      if (response == null) {
        response=op.getResponse();
      }
      final ResponseHandler responseHandler=op.getResponseHandler();
      if (responseHandler == null) {
        throw new IllegalStateException("String_Node_Str");
      }
      responseHandler.sendResponse(response);
    }
    op.afterRun();
    if (op instanceof Notifier) {
      final Notifier notifier=(Notifier)op;
      if (notifier.shouldNotify()) {
        nodeEngine.waitNotifyService.notify(notifier);
      }
    }
  }
 catch (  Throwable e) {
    handleOperationError(op,e);
  }
 finally {
    afterCallExecution(op,callKey);
  }
}