Java 客户端执行StorageClientExample失败

你代码中端口号9779写错了,要用metad的端口
一般报错信息为 method name not found 就是端口号写错,服务连接错误。帖子

改成metad端口后,报错

ERROR [pool-1-thread-1] - get storage client error, 
java.util.NoSuchElementException: Unable to activate object
	at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:400)
	at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:277)
	at com.vesoft.nebula.client.storage.StorageConnPool.getStorageConnection(StorageConnPool.java:42)
	at com.vesoft.nebula.client.storage.scan.ScanVertexResultIterator.lambda$next$0(ScanVertexResultIterator.java:81)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: com.facebook.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused)
	at com.facebook.thrift.transport.TSocket.open(TSocket.java:204)
	at com.vesoft.nebula.client.storage.GraphStorageConnection.open(GraphStorageConnection.java:40)
	at com.vesoft.nebula.client.storage.StorageConnPoolFactory.activateObject(StorageConnPoolFactory.java:59)
	at com.vesoft.nebula.client.storage.StorageConnPoolFactory.activateObject(StorageConnPoolFactory.java:16)
	at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:391)
	... 8 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
	at java.net.Socket.connect(Socket.java:606)
	at com.facebook.thrift.transport.TSocket.open(TSocket.java:199)
	... 12 more
ERROR [main] - scan error, 
com.vesoft.nebula.client.meta.exception.ExecuteFailedException: Execute failed: no parts succeed, error message: Unable to activate object
	at com.vesoft.nebula.client.storage.scan.ScanResultIterator.throwExceptions(ScanResultIterator.java:99)
	at com.vesoft.nebula.client.storage.scan.ScanVertexResultIterator.next(ScanVertexResultIterator.java:142)
	at com.vesoft.nebula.examples.StorageClientExample.scanVertex(StorageClientExample.java:54)
	at com.vesoft.nebula.examples.StorageClientExample.main(StorageClientExample.java:36)

Process finished with exit code 1

Nebula 查询

(root@nebula) [(none)]> show hosts
+-------------+------+----------+--------------+---------------------+------------------------+
| Host        | Port | Status   | Leader count | Leader distribution | Partition distribution |
+-------------+------+----------+--------------+---------------------+------------------------+
| "127.0.0.1" | 9779 | "ONLINE" | 110          | "nba:10, test:100"  | "nba:10, test:100"     |
+-------------+------+----------+--------------+---------------------+------------------------+
| "Total"     |      |          | 110          | "nba:10, test:100"  | "nba:10, test:100"     |
+-------------+------+----------+--------------+---------------------+------------------------+
Got 2 rows (time spent 1047/35032 us)

Tue, 02 Mar 2021 06:47:47 UTC

(root@nebula) [(none)]> use test
Execution succeeded (time spent 875/28327 us)

Tue, 02 Mar 2021 08:19:12 UTC

(root@nebula) [test]> show tags
+----------+
| Name     |
+----------+
| "person" |
+----------+
Got 1 rows (time spent 866/28583 us)

Tue, 02 Mar 2021 08:19:15 UTC

(root@nebula) [test]>

是不是java client 不支持 2.0-rc1的版本?

2.0.0-rc1版本的Nebula服务,对应着v2.0.0-rc分支的客户端代码,你自己源码打的是2.0.0-SNAPSHOT版本:

版本匹配:

更新client依赖版本后,还是一样的错误 @nicole

rc1后期的Nebula服务,有数据结构和接口参数类型的变动,master分支中的client与当前最新的rc1的服务是匹配的,与rc1的rpm包是不兼容的(因为rpm是之前发布的)。

我看java-client v2.0.0-rc分支中,是对应你安装的Nebula服务的。你确认下连接的Nebula 服务的版本

Nebula版本

nebula-graphd version 2.0.0-rc1, Git: 5713b46, Build Time: Jan  6 2021 15:31:08
This source code is licensed under Apache 2.0 License, attached with Common Clause Condition 1.0.

Java Client版本

2.0.0-rc1.20210129

你用java的graph client执行下fetch prop on 语句看下结果吧。可以直接在examples中的GraphClientExample中增加执行语句:“fetch prop on tag id”

执行正常,无报错

console 执行结果

(root@nebula) [test]> fetch prop on person 'Bob'
+----------+-------------+------------+
| VertexID | person.name | person.age |
+----------+-------------+------------+
| "Bob"    | "Bob"       | 10         |
+----------+-------------+------------+
Got 1 rows (time spent 4250/4962 us)

Wed, 03 Mar 2021 02:04:56 UTC

你的问题跟这个帖子是一样的,是服务端和客户端版本不一致导致的。 但看你使用的版本是一致的,我们这边还需要部署下跟你一样的环境看能否复现。

请帮忙试一下,多谢

@nicole 有结果了吗?

在下面这种配置下复现了:

  1. Nebula各项服务中的addrs 配置的ip是127.0.0.1

问题原因:
java client所连接的Storaged服务的地址是通过metad服务返回的,如果你配置的是127.0.0.1,那么metad返回给你的storaged服务地址就是127.0.0.1:9779。
你的服务是部署在阿里云机器上的,你是无法访问这个地址的。

解决方法:
修改nebula各项服务的ip信息,不要用127.0.0.1

@nicole 各项服务的具体配置是在什么位置?

我看了配置文件,这些配置虽然存在,但都是注释掉的

还是说Nebula默认是127.0.0.1,配置的话要打开注释,改成真实IP?

测试更新上述配置IP后,Nebula无法启动

nebula-metad.conf配置文件

nebula配置文件里 # 开头的是注释, – 不代表注释.

是我弄错了,改了配置文件中的IP后,是否要重新创建space?现在执行fetch prop on person 'Bob'找不到storage

应该得重新弄, 改了配置之后, 之前storage 再 meta 里保存的好多信息就都废了.

可以了,结果出来了,多谢帮助! @nicole @liuyu85cn

2 个赞

这个是怎么解决的呀

你参考下上面 Nicole 和 Liuyu 说的方法,如果不行的话,你可以重新开一个帖子来讲下你遇到的具体问题哈,因为这个原帖是 3 个月之前的帖子,为了避免打扰原帖所有人(他会收到通知),这个帖子先关闭了