OrientDB в распределенном продолжает получать ConcurrentModificationException
Я использую orientdb Community Edition 2.2.9 с двоичным сериализатором Pyorient (в ветке разработки).
У меня есть 3 узла, работающих на AWS.
Я использую только 1 узел в качестве мастера для записи / чтения и другие узлы для чтения и репликации.
Я настроил узлы со следующим:
<properties>
<entry value="2147483647" name="ridBag.embeddedToSbtreeBonsaiThreshold"/>
<entry value="-1" name="index.embeddedToSbtreeBonsaiThreshold"/>
</properties>
Я не использую Java, поэтому примеры MVCC в документации мне не очень помогают.
Я также не использую транзакции и запускаю сервер со следующими параметрами:
java -Dcache.level1.enabled=false -Ddb.mvcc=false
Я прочитал в документации, что вы больше не можете отключить mvcc, поэтому я предполагаю, что настройка mvcc бесполезна.
Я использую rabbitmq и сельдерей, чтобы поставить в очередь задачи. При запуске orientDB в обычном режиме, когда я получаю ошибку "ConcurrentModificationException", сельдерей просто повторяет эту задачу, и это обычно успешно выполняется. При работе в распределенном режиме эта задача не выполняется, потому что версия вершин никогда не совпадает.
Неважно, что я делаю, я получаю "ConcurrentModificationException".
В конфиге я вижу, что mvcc все еще включен.
Я думал, что перепробовал все предложенную документацию, но все нюансы работы в распределенном режиме разбросаны по всей документации, а не в одном месте. Так легко что-то пропустить:(
Как я могу избежать этой проблемы?
1 ответ
Установка "writeQuorum" в 1 исправила эту проблему для меня. Кроме того, запуск "executeMode" как "асинхронный" также создает проблемы.
Кроме того, удаление следующего из моей конфигурации также, возможно, помогло с этой проблемой:
....
<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
<parameters>
....
<parameter value="com.orientechnologies.orient.server.distributed.conflict.ODefaultReplicationConflictResolver" name="conflict.resolver.impl"/>
....
</parameters>
</handler>
...
Вот стандартный-распределенный-db-config.json, который заставил меня работать.
{
"autoDeploy": true,
"readQuorum": 1,
"writeQuorum": 1,
"executionMode": "synchronous",
"readYourWrites": true,
"servers": {
"*": "master"
},
"clusters": {
"internal": {
},
"*": {
"servers": ["<NEW_NODE>"]
}
}
}
Надеюсь, это кому-нибудь поможет.