Program: 70475
Project: 70475
Buggy source:
@Override public void obtainData(LogicalData ld,DataLocation source,DataLocation target,LogicalData tgtData,Transferable reason,DataOperation.EventListener listener){
  if (ld.isInMemory()) {
    try {
      Serializer.serialize(ld.getValue(),target.getPath());
      if (tgtData != null) {
        tgtData.addLocation(target);
      }
      reason.setDataTarget(target.getPath());
      listener.notifyEnd(null);
      return;
    }
 catch (    IOException ex) {
      ErrorManager.warn("String_Node_Str" + target.getPath(),ex);
    }
  }
  if (debug) {
    logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
  }
  ld.lockHostRemove();
  Collection<Copy> copiesInProgress=ld.getCopiesInProgress();
  if (copiesInProgress != null && !copiesInProgress.isEmpty()) {
    for (    Copy copy : copiesInProgress) {
      if (copy != null) {
        if (copy.getTargetLoc() != null && copy.getTargetLoc().getHosts().contains(Comm.appHost)) {
          if (debug) {
            logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
          }
          waitForCopyTofinish(copy);
          try {
            if (debug) {
              logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ copy.getFinalTarget()+ "String_Node_Str"+ target.getPath());
            }
            Files.copy((new File(copy.getTargetLoc().getPath())).toPath(),new File(target.getPath()).toPath(),StandardCopyOption.REPLACE_EXISTING);
            if (tgtData != null) {
              tgtData.addLocation(target);
            }
            reason.setDataTarget(target.getPath());
            listener.notifyEnd(null);
            ld.releaseHostRemoveLock();
            return;
          }
 catch (          IOException ex) {
            ErrorManager.warn("String_Node_Str" + target.getPath() + "String_Node_Str",ex);
          }
        }
 else         if (copy.getTargetData() != null && copy.getTargetData().getAllHosts().contains(Comm.appHost)) {
          waitForCopyTofinish(copy);
          try {
            if (debug) {
              logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ copy.getFinalTarget()+ "String_Node_Str"+ target.getPath());
            }
            Files.copy((new File(copy.getFinalTarget())).toPath(),new File(target.getPath()).toPath(),StandardCopyOption.REPLACE_EXISTING);
            if (tgtData != null) {
              tgtData.addLocation(target);
            }
            reason.setDataTarget(target.getPath());
            listener.notifyEnd(null);
            ld.releaseHostRemoveLock();
            return;
          }
 catch (          IOException ex) {
            ErrorManager.warn("String_Node_Str" + target.getPath() + "String_Node_Str",ex);
          }
        }
 else {
          if (debug) {
            logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
          }
        }
      }
    }
  }
  for (  URI u : ld.getURIs()) {
    if (u.getHost() == Comm.appHost) {
      try {
        if (debug) {
          logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ u.getHost().getName()+ "String_Node_Str"+ target.getPath());
        }
        Files.copy((new File(u.getPath())).toPath(),new File(target.getPath()).toPath(),StandardCopyOption.REPLACE_EXISTING);
        if (tgtData != null) {
          tgtData.addLocation(target);
        }
        reason.setDataTarget(target.getPath());
        listener.notifyEnd(null);
        ld.releaseHostRemoveLock();
        return;
      }
 catch (      IOException ex) {
        ErrorManager.warn("String_Node_Str" + target.getPath() + "String_Node_Str",ex);
      }
    }
 else {
      if (debug) {
        logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ u.getHost()+ "String_Node_Str");
      }
    }
  }
  if (source != null) {
    for (    Resource sourceRes : source.getHosts()) {
      COMPSsNode node=sourceRes.getNode();
      if (node != this) {
        try {
          if (debug) {
            logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ source.getPath()+ "String_Node_Str"+ target.getPath());
          }
          node.sendData(ld,source,target,tgtData,reason,listener);
        }
 catch (        Exception e) {
          ErrorManager.warn("String_Node_Str" + target.getPath(),e);
          continue;
        }
        logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
        ld.releaseHostRemoveLock();
        return;
      }
 else {
        try {
          if (debug) {
            logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ source.getPath()+ "String_Node_Str"+ target.getPath());
          }
          Files.copy(new File(source.getPath()).toPath(),new File(target.getPath()).toPath(),StandardCopyOption.REPLACE_EXISTING);
          listener.notifyEnd(null);
          ld.releaseHostRemoveLock();
          return;
        }
 catch (        IOException ex) {
          ErrorManager.warn("String_Node_Str" + source.getPath() + "String_Node_Str"+ target.getPath(),ex);
        }
      }
    }
  }
 else {
    logger.debug("String_Node_Str");
  }
  for (  Resource sourceRes : ld.getAllHosts()) {
    COMPSsNode node=sourceRes.getNode();
    if (node != this) {
      try {
        logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourceRes.getName()+ "String_Node_Str"+ target.getPath());
        node.sendData(ld,source,target,tgtData,reason,listener);
      }
 catch (      Exception e) {
        logger.error("String_Node_Str",e);
        continue;
      }
      logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
      ld.releaseHostRemoveLock();
      return;
    }
 else {
      if (debug) {
        logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourceRes.getName()+ "String_Node_Str");
      }
    }
  }
  ErrorManager.warn("String_Node_Str" + ld.getName() + "String_Node_Str"+ target.getPath());
  ld.releaseHostRemoveLock();
}

