【问题标题】:RethinkDB Changefeeds Lost ConnectionRethinkDB Changefeeds 失去连接
【发布时间】:2015-07-24 09:00:15
【问题描述】:

我在我的一个 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 如何管理与其数据库的连接。连接是否自动保持活动状态?丢了会重新建立吗?

【问题讨论】:

    标签: rethinkdb rethinkdb-python


    【解决方案1】:

    在这种情况下不应丢失连接,或者如果出现这种情况,您应该在驱动程序中收到错误,而不是 changefeed 静默丢弃更改。

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

    【讨论】:

    • 非常感谢您的回答。我在主题下添加了评论。我认为这是连接丢失,因为在我重新启动程序后它可能会再次发生更改。我记得上次我遇到这个问题时,我也刚刚重新启动程序,它就消失了。
    猜你喜欢
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2015-09-20
    • 2013-05-07
    • 2023-01-23
    • 2014-06-07
    相关资源
    最近更新 更多