Program: 31715
Project: 31715
Buggy source:
/** 
 * Invoked when the mapper wishes to mark a set of outgoing relationships like (a)-[:T]->(*) as deleted, prior to possibly re-establishing them individually as it traverses the entity graph. There are two reasons why a set of relationships might not be be able to be marked deleted: 1) the request to mark them as deleted has already been made 2) the relationship is not persisted in the graph (i.e. its a new relationship) Only case 1) is considered to be a failed request, because this context is only concerned about pre-existing relationships in the graph. In order to distinguish between the two cases, we also maintain a list of successfully deleted relationships, so that uf we try to delete an already-deleted set of relationships we can signal the error.
 * @param src the identity of the node at the start of the relationship
 * @param relationshipType the type of the relationship
 * @return true if the relationship was deleted or doesn't exist in the graph, false otherwise
 */
public boolean deregisterOutgoingRelationships(Long src,String relationshipType){
  Iterator<MappedRelationship> iterator=registeredRelationships.iterator();
  boolean found=false;
  while (iterator.hasNext()) {
    MappedRelationship mappedRelationship=iterator.next();
    if (mappedRelationship.getStartNodeId() == src && mappedRelationship.getRelationshipType().equals(relationshipType)) {
      iterator.remove();
      deletedRelationships.add(mappedRelationship);
      found=true;
    }
  }
  if (found)   return true;
  iterator=deletedRelationships.iterator();
  while (iterator.hasNext()) {
    MappedRelationship mappedRelationship=iterator.next();
    if (mappedRelationship.getStartNodeId() == src && mappedRelationship.getRelationshipType().equals(relationshipType)) {
      return false;
    }
  }
  return true;
}

Fixed version (ground truth):
/** 
 * Invoked when the mapper wishes to mark a set of outgoing relationships like (a)-[:T]-&gt;(*) as deleted, prior to possibly re-establishing them individually as it traverses the entity graph. There are two reasons why a set of relationships might not be be able to be marked deleted: 1) the request to mark them as deleted has already been made 2) the relationship is not persisted in the graph (i.e. its a new relationship) Only case 1) is considered to be a failed request, because this context is only concerned about pre-existing relationships in the graph. In order to distinguish between the two cases, we also maintain a list of successfully deleted relationships, so that uf we try to delete an already-deleted set of relationships we can signal the error.
 * @param src the identity of the node at the start of the relationship
 * @param relationshipType the type of the relationship
 * @return true if the relationship was deleted or doesn't exist in the graph, false otherwise
 */
public boolean deregisterOutgoingRelationships(Long src,String relationshipType){
  Iterator<MappedRelationship> iterator=registeredRelationships.iterator();
  boolean found=false;
  while (iterator.hasNext()) {
    MappedRelationship mappedRelationship=iterator.next();
    if (mappedRelationship.getStartNodeId() == src && mappedRelationship.getRelationshipType().equals(relationshipType)) {
      iterator.remove();
      deletedRelationships.add(mappedRelationship);
      found=true;
    }
  }
  if (found)   return true;
  iterator=deletedRelationships.iterator();
  while (iterator.hasNext()) {
    MappedRelationship mappedRelationship=iterator.next();
    if (mappedRelationship.getStartNodeId() == src && mappedRelationship.getRelationshipType().equals(relationshipType)) {
      return false;
    }
  }
  return true;
}