RethinkDB Changefeeds 失去连接
RethinkDB Changefeeds Lost Connection
我在我的一个 RethinkDB table 中注册了 Changefeeds,它在过去 6 天里一直运行良好。数据每 2 分钟发布到我的 rethinkDB table,并且 Changefeeds 获取它们没有问题。但是昨天由于某种原因数据上传停止了大约一个小时。在那段时间里,Changefeeds 没有得到任何变化,这是意料之中的。问题是重新上传数据后,我仍然无法从rethinkDB中获取任何更改。它永远丢失了。当我重新启动我的程序时,问题就消失了。代码如下:
def get_rdb_connection():
"Helper function for get rdb connection"
try:
rdb_conn = rdb.connect(host='rethinkdb_ip', port=28015, db='test')
logger.info('connection established.')
return rdb_conn
except RqlDriverError:
logger.err("No rdb database connection could be established.")
return
conn = get_rdb_connection()
feed = rdb.table('skydata').changes(squash=False).run(conn)
for change in feed:
logger.info("change detected")
""" do some stuff """
输出:
change detected
change detected
change detected
...
change detected
然后输出就停止了。
我很确定“””中的代码做一些事情“””不会导致任何阻塞,因为它非常简单并且已经 运行 好几个星期了。并且 Supervisord 状态也显示它始终处于 运行 状态。
所以想知道有没有类似timeout的机制,如果一段时间没有变化,就停止监听了?
编辑:
我认为这可能是由于连接丢失造成的,因为一个多小时内没有任何变化,程序只是什么都不做。我不确定 rethinkdb 如何管理与其数据库的连接。连接是否自动保持活动状态?丢了还能重建吗?
在那种情况下不应丢失连接,或者如果丢失,您应该在驱动程序中收到错误,而不是 changefeed 静静地删除更改。
从表面上看,这听起来像是一个错误;我打开 https://github.com/rethinkdb/rethinkdb/issues/4572 来跟踪它。如果不是太麻烦,您能否在该问题的设置中添加更多详细信息? (OS 您正在使用什么,您的网络设置是什么,这个错误是否可以定期重现,等等)
我在我的一个 RethinkDB table 中注册了 Changefeeds,它在过去 6 天里一直运行良好。数据每 2 分钟发布到我的 rethinkDB table,并且 Changefeeds 获取它们没有问题。但是昨天由于某种原因数据上传停止了大约一个小时。在那段时间里,Changefeeds 没有得到任何变化,这是意料之中的。问题是重新上传数据后,我仍然无法从rethinkDB中获取任何更改。它永远丢失了。当我重新启动我的程序时,问题就消失了。代码如下:
def get_rdb_connection():
"Helper function for get rdb connection"
try:
rdb_conn = rdb.connect(host='rethinkdb_ip', port=28015, db='test')
logger.info('connection established.')
return rdb_conn
except RqlDriverError:
logger.err("No rdb database connection could be established.")
return
conn = get_rdb_connection()
feed = rdb.table('skydata').changes(squash=False).run(conn)
for change in feed:
logger.info("change detected")
""" do some stuff """
输出:
change detected
change detected
change detected
...
change detected
然后输出就停止了。
我很确定“””中的代码做一些事情“””不会导致任何阻塞,因为它非常简单并且已经 运行 好几个星期了。并且 Supervisord 状态也显示它始终处于 运行 状态。
所以想知道有没有类似timeout的机制,如果一段时间没有变化,就停止监听了?
编辑:
我认为这可能是由于连接丢失造成的,因为一个多小时内没有任何变化,程序只是什么都不做。我不确定 rethinkdb 如何管理与其数据库的连接。连接是否自动保持活动状态?丢了还能重建吗?
在那种情况下不应丢失连接,或者如果丢失,您应该在驱动程序中收到错误,而不是 changefeed 静静地删除更改。
从表面上看,这听起来像是一个错误;我打开 https://github.com/rethinkdb/rethinkdb/issues/4572 来跟踪它。如果不是太麻烦,您能否在该问题的设置中添加更多详细信息? (OS 您正在使用什么,您的网络设置是什么,这个错误是否可以定期重现,等等)