我正在使用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上没有遇到这样的问题,也不知道如何调试它。任何线索都值得赞赏。