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

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

Github user spmallette commented on a diff in the pull request:

    https://github.com/apache/incubator-tinkerpop/pull/175#discussion_r47421541
  
    --- Diff: 
gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/io/IoTest.java
 ---
    @@ -249,6 +250,63 @@ public void shouldProperlyEncodeWithGraphML() throws 
Exception {
                 // need to manually close the "g2" instance
                 graphProvider.clear(g2, configuration);
             }
    +
    +        @Test
    +        @FeatureRequirement(featureClass = 
Graph.Features.EdgeFeatures.class, feature = 
Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
    +        @FeatureRequirement(featureClass = EdgePropertyFeatures.class, 
feature = FEATURE_STRING_VALUES)
    +        @FeatureRequirement(featureClass = 
Graph.Features.VertexFeatures.class, feature = 
Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
    +        public void shouldReadWriteSelfLoopingEdges() throws Exception {
    +            final Configuration sourceConf = 
graphProvider.newGraphConfiguration("source", this.getClass(), 
name.getMethodName(), null);
    +            final Graph source = GraphFactory.open(sourceConf);
    +            final Vertex v1 = source.addVertex();
    +            final Vertex v2 = source.addVertex();
    +            v1.addEdge("CONTROL", v2);
    +            v1.addEdge("SELF-LOOP", v1);
    +
    +            final Configuration targetConf = 
graphProvider.newGraphConfiguration("target", this.getClass(), 
name.getMethodName(), null);
    +            final Graph target = GraphFactory.open(targetConf);
    +            try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
    +                
source.io(IoCore.graphml()).writer().create().writeGraph(os, source);
    +                try (ByteArrayInputStream is = new 
ByteArrayInputStream(os.toByteArray())) {
    +                    
target.io(IoCore.graphml()).reader().create().readGraph(is, target);
    +                }
    +            } catch (IOException ioe) {
    +                throw new RuntimeException(ioe);
    +            }
    +
    +            assertEquals(IteratorUtils.count(source.vertices()), 
IteratorUtils.count(target.vertices()));
    +            assertEquals(IteratorUtils.count(source.edges()), 
IteratorUtils.count(target.vertices()));
    --- End diff --
    
    i bet this is why your test passes................. you are counting 
"source" edges against "target" vertices.  those counts happen to match. the 
assert is bad.  and yeah, now i see where the self-relation is only written on 
"inE" which is why it won't get read on "outE".  Given that we know your 
asserts are off, please double check gryo/graphml now and be sure those are 
passing too.
    
    as for why, it doesn't write the edge for both "outE" and "inE" - it just 
seems to be the way the `StarGraph` is implemented.  I sense that we call 
`addEdge()` on `StarGraph` which in turn chooses to call `addOutEdge` so it 
only gets added as an "out" edge.  Not sure what the implications of that are.  
    
    @okram not sure if we need to do anything with that in `StarGraph` but 
something to be aware of with self-relations.


> Support self-looping edges in IO
> --------------------------------
>
>                 Key: TINKERPOP-1036
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1036
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: io
>    Affects Versions: 3.1.0-incubating
>            Reporter: stephen mallette
>            Assignee: stephen mallette
>             Fix For: 3.1.1-incubating
>
>
> Seems like GraphSON is having trouble with self-loops.  Not sure about other 
> IO at this time.
> {code}
> gremlin> a = TinkerGraph.open()
> ==>tinkergraph[vertices:0 edges:0]
> gremlin> v1 = a.addVertex()
> ==>v[0]
> gremlin> v2 = a.addVertex()
> ==>v[1]
> gremlin> control = v1.addEdge("CONTROL", v2)
> ==>e[2][0-CONTROL->1]
> gremlin> selfLoop = v1.addEdge("SELF-LOOP", v1)
> ==>e[3][0-SELF-LOOP->0]
> gremlin> a.io(IoCore.graphson()).writeGraph("test.gson")
> ==>null
> gremlin> b = TinkerGraph.open()
> ==>tinkergraph[vertices:0 edges:0]
> gremlin> b.io(IoCore.graphson()).readGraph("test.gson")
> ==>null
> gremlin> b.traversal().E()
> ==>e[2][0-CONTROL->1]
> {code}
> with graphson of:
> {code}
> {"id":0,"label":"vertex","inE":{"SELF-LOOP":[{"id":3,"outV":0}]},"outE":{"CONTROL":[{"id":2,"inV":1}]}}
> {"id":1,"label":"vertex","inE":{"CONTROL":[{"id":2,"outV":0}]}}
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to