java: package org.apache.tinkerpop.shaded.jackson.core does not exist

While trying to mvn clean install with jdk11, I ran into the above error using the master branch. Any idea?
13 Replies
spmallette
spmallette9mo ago
what happens if you do mvn clean install -pl gremlin-shaded first and then try to build the whole thing? you shouldn't have to do this of course but i'm not sure what might be wrong.
frank
frankOP9mo ago
actually mvn clean intall works. But importing the project into intellij and then running any test fails at
java: package org.apache.tinkerpop.shaded.jackson.core does not exist
java: package org.apache.tinkerpop.shaded.jackson.core does not exist
frank
frankOP9mo ago
after following the step above to configure intellj, I ran into the following when running a Gherkin test:
Step failed
com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for org.apache.tinkerpop.gremlin.features.World was bound.
while locating org.apache.tinkerpop.gremlin.features.World
for the 1st parameter of org.apache.tinkerpop.gremlin.features.StepDefinition.<init>(StepDefinition.java:248)
while locating org.apache.tinkerpop.gremlin.features.StepDefinition
Step failed
com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for org.apache.tinkerpop.gremlin.features.World was bound.
while locating org.apache.tinkerpop.gremlin.features.World
for the 1st parameter of org.apache.tinkerpop.gremlin.features.StepDefinition.<init>(StepDefinition.java:248)
while locating org.apache.tinkerpop.gremlin.features.StepDefinition
Any idea?
spmallette
spmallette9mo ago
like all gremlin test suite tests they cant be run directly because they need a graph implementation to run. in the TibkerPop code base you can use TinkerGraph to be that implementation. run TinkerGraphFeatureTest in tinkergraph-gremlin to run those gherkin tests with TibkerGraph
frank
frankOP9mo ago
If I have an implementation in Rust, do you think there is a way I can inject the dependency into the current Gherkin test suite for Gremlin? I am thinking about whether I can reuse the parser and query plan optimizer of TinkerPop (if there is any) for the execution engine I am working on TinkerGraph sounds like an execution engine for Gremlin? Is there a way to use it in a standalone way?
spmallette
spmallette9mo ago
im not sure what you mean. what is the nature of your rust implementation?
frank
frankOP9mo ago
It started as a general purpose matching engine like what .match() can do in Gremlin Since it has the Graph API to traverse the graph and a postprocessing part to process tables, I expects it can cover most of the Gremlin features so I am thinking about whether people can reuse the parser and query optimizer from Gremlin project so I can use them to build a Gremlin frontend
spmallette
spmallette9mo ago
if i understand correctly you have written a Gremlin execution engine in Rust. I presume it uses the antlr grammar in gremlin-language in some way? in any event, i'm not sure how you would use much of what we have in TinkerPop given that all our code is JVM oriented for the Gremlin query processing, graph API interfaces and the default reference implementation of TinkerGraph. The antlr grammar is something i could see you using and I could see you using the gherkin feature tests, which i guess is what you are trying to do. you'd need to rig up y our own classes for executing those gherkin tests over your Rust implementation and do so natively in Rust. It's not too hard to do I don't think - note we've done it for all our non-JVM implementations so doing it for Rust shouldn't be too hard but it also isn't a small bit of work you could do in a few hours. i could probably say more if i'm on the right track with what you are hoping to accomplish but i'll let you confirm before i type too much more in case i'm way off
frank
frankOP9mo ago
If the physical plan can be serialized and sent over, the front end parser and the query plan optimizer can be in JVM. We just need to send the serialized physical plan, say a Json file to represent the physical plan , over for the execution engine I think we are on the same page If what I think is doable, I dont need to start from the antlr grammar If the dependency injection part can be handled properly so that the non-JVM execution engine can be injected into the existing test suite, I can imagine we can even reuse the gherkins test suite in JVM
spmallette
spmallette9mo ago
i think you're saying that you would want to send a Gremlin string to Gremlin Server and get back a serialized representation of it. i suppose that is possible by sending a script and returning Bytecode as GraphSON. that is an extremely narrow use case as i dont think there would be any other value there aside from this case, i.e. some sort of language interop with a different processing engine off the JVM. Of course, that only gets you Gremlin parsed into a JSON form as it was written. At that point, no optimization strategies are applied and in any event those strategies would include ones specific to particular graph systems which likely would not apply to whatever graph system you were executing on (e.g. the inclusion of a TinkerGraphStep, replacing GraphStep won't have any meaning in your Rust environment).
i think that you would need some additional changes for any of this to work as you're thinking and it does conflict a bit with ongoing thinking around the support of Bytecode as a mechanism for sending traversals to the server (it's primary purpose). Anyway, here's what Bytecode looks like as GraphSON: https://tinkerpop.apache.org/docs/current/dev/io/#_bytecode_2
frank
frankOP9mo ago
sending a script and returning Bytecode as GraphSON
The GraphSON seems to be a physical plan an execution engine can interpret? From your link, I do not seem to see how such format can represent the physical plan of a query like
g.V().match(__.as("a").out().as("b")).select("b").by(T.id)
g.V().match(__.as("a").out().as("b")).select("b").by(T.id)
I do think the physical plan can be represented in JSON though.
value
From the implementer perspective, the value is that TinkerPop can stay as the de-facto standard parser and query plan optimizer for Gremlin and provide the Gherkin test suite for correctness verification. It does not seem meaningful to reinvent these nice things. There are some implementors out there who want to support Gremlin but cannot use the reference implementation TinkerGraph for various reasons, say, the need of going distributed, supporting mix of OLAP and OLTP workload (HTAP), new hardware optimization like better networking, storage and compute hardwares. These are not things we can add to a JVM implementation
spmallette
spmallette9mo ago
when you run some Gremlin through the the ANTLR parser it simply constructs a Traversal object by mapping to the methods in of the same name in GraphTraversalSouce and GraphTraversal. In doing that the Traversal maintains a Bytecode representation of those steps that are called. When the Traversal is executed, various TraversalStrategy objects are applied to the Traversal to rewrite in in a more optimal way to improve performance, like g.V().out().count() would become g.V().outE().count(). It is through TraversalStrategy implementations that indices and other graph implementation specific optimizations can be included as part of the execution. There's not really a physical plan to see beyond what is provided by the construction of the traversal after parsing. I shared Bytecode because that's likely the closest you could get as a portable version of a Traversal as a way to reuse JVM parsing.
Want results from more Discord servers?
Add your server