raise NotValidConnectionException() nebula2.Exception.NotValidConnectionException

提问参考模版:

  • nebula 版本:(2.6.0)
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否为线上版本:Y
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述
    正式服报错如下,我看了自己的代码猜测是因为我从连接池中get_session没有释放,但是同样的代码以及环境在测试服无法复现问题。想问下可能的错误原因以及如何在测试环境中复现错误。
File "/usr/local/lib/python3.6/site-packages/nebula2/gclient/net/ConnectionPool.py", line 108, in get_session
    raise NotValidConnectionException()
nebula2.Exception.NotValidConnectionException
  • 相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)
    下面这段日志不知道有没有用
E0524 09:52:21.089066 32121 GraphSessionManager.cpp:206] Update sessions failed: Session not existed!
E0524 09:52:21.089408 32322 GraphSessionManager.cpp:230] Update sessions failed: Update sessions failed: Session not existed!

Python 客户端多少。

nebula2-python==2.6.0

和日志里说的一样 session 不存在了, 有可能是过期被清理了

if not hasattr(BaikeReply, 'pool'):
    BaikeReply.getNebulaCon()  # 构建nebula数据库连接池
self.session = BaikeReply.pool.get_session(settings.NEBULA_USER,
                                           settings.NEBULA_PASSWORD)

但是我在初始化对象的时候都会从pool里面get_session,是我代码写得不对吗

我在另外一个帖子中看到客户端 session 本来的设计是持久化使用,例如,我初始化5个session到类变量(列表)中,这个列表中的session也可能会过期被清理。

代码看起来是对的
session清理说的是session在服务端被清理, 你有保留meta服务的日志吗?

不知道是不是这一部分日志

I0513 00:50:36.538955 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0514 12:40:36.852540 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0515 22:10:37.145965 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0517 07:40:37.485409 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0518 12:00:15.251986 32083 RaftPart.cpp:1506] [Port: 9560, Space: 0, Part: 0] Stale log! Local lastLogId 1103230, lastLogTerm 63, lastLogIdSent 1103229, lastLogTermSent 63
I0518 17:10:37.865710 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0520 02:50:38.289508 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0521 12:20:38.747058 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0522 21:50:39.304714 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0524 05:30:39.878077 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0525 08:10:40.392490 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0526 09:40:40.943069 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0526 17:28:34.252873 32128 EventListener.h:19] Rocksdb start compaction column family: default because of LevelL0FilesNum, status: OK, compacted 4 files into 0, base level is 0, output level is 1
I0526 17:28:34.257653 32128 EventListener.h:29] Rocksdb compaction completed column family: default because of LevelL0FilesNum, status: OK, compacted 4 files into 1, base level is 0, output level is 1
I0527 11:10:41.564661 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0528 12:40:42.217046 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0529 14:10:42.982825 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1
I0530 15:40:43.915202 32094 FileBasedWal.cpp:673] [Port: 9560, Space: 0, Part: 0] Clean wals number 1

还有一条日志如下

W0524 09:52:21.088243 15368 SessionManagerProcessor.cpp:57] Session id `1653357640850124' not found

我在生产环境web服务里面没有关闭session,相当于来一条请求就会新建一个session,然后过了大概十天就会出现NotValidConnectionException() nebula2.Exception.NotValidConnectionException这个错误,但是测试环境里面我也同样没有关闭session,一直没有问题(请求数量更多)。这是我两个环境中数据库的配置问题吗?但是核对了一遍,看起来都一样。

把两个环境的配置文件贴上来看看吧

谢谢大佬,核对配置文件这种事情我自己来做就行了。我先尝试每次请求申请session用完就关闭,看这样能不能解决问题。

记得更新下进展

改完观察了一个星期,每次请求进来从连接池取session,用完释放,就没有报错了。至于测试环境为什么没有出现同样的问题,目前还没找到原因。

相关的配置都是一样的吗

和运维一条条对过了,配置文件里面,除了ip不同,其他都是一样的。

如此奇怪,会不会是配置问题?

和session相关的配置是不是只有这两条:

# Seconds before the idle connections are closed, 0 for never closed
--client_idle_timeout_secs=0
# Seconds before the idle sessions are expired, 0 for no expiration
--session_idle_timeout_secs=0

你设置了 session 永不过时的话,是不是和 session 最大连接数有关系。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。