分布式中的OrientDB不断获取ConcurrentModificationException

时间:2016-09-13 14:56:58

标签: orientdb pyorient

我正在使用orientdb社区版2.2.9和pyorient的二进制序列化器(在开发分支中)。

我在AWS上运行了3个节点。

我只使用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 个答案:

答案 0 :(得分:0)

将“writeQuorum”设置为1可以解决此问题。此外,将“executionMode”作为“异步”运行也会产生问题。

此外,从我的配置中删除以下内容也可能有助于解决此问题:

....
<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
    <parameters>
        ....
        <parameter value="com.orientechnologies.orient.server.distributed.conflict.ODefaultReplicationConflictResolver" name="conflict.resolver.impl"/>
        ....
    </parameters>
</handler>
...

这是默认的 - distributed-db-config.json,它让我有所帮助。

{
  "autoDeploy": true,
  "readQuorum": 1,
  "writeQuorum": 1,
  "executionMode": "synchronous",
  "readYourWrites": true,
  "servers": {
    "*": "master"
  },
  "clusters": {
    "internal": {
    },
    "*": {
     "servers": ["<NEW_NODE>"]
    }
  }
}

我希望它有所帮助。