Я использую 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)
Я вручную извлек информацию sym_data на основе идентификатора пакета 357997 и проверил из базы данных TAB Android, что соответствующие данные уникальны на стороне сервера и отсутствуют на стороне клиента. Однако ошибка повторяется.
Похоже, под 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
|
Серверная сторона прекращает получать пульс от TAB NODE с той же даты, что и записи в таблице sym_context.
Похоже, что при достижении общего порогового значения байтов вместо отправки оставшихся пакетов в последующем запросе на извлечение процесс фактически перезапускается после отображения сообщения об ошибке, что ему не удалось вставить строку в sym_context. Запись нарушает ограничение первичного ключа для столбца «имя».
Может кто-нибудь объяснить, когда достигнут порог исходящих байтов, каковы следующие шаги? Что удаленный узел пытается вставить в таблицу sym_context? Таблица должна быть пустой?
Любая подсказка высоко ценится, поскольку она находится на рабочем сервере и влияет на большое количество клиентов.
Я не сталкивался с такими проблемами на 3.7 и не уверен, как это отладить. Любая подсказка очень ценится.