[ 
https://issues.apache.org/jira/browse/TINKERPOP-1923?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16409345#comment-16409345
 ] 

ASF GitHub Bot commented on TINKERPOP-1923:
-------------------------------------------

Github user rcaunt commented on the issue:

    https://github.com/apache/tinkerpop/pull/818
  
    @spmallette I've been working with @jbaker-nca to understand this issue a 
bit more.
    
    Our use case for discovering this bug was essentially merging two separate 
graphs into a single graph.  
    
    When two vertices are to be merged we copy the edges from the original 
vertex to a new one and then proceed to remove the edges on that vertex using 
the following:
    
    ``` java
    Object[] edgeIdsArr = edgeIds.toArray();    
    if(edgeIdsArr.length > 0)   
        graph.traversal().E(edgeIdsArr).drop().iterate();
    ```
    
    Once the vertices are merged we then remove the original vertices from the 
graph:
    
    ``` java
    Object[] ids = 
mergeGroup.stream().map(Element::id).filter(Objects::nonNull).toArray();
    if(ids != null && ids.length > 0)
        graph.traversal().V(ids).drop().iterate();
    ```
    
    This second traversal on vertex removal is where the error would occur 
yielding the following exception:
    
    ```
    Exception in thread "main" java.lang.NegativeArraySizeException
            at java.util.AbstractCollection.toArray(Unknown Source)
            at java.util.ArrayList.addAll(Unknown Source)
            at java.lang.Iterable.forEach(Unknown Source)
            at 
org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerHelper.getEdges(TinkerHelper.java:173)
            at 
org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex.edges(TinkerVertex.java:146)
            at 
org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex.remove(TinkerVertex.java:131)
            at 
org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropStep.filter(DropStep.java:67)
            at 
org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep.processNextStart(FilterStep.java:38)
            at 
org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:128)
            at 
org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:38)
            at 
org.apache.tinkerpop.gremlin.process.traversal.Traversal.iterate(Traversal.java:198)
            at 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.iterate(GraphTraversal.java:2677)
            at 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal$Admin.iterate(GraphTraversal.java:176)
            at 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.iterate(DefaultGraphTraversal.java:48)
    ```
    
    I noticed the following Google Groups post - 
https://groups.google.com/forum/#!topic/gremlin-users/CGkuoBkNMGI - which 
indicates that when removing a vertex the edges should be removed at the same 
time.  Therefore I modified our code to no longer remove the edges and only 
remove the vertices.  
    
    This appears to have fixed our issue and we have reverted back to Tinkerpop 
3.3.1 without any further issues.  However, I suspect that one should be able 
to remove edges and then vertices without encountering the issue.


> Intermittent NegativeArraySizeException on drop
> -----------------------------------------------
>
>                 Key: TINKERPOP-1923
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1923
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: tinkergraph
>    Affects Versions: 3.3.1
>            Reporter: James Baker
>            Priority: Major
>
> I am intermittently getting the following exception when dropping vertices on 
> a TinkerGraph:
> {noformat}
> Exception in thread "main" java.lang.NegativeArraySizeException
> at java.util.AbstractCollection.toArray(AbstractCollection.java:136)
> at java.util.ArrayList.addAll(ArrayList.java:581)
> at java.util.HashMap$Values.forEach(HashMap.java:981)
> at 
> org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerHelper.getEdges(TinkerHelper.java:172)
> at 
> org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex.edges(TinkerVertex.java:146)
> at 
> org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex.remove(TinkerVertex.java:131)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropStep.filter(DropStep.java:67)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep.processNextStart(FilterStep.java:38)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.hasNext(AbstractStep.java:143)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.step.util.ExpandableStepIterator.next(ExpandableStepIterator.java:50)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep.processNextStart(FilterStep.java:37)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:128)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:38)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.Traversal.iterate(Traversal.java:203)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.iterate(GraphTraversal.java:2664)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal$Admin.iterate(GraphTraversal.java:177)
> at 
> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.iterate(DefaultGraphTraversal.java:48)
> at mycode.merge.GraphMerger.mergeVertices(GraphMerger.java:172)
> at mycode.merge.GraphMerger.lambda$mergeGraphs$6(GraphMerger.java:78)
> at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
> at 
> java.util.concurrent.ConcurrentHashMap$ValueSpliterator.forEachRemaining(ConcurrentHashMap.java:3566)
> at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
> at 
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
> at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
> at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
> at mycode.merge.GraphMerger.mergeGraphs(GraphMerger.java:79)
> at mycode.cli.mapper.MergeGraphFiles.main(MergeGraphFiles.java:117)
> {noformat}
> My code is as follows (the last line is Line 172, which is where the 
> exception is thrown):
> {code:java}
> LOGGER.info("Removing original vertices");
> Object[] ids = mergeGroup.stream().map(Element::id).toArray();
> LOGGER.debug("IDs to remove {}", ids);
> if(ids != null && ids.length > 0)
>     graph.traversal().V(ids).drop().iterate();
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to