达到字节阈值时在对称的传出批处理中违反约束

时间:2019-04-02 16:58:19

标签: android sqlite data-synchronization symmetricds

我正在使用Symmetricds版本3.9.0。 Linux服务器运行PostgreSQL10数据库,而Android客户端运行sqlite3。我最近从3.7版升级了

我们开始在对称日志中查看错误消息,其中一些传出批次因约束冲突而失败。错误消息:

 The outgoing batch <node id> failed: android.database.sqlite.SQLiteConstraintException: column name is not unique (code 19)

在其他情况下,我会收到如下错误消息:

The outgoing batch <nodeid>-357997 failed: android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: sym_context.name (code 1555)

我根据批次ID 357997手动提取了sym_data信息,并从Android TAB数据库验证了相应的数据在服务器端是唯一的,而在客户端不存在。但是,该错误在重复。

出现在sym_node_host下,对于报告有违规的节点,心跳信息也会停止更新。

远程节点上的sym_context表不为空。表格中有两行:

sqlite> select * from sym_context;
name                  |context_value|create_time        |last_update_time
sync_triggers_disabled|1            |2019-02-26 00:45:52|
sync_node_disabled    |36-44        |2019-02-26 00:45:52

|

与sym_context表中的条目相同的日期,服务器端停止从TAB NODE接收心跳。

看起来,当达到总字节阈值时,而不是在后续的拉取请求中发送剩余的批处理,该过程实际上在显示错误消息后显示为无法在sym_context中插入行,因此实际上重新启动。该条目违反了“名称”列的主键约束。

任何人都可以解释何时达到传出字节阈值时,下一步是什么?远程节点尝试将哪些内容插入sym_context表中?该表应该为空吗?

任何线索都受到赞赏,因为它在生产服务器中并影响大量客户。

我在3.7上没有遇到这样的问题,也不知道如何调试它。任何线索都值得赞赏。

0 个答案:

没有答案