Program: 166963
Project: 166963
Buggy source:
/** 
 * @param vertexLabelJson
 * @param fire should we fire topology events
 */
void fromNotifyJsonOutEdge(JsonNode vertexLabelJson,boolean fire){
  super.fromPropertyNotifyJson(vertexLabelJson,fire);
  for (  String s : Arrays.asList("String_Node_Str","String_Node_Str")) {
    ArrayNode uncommittedOutEdgeLabels=(ArrayNode)vertexLabelJson.get(s);
    if (uncommittedOutEdgeLabels != null) {
      for (      JsonNode uncommittedOutEdgeLabel : uncommittedOutEdgeLabels) {
        String schemaName=uncommittedOutEdgeLabel.get("String_Node_Str").asText();
        Preconditions.checkState(schemaName.equals(getSchema().getName()),"String_Node_Str");
        String edgeLabelName=uncommittedOutEdgeLabel.get("String_Node_Str").asText();
        Optional<EdgeLabel> edgeLabelOptional=this.schema.getEdgeLabel(edgeLabelName);
        EdgeLabel edgeLabel;
        if (!edgeLabelOptional.isPresent()) {
          edgeLabel=new EdgeLabel(this.getSchema().getTopology(),edgeLabelName);
          this.getSchema().getTopology().fire(edgeLabel,"String_Node_Str",TopologyChangeAction.CREATE);
        }
 else {
          edgeLabel=edgeLabelOptional.get();
        }
        edgeLabel.addToOutVertexLabel(this);
        this.outEdgeLabels.put(schemaName + "String_Node_Str" + edgeLabel.getLabel(),edgeLabel);
        edgeLabel.fromPropertyNotifyJson(uncommittedOutEdgeLabel,edgeLabelOptional.isPresent());
        this.getSchema().getTopology().addToAllTables(getSchema().getName() + "String_Node_Str" + EDGE_PREFIX+ edgeLabel.getLabel(),edgeLabel.getPropertyTypeMap());
        this.getSchema().addToAllEdgeCache(edgeLabel);
        this.getSchema().getTopology().addOutForeignKeysToVertexLabel(this,edgeLabel);
        this.getSchema().getTopology().addToEdgeForeignKeyCache(this.getSchema().getName() + "String_Node_Str" + EDGE_PREFIX+ edgeLabel.getLabel(),this.getSchema().getName() + "String_Node_Str" + this.getLabel()+ SchemaManager.OUT_VERTEX_COLUMN_END);
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * @param vertexLabelJson
 * @param fire should we fire topology events
 */
void fromNotifyJsonOutEdge(JsonNode vertexLabelJson,boolean fire){
  super.fromPropertyNotifyJson(vertexLabelJson,fire);
  for (  String s : Arrays.asList("String_Node_Str","String_Node_Str")) {
    ArrayNode uncommittedOutEdgeLabels=(ArrayNode)vertexLabelJson.get(s);
    if (uncommittedOutEdgeLabels != null) {
      for (      JsonNode uncommittedOutEdgeLabel : uncommittedOutEdgeLabels) {
        String schemaName=uncommittedOutEdgeLabel.get("String_Node_Str").asText();
        Preconditions.checkState(schemaName.equals(getSchema().getName()),"String_Node_Str");
        String edgeLabelName=uncommittedOutEdgeLabel.get("String_Node_Str").asText();
        Optional<EdgeLabel> edgeLabelOptional=this.schema.getEdgeLabel(edgeLabelName);
        EdgeLabel edgeLabel;
        if (!edgeLabelOptional.isPresent()) {
          edgeLabel=new EdgeLabel(this.getSchema().getTopology(),edgeLabelName);
        }
 else {
          edgeLabel=edgeLabelOptional.get();
        }
        edgeLabel.addToOutVertexLabel(this);
        this.outEdgeLabels.put(schemaName + "String_Node_Str" + edgeLabel.getLabel(),edgeLabel);
        edgeLabel.fromPropertyNotifyJson(uncommittedOutEdgeLabel,edgeLabelOptional.isPresent());
        this.getSchema().getTopology().addToAllTables(getSchema().getName() + "String_Node_Str" + EDGE_PREFIX+ edgeLabel.getLabel(),edgeLabel.getPropertyTypeMap());
        this.getSchema().addToAllEdgeCache(edgeLabel);
        this.getSchema().getTopology().addOutForeignKeysToVertexLabel(this,edgeLabel);
        this.getSchema().getTopology().addToEdgeForeignKeyCache(this.getSchema().getName() + "String_Node_Str" + EDGE_PREFIX+ edgeLabel.getLabel(),this.getSchema().getName() + "String_Node_Str" + this.getLabel()+ SchemaManager.OUT_VERTEX_COLUMN_END);
        if (!edgeLabelOptional.isPresent()) {
          this.getSchema().getTopology().fire(edgeLabel,"String_Node_Str",TopologyChangeAction.CREATE);
        }
      }
    }
  }
}