apache / incubator-hugegraph

A graph database that supports more than 100+ billion data, high performance and scalability (Include OLTP Engine & REST-API & Backends)
https://hugegraph.apache.org
Apache License 2.0
2.58k stars 512 forks source link

[Bug] hasLabel() cannot be queried after inE() #1950

Open zhengyingying opened 1 year ago

zhengyingying commented 1 year ago

Bug Type (问题类型)

No response

Before submit

Environment (环境信息)

Expected & Actual behavior (期望与实际表现)

We execute the query g.V().inE('el0').hasLabel('el0','el1') and expect it returns some edges.

But it throws an exception java.lang.IllegalStateException: Illegal key 'LABEL' with more than one value.

Reproduce

The schema of the simplify graph as follows.


connection.getHugespecial().schema().propertyKey("ep0").asBoolean().ifNotExist().create();
connection.getHugespecial().schema().propertyKey("ep1").asBoolean().ifNotExist().create();
connection.getHugespecial().schema().edgeLabel("el0").sourceLabel("vl0").targetLabel("vl0").properties("ep0").ifNotExist().create();     
connection.getHugespecial().schema().edgeLabel("el1").sourceLabel("vl0").targetLabel("vl0").properties("ep1").ifNotExist().create();
connection.getHugespecial().schema().indexLabel("el0Byep0").onE("el0").by("ep0").shard().ifNotExist().create();
connection.getHugespecial().schema().indexLabel("el1Byep0").onE("el1").by("ep1").shard().ifNotExist().create();

Vertex vertex1 = new Vertex("vl0").property("vp0", true);
Vertex vertex2 = new Vertex("vl0").property("vp0", false);
Vertex vertex3 = new Vertex("vl0").property("vp0", true);
graph.addVertices(Arrays.asList(vertex1, vertex2, vertex3));

Edge edge1 = new Edge("el0").source(vertex1).target(vertex2).property("ep0", true);
Edge edge2 = new Edge("el1").source(vertex1).target(vertex3).property("ep1", false);
graph.addEdges(Arrays.asList(edge1, edge2));

GremlinManager gremlin = connection.getHugespecial().gremlin();

String query = "g.V().inE('el0').hasLabel('el0','el1')";

### Vertex/Edge example (问题点 / 边数据举例)

_No response_

### Schema [VertexLabel, EdgeLabel, IndexLabel] (元数据结构)

_No response_
zhengyingying commented 1 year ago

The exception can also be triggered when we remove the label el0 in hasLabel('el0','el1'). Maybe the reason is not the multiple labels.

In addition, I find that if I execute this query as the following way, it does not throw exception but return the correct result.

g.V().inE('el0');   -- {e:{1}}
g.E(1).hasLabel('el0','el1');  -- {e:{1}}
zhengyingying commented 1 year ago

@imbajin I find this issue is similar to https://github.com/apache/incubator-hugegraph/issues/1951. Maybe the reasons for these two issues are the same, and you can investigate them together.

I also find that a closed issue (https://github.com/apache/incubator-hugegraph/issues/1735) reported the similar bug, and it seems to be fixed. But we still found it. Maybe it deserves further investigation?

javeme commented 1 year ago

@zhengyingying Yes it looks fixed, but due to v0.12.0 version does not contain the latest code, you can try cherry-pick that commit and execute mvn package manually to get a bugfix tar.

how to cherry-pick and package manually:

git checkout master
git pull
git checkout -b release-0.12 origin/release-0.12
git cherry-pick cadeade476e5e9773471cbc67b1a65ed505eba77
mvn package -DskipTests
zhengyingying commented 1 year ago

@javeme Thanks! I will try to do it.

In addition, may I ask the cause of this bug?

zhengyingying commented 1 year ago

@javeme Hi, I have tried to build the project. But an exception was thrown on the package hugegraph-dist.

org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException
      role: org.apache.maven.artifact.resolver.ArtifactResolver
  roleHint: project-cache-aware

How can I solve it?