Fixed version (ground truth):
@Override public void obtainData(LogicalData ld,DataLocation source,DataLocation target,LogicalData tgtData,Transferable reason,DataOperation.EventListener listener){
  if (ld.isInMemory()) {
    try {
      Serializer.serialize(ld.getValue(),target.getPath());
      if (tgtData != null) {
        tgtData.addLocation(target);
      }
      logger.debug("String_Node_Str" + target.getPath());
      reason.setDataTarget(target.getPath());
      listener.notifyEnd(null);
      return;
    }
 catch (    IOException ex) {
      ErrorManager.warn("String_Node_Str" + target.getPath(),ex);
    }
  }
  if (debug) {
    logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
  }
  ld.lockHostRemove();
  Collection<Copy> copiesInProgress=ld.getCopiesInProgress();
  if (copiesInProgress != null && !copiesInProgress.isEmpty()) {
    for (    Copy copy : copiesInProgress) {
      if (copy != null) {
        if (copy.getTargetLoc() != null && copy.getTargetLoc().getHosts().contains(Comm.appHost)) {
          if (debug) {
            logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
          }
          waitForCopyTofinish(copy);
          try {
            if (debug) {
              logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ copy.getFinalTarget()+ "String_Node_Str"+ target.getPath());
            }
            Files.copy((new File(copy.getFinalTarget())).toPath(),new File(target.getPath()).toPath(),StandardCopyOption.REPLACE_EXISTING);
            if (tgtData != null) {
              tgtData.addLocation(target);
            }
            logger.debug("String_Node_Str" + target.getPath());
            reason.setDataTarget(target.getPath());
            listener.notifyEnd(null);
            ld.releaseHostRemoveLock();
            return;
          }
 catch (          IOException ex) {
            ErrorManager.warn("String_Node_Str" + copy.getFinalTarget() + "String_Node_Str"+ target.getPath()+ "String_Node_Str",ex);
          }
        }
 else         if (copy.getTargetData() != null && copy.getTargetData().getAllHosts().contains(Comm.appHost)) {
          waitForCopyTofinish(copy);
          try {
            if (debug) {
              logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ copy.getFinalTarget()+ "String_Node_Str"+ target.getPath());
            }
            Files.copy((new File(copy.getFinalTarget())).toPath(),new File(target.getPath()).toPath(),StandardCopyOption.REPLACE_EXISTING);
            if (tgtData != null) {
              tgtData.addLocation(target);
            }
            logger.debug("String_Node_Str" + target.getPath());
            reason.setDataTarget(target.getPath());
            listener.notifyEnd(null);
            ld.releaseHostRemoveLock();
            return;
          }
 catch (          IOException ex) {
            ErrorManager.warn("String_Node_Str" + copy.getFinalTarget() + "String_Node_Str"+ target.getPath()+ "String_Node_Str",ex);
          }
        }
 else {
          if (debug) {
            logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
          }
        }
      }
    }
  }
  if (debug) {
    logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ Comm.appHost+ "String_Node_Str");
  }
  for (  URI u : ld.getURIs()) {
    logger.debug(ld.getName() + "String_Node_Str" + u.toString()+ "String_Node_Str"+ u.getHost()+ "String_Node_Str");
    if (u.getHost() == Comm.appHost) {
      try {
        if (debug) {
          logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ u.getHost().getName()+ "String_Node_Str"+ target.getPath());
        }
        Files.copy((new File(u.getPath())).toPath(),new File(target.getPath()).toPath(),StandardCopyOption.REPLACE_EXISTING);
        if (tgtData != null) {
          tgtData.addLocation(target);
        }
        logger.debug("String_Node_Str" + target.getPath());
        reason.setDataTarget(target.getPath());
        listener.notifyEnd(null);
        ld.releaseHostRemoveLock();
        return;
      }
 catch (      IOException ex) {
        ErrorManager.warn("String_Node_Str" + u.getPath() + "String_Node_Str"+ target.getPath()+ "String_Node_Str",ex);
      }
    }
 else {
      if (debug) {
        logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ u.getHost()+ "String_Node_Str");
      }
    }
  }
  if (source != null) {
    for (    Resource sourceRes : source.getHosts()) {
      COMPSsNode node=sourceRes.getNode();
      if (node != this) {
        try {
          if (debug) {
            logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ source.getPath()+ "String_Node_Str"+ target.getPath());
          }
          node.sendData(ld,source,target,tgtData,reason,listener);
        }
 catch (        Exception e) {
          ErrorManager.warn("String_Node_Str" + target.getPath(),e);
          continue;
        }
        logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
        ld.releaseHostRemoveLock();
        return;
      }
 else {
        try {
          if (debug) {
            logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ source.getPath()+ "String_Node_Str"+ target.getPath());
          }
          Files.copy(new File(source.getPath()).toPath(),new File(target.getPath()).toPath(),StandardCopyOption.REPLACE_EXISTING);
          logger.debug("String_Node_Str" + target.getPath());
          reason.setDataTarget(target.getPath());
          listener.notifyEnd(null);
          ld.releaseHostRemoveLock();
          return;
        }
 catch (        IOException ex) {
          ErrorManager.warn("String_Node_Str" + source.getPath() + "String_Node_Str"+ target.getPath(),ex);
        }
      }
    }
  }
 else {
    logger.debug("String_Node_Str");
  }
  for (  Resource sourceRes : ld.getAllHosts()) {
    COMPSsNode node=sourceRes.getNode();
    if (node != this) {
      try {
        logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourceRes.getName()+ "String_Node_Str"+ target.getPath());
        node.sendData(ld,source,target,tgtData,reason,listener);
      }
 catch (      Exception e) {
        logger.error("String_Node_Str",e);
        continue;
      }
      logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
      ld.releaseHostRemoveLock();
      return;
    }
 else {
      if (debug) {
        logger.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourceRes.getName()+ "String_Node_Str");
      }
    }
  }
  ErrorManager.warn("String_Node_Str" + ld.getName() + "String_Node_Str"+ target.getPath());
  ld.releaseHostRemoveLock();
}