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>"]
    }
  }
}

Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам