JanusGraph / JanusGraph/janusgraph

Option storage.cql.protocol-version is broken

Open
#4,583 0 comments 0 reactions 0 assignees View on GitHub
kind/bug/possible
Dominant language
Java
Stars
5.8k
Forks
1.2k
Avg merge
13h 53m
Merged PRs (30d)
6

Description

The option `storage.cql.protocol-version` is broken if set to any other value than 0.

The option is defined as an integer here: https://github.com/JanusGraph/janusgraph/blob/master/janusgraph-cql/src/main/java/org/janusgraph/diskstorage/cql/CQLConfigOptions.java#L47

And then mapped to DataStax option "advanced.protocol.version" here: https://github.com/JanusGraph/janusgraph/blob/master/janusgraph-cql/src/main/java/org/janusgraph/diskstorage/cql/builder/CQLProgrammaticConfigurationLoaderBuilder.java#L94

Except this option is supposed to be a string: https://javadoc.io/static/com.datastax.oss/java-driver-core/4.17.0/com/datastax/oss/driver/api/core/config/DefaultDriverOption.html#PROTOCOL_VERSION

When used, the option crashes JanusGraph initialization:
```
09:08:11 INFO com.datastax.oss.driver.internal.core.DefaultMavenCoordinates.buildFromResourceAndPrint - DataStax Java driver for Apache Cassandra(R) (com.datastax.oss:java-driver-core) version 4.17.0
09:08:11 INFO com.datastax.oss.driver.internal.core.cql.CqlPrepareAsyncProcessor.lambda$new$0 - Adding handler to invalidate cached prepared statements on type changes
09:08:11 INFO com.datastax.oss.driver.internal.core.time.Clock.getInstance - Using native clock for microsecond precision
09:08:11 ERROR org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor. - Could not invoke constructor on class org.janusgraph.graphdb.management.JanusGraphManager (defined by the 'graphManager' setting) with one argument of class Settings
09:08:11 ERROR org.janusgraph.graphdb.server.JanusGraphServer.lambda$main$0 - JanusGraph Server was unable to start and will now begin shutdown
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.(ServerGremlinExecutor.java:97) ~[gremlin-server-3.7.0.jar:3.7.0]
at org.apache.tinkerpop.gremlin.server.GremlinServer.(GremlinServer.java:127) ~[gremlin-server-3.7.0.jar:3.7.0]
at org.apache.tinkerpop.gremlin.server.GremlinServer.(GremlinServer.java:90) ~[gremlin-server-3.7.0.jar:3.7.0]
at org.janusgraph.graphdb.server.JanusGraphServer.start(JanusGraphServer.java:85) ~[janusgraph-server-1.0.0.jar:?]
at org.janusgraph.graphdb.server.JanusGraphServer.main(JanusGraphServer.java:53) [janusgraph-server-1.0.0.jar:?]
Caused by: java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?]
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.(ServerGremlinExecutor.java:86) ~[gremlin-server-3.7.0.jar:3.7.0]
... 4 more
Caused by: java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.cql.CQLStoreManager
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:79) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:548) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:509) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.graphdb.configuration.builder.GraphDatabaseConfigurationBuilder.build(GraphDatabaseConfigurationBuilder.java:64) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.core.JanusGraphFactory.lambda$open$0(JanusGraphFactory.java:165) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.graphdb.management.JanusGraphManager.openGraph(JanusGraphManager.java:239) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:165) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:115) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.graphdb.management.JanusGraphManager.lambda$new$0(JanusGraphManager.java:73) ~[janusgraph-core-1.0.0.jar:?]
at java.util.LinkedHashMap.forEach(Unknown Source) ~[?:?]
at org.janusgraph.graphdb.management.JanusGraphManager.(JanusGraphManager.java:72) ~[janusgraph-core-1.0.0.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?]
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.(ServerGremlinExecutor.java:86) ~[gremlin-server-3.7.0.jar:3.7.0]
... 4 more
Caused by: java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?]
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:73) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:548) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:509) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.graphdb.configuration.builder.GraphDatabaseConfigurationBuilder.build(GraphDatabaseConfigurationBuilder.java:64) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.core.JanusGraphFactory.lambda$open$0(JanusGraphFactory.java:165) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.graphdb.management.JanusGraphManager.openGraph(JanusGraphManager.java:239) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:165) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:115) ~[janusgraph-core-1.0.0.jar:?]
at org.janusgraph.graphdb.management.JanusGraphManager.lambda$new$0(JanusGraphManager.java:73) ~[janusgraph-core-1.0.0.jar:?]
at java.util.LinkedHashMap.forEach(Unknown Source) ~[?:?]
at org.janusgraph.graphdb.management.JanusGraphManager.(JanusGraphManager.java:72) ~[janusgraph-core-1.0.0.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?]
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.(ServerGremlinExecutor.java:86) ~[gremlin-server-3.7.0.jar:3.7.0]
... 4 more
Caused by: java.lang.IllegalArgumentException: Unknown protocol version name: 3
at com.datastax.oss.driver.internal.core.DefaultProtocolVersionRegistry.fromName(DefaultProtocolVersionRegistry.java:81) ~[java-driver-core-4.17.0.jar:?]
at com.datastax.oss.driver.internal.core.channel.ChannelFactory.(ChannelFactory.java:114) ~[java-driver-core-4.17.0.jar:?]
at com.datastax.oss.driver.internal.core.context.DefaultDriverContext.buildChannelFactory(DefaultDriverContext.java:488) ~[java-driver-core-4.17.0.jar:?]
at com.datastax.oss.driver.internal.core.util.concurrent.LazyReference.get(LazyReference.java:55) ~[java-driver-core-4.17.0.jar:?]
at com.datastax.oss.driver.internal.core.context.DefaultDriverContext.getChannelFactory(DefaultDriverContext.java:869) ~[java-driver-core-4.17.0.jar:?]
at com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.connect(ControlConnection.java:362) ~[java-driver-core-4.17.0.jar:?]
at com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.init(ControlConnection.java:303) ~[java-driver-core-4.17.0.jar:?]
at com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.access$1100(ControlConnection.java:243) ~[java-driver-core-4.17.0.jar:?]
at com.datastax.oss.driver.internal.core.control.ControlConnection.lambda$init$0(ControlConnection.java:122) ~[java-driver-core-4.17.0.jar:?]
at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.concurrent.PromiseTask.run(PromiseTask.java:106) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.DefaultEventLoop.run(DefaultEventLoop.java:54) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at java.lang.Thread.run(Unknown Source) ~[?:?]
```

This is using JanusGraph docker image 1.0.0, with the CQL backend.

Contributor guide

Open the contributing guide

Research direction

Start with CQLConfigOptions.java and CQLProgrammaticConfigurationLoaderBuilder.java, then compare the configured value with the DataStax driver's protocol option. Verify the CQL backend initializes successfully when storage.cql.protocol-version is set to a nonzero value, including the reported version 3 case.

Written by the indexing model from the issue text.

Assessment

Tech stack
cassandra, java
Domain
database
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.