Консоль Tinkerpop Gremlin: java.lang.NoSuchMethodError: org.apache.tinkerpop.gremlin.driver.RequestOptions $ Builder.userAgent

В моем последнем сообщении на 403 Forbidden error for Gremlin to AWS Neptune, Я смог успешно подключиться к моей базе данных Neptune Cluster DB через мою консоль Tinkerpop Gremlin v 3.4.3, которая была установлена ​​в моем экземпляре EC2, как v 3.4.1, предложенная на https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connected-gremlin-console.html у меня не работал.


         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> :remote connect tinkerpop.server conf/neptune-remote.yaml
==>Configured <my neptune>.cluster-cm<cluster id>.ap-southeast-2.neptune.amazonaws.com/<private ip>:8182
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [<my neptune>.cluster-cm<cluster id>.ap-southeast-2.neptune.amazonaws.com/<private ip>:8182] - type ':remote console' to return to local mode

Однако я получаю ошибку NoSuchMethodError для всех команд Gremlin (g.), Которые я использовал на консоли.

e.g: g.V()

gremlin> g.V()
org.apache.tinkerpop.gremlin.driver.RequestOptions$Builder.userAgent(Ljava/lang/String;)Lorg/apache/tinkerpop/gremlin/driver/RequestOptions$Builder;
Type ':help' or ':h' for help.
Display stack trace? [yN]Y
java.lang.NoSuchMethodError: org.apache.tinkerpop.gremlin.driver.RequestOptions$Builder.userAgent(Ljava/lang/String;)Lorg/apache/tinkerpop/gremlin/driver/RequestOptions$Builder;
    at org.apache.tinkerpop.gremlin.console.jsr223.DriverRemoteAcceptor.send(DriverRemoteAcceptor.java:214)
    at org.apache.tinkerpop.gremlin.console.jsr223.DriverRemoteAcceptor.submit(DriverRemoteAcceptor.java:168)
    at org.apache.tinkerpop.gremlin.console.GremlinGroovysh.execute(GremlinGroovysh.groovy:110)
...

g.addV ('человек'). property ('имя', 'Джастин')

gremlin> g.addV('person').property('name', 'justin')
org.apache.tinkerpop.gremlin.driver.RequestOptions$Builder.userAgent(Ljava/lang/String;)Lorg/apache/tinkerpop/gremlin/driver/RequestOptions$Builder;
Type ':help' or ':h' for help.
Display stack trace? [yN]Y
java.lang.NoSuchMethodError: org.apache.tinkerpop.gremlin.driver.RequestOptions$Builder.userAgent(Ljava/lang/String;)Lorg/apache/tinkerpop/gremlin/driver/RequestOptions$Builder;
    at org.apache.tinkerpop.gremlin.console.jsr223.DriverRemoteAcceptor.send(DriverRemoteAcceptor.java:214)
    at org.apache.tinkerpop.gremlin.console.jsr223.DriverRemoteAcceptor.submit(DriverRemoteAcceptor.java:168)
    at org.apache.tinkerpop.gremlin.console.GremlinGroovysh.execute(GremlinGroovysh.groovy:110)
....

Я также пробовал последнюю версию Apache Tinkerpop Gremlin Console 3.4.6, та же ошибка, что и у меня ...

Спасибо


person Yifan Jiang    schedule 15.05.2020    source источник
comment
Вы добавили SigV4WebSocketChannelizer в свой файл YAML?   -  person Kelvin Lawrence    schedule 18.05.2020


Ответы (2)


Я думаю, что вам не хватает шага, это взять временные учетные данные, предоставленные вашей ролью IAM, назначенной вашему экземпляру EC2, и поместить их в цепочку поставщиков учетных данных по умолчанию, чтобы они были видны SigV4Channelizer, используемому консолью Gremlin. Общий обзор этого процесса можно увидеть здесь: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

Более подробный способ решения этой проблемы для Нептуна можно найти здесь: https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-Contemporary-credentials.html См. раздел« Настройка Amazon EC2 для аутентификации Neptune IAM » .

person Taylor Riggan    schedule 18.05.2020
comment
Привет, Тейлор, я попытался использовать aws configure для установки учетных данных ec2 по умолчанию, а также попытался экспортировать переменные среды AWS_xxx. Я даже пробовал использовать два типа соединений. 1) в кластер Neptune с включенной IAM DB .. (с SigV4WebSocketChannelizer в файле YAML). 2) в кластер Neptune без включения БД IAM (с trustCertChainFile: SFSRootCAG2.pem в файле YAML). К сожалению, такая же ошибка для обоих способов подключения - person Yifan Jiang; 20.05.2020
comment
Я использую Neptune 1.0.2.2.R2 Engine и консоль Gremlin 3.4.6 - person Yifan Jiang; 20.05.2020
comment
Очень странно. Какую версию Java вы используете? Убедитесь, что вы используете Java 8. Также обратите внимание, что trustCertChainFile потребуется в любом случае (независимо от того, включен IAM или нет). Файл pem используется для проверки сертификата SSL. SigV4WebSocketChannelizer потребуется, только если IAM включен. - person Taylor Riggan; 20.05.2020
comment
Мне не удалось воссоздать эту проблему. Можете ли вы указать не только версию Java, которую вы используете, но и версию ОС, которую вы используете в своем экземпляре EC2? Я использую Amazon Linux 2 (последняя сборка) с Java 8 и следующий файл yaml: hosts: [cluster.cluster-xxxxxxxx.us-west-2.neptune.amazonaws.com] порт: 8182 connectionPool: {enableSsl: true , trustCertChainFile: SFSRootCAG2.pem} сериализатор: {className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0} Я удалил: config: {serializeResultToString: true} для тестирования, и он работает в обоих направлениях. - person Taylor Riggan; 20.05.2020
comment
У меня такая же настройка файла yaml, что и у вас, и я использую openjdk версии 1.8.0_252 и последнюю версию Amazon Linux 2 AMI (HVM), тип тома SSD - ami-0970010f37c4f9c8d (64-разрядный x86) на моем экземпляре ec2. - person Yifan Jiang; 21.05.2020
comment
Ой! Я просто попытался использовать консоль Gremlin 3.4.1, и она работает, как ожидалось ... Я думаю, это из-за проблемы с несовместимой версией. Я использовал консоль Gremlin 3.4.6 - person Yifan Jiang; 21.05.2020

Я просто попытался использовать консоль Gremlin 3.4.1, и она работает, как ожидалось ... Я думаю, это из-за проблемы с несовместимой версией. Я использовал консоль Gremlin 3.4.6

person Yifan Jiang    schedule 21.05.2020
comment
Рад, что у тебя все получилось. Хотя это очень странно, поскольку мы тестировали 3.4.6, и она отлично работает. Поэтому мне интересно, были ли в вашей установке 3.4.6 другие параметры конфигурации, которые могли вызывать некоторые проблемы. Но да, в настоящее время Neptune поддерживает до 3.4.3, но до сих пор мы не видели никаких проблем с консолью 3.4.6. - person Taylor Riggan; 21.05.2020