apache / apache/hugegraph-toolchain

[Bug] When calling the 'kneigbor' interface and returning the result, scenarios where 'withPath' is' true 'and' false 'are incompatible

Open
#643 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
121
Forks
125
Avg merge
10d 10h
Merged PRs (30d)
3

Description

### Bug Type (问题类型)

rest-api (结果不合预期)

### Before submit

- [X] I had searched in the [issues](https://github.com/apache/hugegraph-toolchain/issues) and found no similar issues.

### Environment (环境信息)

- Server Version: v1.5.0
- Toolchain Version: v1.5.0

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

调用‘kneighbor‘接口时,返回结果时,‘withPath‘为‘true‘与为‘false‘’的场景不兼容

com.qsdi.bigdata.multi.graph.common.exception.SdkException: (graph travel exception ):Failed to deserialize: {"kneighbor":["2:car1!2","2:car2!4"],"size":2,"paths":[{"objects":["1:zhangsan","2:car1!2"]},{"objects":["1:zhangsan","2:car2!4"]}],"vertices":[{"id":"2:car2!4","label":"car","type":"vertex","properties":{"age":4,"qsdi_task_id":"car2_task_id_test","qsdi_record_id":"test_record_id","name":"car2","qsdi_data_source":"1"}},{"id":"1:zhangsan","label":"people","type":"vertex","properties":{"age":55,"qsdi_record_id":"926106078160666624","name":"zhangsan","qsdi_data_source":"1"}},{"id":"2:car1!2","label":"car","type":"vertex","properties":{"age":2,"qsdi_task_id":"car1_task_id_test","qsdi_record_id":"car1_log_id_test","name":"car1","qsdi_data_source":"1"}}],"edges":["S1:zhangsan>3>3>>S2:car2!4","S1:zhangsan>3>3>>S2:car1!2"]}

at com.qsdi.bigdata.multi.graph.api.graph.DefaultGraphBusinessApi.kneighbor(DefaultGraphBusinessApi.java:2123)
at com.qsdi.bigdata.multi.graph.api.graph.DefaultGraphBusinessApi$$EnhancerByCGLIB$$7d86a3a5.CGLIB$kneighbor$10()
at com.qsdi.bigdata.multi.graph.api.graph.DefaultGraphBusinessApi$$EnhancerByCGLIB$$7d86a3a5$$FastClassByCGLIB$$e8249271.invoke()
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at com.qsdi.bigdata.multi.graph.api.handler.GraphApiHandler.intercept(GraphApiHandler.java:24)
at com.qsdi.bigdata.multi.graph.api.graph.DefaultGraphBusinessApi$$EnhancerByCGLIB$$7d86a3a5.kneighbor()
at com.qsdi.ipbd.multi.graph.test.hugegraph.GraphApiTest.testKneighbor(GraphApiTest.java:3149)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
Caused by: org.apache.hugegraph.rest.SerializeException: Failed to deserialize: {"kneighbor":["2:car1!2","2:car2!4"],"size":2,"paths":[{"objects":["1:zhangsan","2:car1!2"]},{"objects":["1:zhangsan","2:car2!4"]}],"vertices":[{"id":"2:car2!4","label":"car","type":"vertex","properties":{"age":4,"qsdi_task_id":"car2_task_id_test","qsdi_record_id":"test_record_id","name":"car2","qsdi_data_source":"1"}},{"id":"1:zhangsan","label":"people","type":"vertex","properties":{"age":55,"qsdi_record_id":"926106078160666624","name":"zhangsan","qsdi_data_source":"1"}},{"id":"2:car1!2","label":"car","type":"vertex","properties":{"age":2,"qsdi_task_id":"car1_task_id_test","qsdi_record_id":"car1_log_id_test","name":"car1","qsdi_data_source":"1"}}],"edges":["S1:zhangsan>3>3>>S2:car2!4","S1:zhangsan>3>3>>S2:car1!2"]}
at org.apache.hugegraph.rest.RestResult.readObject(RestResult.java:76)
at org.apache.hugegraph.api.traverser.KneighborAPI.post(KneighborAPI.java:63)
at org.apache.hugegraph.driver.TraverserManager.kneighbor(TraverserManager.java:471)
at com.qsdi.bigdata.multi.graph.hugegraph.api.HugeGraphApi.kneighbor(HugeGraphApi.java:595)
at com.qsdi.bigdata.multi.graph.api.graph.DefaultGraphBusinessApi.kneighbor(DefaultGraphBusinessApi.java:2116)
... 39 more
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.apache.hugegraph.structure.graph.Edge` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('S1:zhangsan>3>3>>S2:car2!4')
at [Source: (String)"{"kneighbor":["2:car1!2","2:car2!4"],"size":2,"paths":[{"objects":["1:zhangsan","2:car1!2"]},{"objects":["1:zhangsan","2:car2!4"]}],"vertices":[{"id":"2:car2!4","label":"car","type":"vertex","properties":{"age":4,"qsdi_task_id":"car2_task_id_test","qsdi_record_id":"test_record_id","name":"car2","qsdi_data_source":"1"}},{"id":"1:zhangsan","label":"people","type":"vertex","properties":{"age":55,"qsdi_record_id":"926106078160666624","name":"zhangsan","qsdi_data_source":"1"}},{"id":"2:car1!2","label"[truncated 225 chars]; line: 1, column: 667] (through reference chain: org.apache.hugegraph.structure.traverser.Kneighbor["edges"]->java.util.HashSet[0])
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1588)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1213)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromString(StdDeserializer.java:311)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1495)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:207)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:197)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:355)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)
at org.apache.hugegraph.rest.RestResult.readObject(RestResult.java:74)
... 43 more

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

graphs/graph_demo1/traversers/kneighbor

{
"countOnly": false,
"limit": 10000000,
"maxDepth": 1,
"pathWithEdge": false,
"steps": {
"direction": "BOTH",
"maxDegree": 1000,
"skipDegree": 0,
"vSteps": []
},
"withEdge": false,
"withPath": true,
"withVertex": true
}

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

_No response_

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with testKneighbor in GraphApiTest.java and reproduce the failure for withPath=true and false. Trace the response through DefaultGraphBusinessApi.java, HugeGraphApi.java, TraverserManager.java, and KneighborAPI.java, focusing on the edges field deserialization shown in the stack trace. Done means both withPath modes return successfully with compatible results.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api, backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.