An ambiguous error message【Vertex with given id already exists:xxx】
-
Version: 0.6.1
-
Storage Backend: cql
When I insert this data repeatedly, it prompts me: Vertex with given id already exists: 256, actually myID is 1, I think this hint is ambiguous, and it interferes with debugging by myID
long vertexId = ((StandardJanusGraph) graph).getIDManager().toVertexId(1L);
g.addV().property(T.id, vertexId).next();
g.tx().commit();
... at org.janusgraph.graphdb.transaction.StandardJanusGraphTx.addVertex(StandardJanusGraphTx.java:584) ...
Line 582 tells you that the vertexId belongs to NormalVertex, and if it can be converted to myID instead of vertexId when prompted by line 584
582 Preconditions.checkArgument(vertexId == null || IDManager.VertexIDType.NormalVertex.is(vertexId), "Not a valid vertex id: %s", vertexId);
583 Preconditions.checkArgument(vertexId == null || ((InternalVertexLabel)label).hasDefaultConfiguration(), "Cannot only use default vertex labels: %s",label);
584 Preconditions.checkArgument(vertexId == null || !config.hasVerifyExternalVertexExistence() || !containsVertex(vertexId), "Vertex with given id already exists: %s", vertexId);
Thanks to the development team for their contribution!
@ZhangErling Thank you for your report! I agree the error message is somewhat confusing. On one hand, the error message is completely right in the sense that 256 is indeed provided by you. On the other hand, you probably won't realize that you converted vertexId from 1 to 256 using the ((StandardJanusGraph) graph).getIDManager().toVertexId(1L); technique.
From a technical perspective, there is no way for the program to know that 256 was transformed from 1 because you did the transformation explicitly. I think a nice resolution would be to document the behavior to avoid any confusion.