连接在认证时出现了session无效的情况

下面的图片是session过期那个异常又出现了


这个是threadlocal封装了session 能告诉我们 问题出现在哪里了吗?现在很急

你这个错误码为-5在服务端就不可能返回这个,上面已经让你把今天的日志贴出来,但是你到现在都没有贴出今天的日志,麻烦你先把服务端今天的日志先贴出来。

你上面说有的时候session为null,你这代码就是我说的上面的问题,getSession 失败了,你的代码catch了异常之后只是打印然后又继续往下走,所以你的session1用的就是初始化为null的session,而不是getSession这个给你返回一个null对象。麻烦你自己看看代码。

你的日志并发数这么多,你框的打印不一定是你异常的连接的那个,你把你池init的代码发下,graphd的日志整个上传,不要截图一部分。首先从服务端代码,客户端做 authenticate 的时候,服务端就不可能返回错误码为-5,没有代码会返回这个,所以为什么你的客户端拿到这个错误,这个怎么都解释不通,除非你们自己改了服务端端代码。

nebula-graphd.rar (1.8 MB)

没有更改服务端代码,日志已上传,如上

  1. 初始化池的代码发下
  2. 到服务端的安装目录下面 执行 ./bin/nebula-graphd --version


初始化池


版本

我是让你贴你们代码初始化池的配置呀

image

我大概知道问题了,我看了服务端日志,服务端有打印 Session not found, id[2191],你们在一秒钟内大量申请session然后释放,2.0.0的java client的release是有问题的,没有把connection只为null,所以当你release的时候,然后你外面有可能接着用这个session的时候,但是这个session的持有的连接已经放回池里,所以你外部去用的时候也没有报错,但是池认为这个连接是释放的,所以分配给其他session,这样就会有多个session共用同个连接的时候,所以会出现你拿session的时候消息错掉了,auth拿到的是execute的消息,但是session已经是释放的,所以拿到的消息是invalid_session_id。所以你那边有可能是session调用release后还在接着用,所以出现这种情况了,当然客户端的这个版本也是有bug的,它应该报错的。

1 个赞

您好,请问一下,上述的问题什么时候会修复呢。有什么解决办法呢。

主线已经修过了,但是你们使用也有问题,因为你们使用了被release的session。假如你们更新新版本,你们的代码也要改的。假如你自己验证,那么你直接修改你依赖的客户端代码,在java-client的release函数里面最后加一行代码 connection == null

3 个赞

image
现在加上了 但是依然报这个错


认证的时候有时候报这个错

你这个是超时了,超时可能是服务端那边并发数太多处理不过来,我看你上面发的日志,你一秒钟很多请求,你可以减少下并发数。一个连接一直在切换space,你们写的代码也有问题,为啥不停的切spae。这样增加了graph消息处理,所以超时了。

大佬,也是第一次使用nebula,在demo里没有看到怎么在一个space里一直执行ngql, 所以在每个ngql前面加了一个这个,大佬可以告诉我正确使用space的方式吗