RethinkDB更改丢失连接

时间:2015-07-23 18:41:48

标签: rethinkdb rethinkdb-python

我在一个RethinkDB表中注册了Changefeeds,并且它在过去的6天里一直运行良好。数据每2分钟发布到我的rethinkDB表中,并且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状态也表明它始终处于运行状态。

所以我想知道是否有类似超时的机制,如果某段时间内没有变化,它会停止收听吗?

修改

我认为可能是由于连接丢失,因为超过一个小时没有变化,程序只是无所事事。我不确定rethinkdb如何管理与其数据库的连接。连接是否自动保持活动状态?如果丢失会重新建立吗?

1 个答案:

答案 0 :(得分:1)

在这种情况下不应该丢失连接,或者如果是,您应该在驱动程序中收到错误,而不是以默认方式删除更改。

从表面上看,这听起来像个臭虫;我打开https://github.com/rethinkdb/rethinkdb/issues/4572来跟踪它。如果不是太麻烦,您可以在此问题上添加更多有关设置的详细信息吗? (您正在使用什么操作系统,您的网络设置是什么,此错误是否可以为您定期重现等)。