首页 > 解决方案 > JanusGraphException:由于持久性期间出现异常而无法提交事务原因:PermanentLockingException:本地锁争用

问题描述

我有这样的高级代码。

MethodXyz() {

updateVertex(A, props1)
commit
// some other code

updateVertex(A, props2)
commit

// do something else - long running
}

这个方法是从 10+ 个不同的线程针对不同的顶点调用的,具体是通过 Java 线程 ExecutorSerevice 用 10+ 个线程初始化的

我在上述方法的第二次提交中从 4-5 个线程中随机出现 10 个以上的异常,如下所示。

我不对顶点属性使用任何唯一性约束

我确实已将顶点属性“名称”定义为唯一的字符串数据类型(应用程序代码保证了这种唯一性,而在 Janusgraph 中创建属性键时不使用任何唯一约束)

但是我使用此属性键“名称”构建索引

使用默认模式 make - 未定义显式模式

我试图弄清楚为什么即使不同的线程更新完全不同的顶点(互斥)也会引发永久锁定异常,以及为什么在没有定义为唯一的属性键以使用任何 janusgrpah 锁时锁定异常。

org.janusgraph.core.JanusGraphException: Could not commit transaction due to exception during persistence**
    at org.janusgraph.graphdb.transaction.StandardJanusGraphTx.commit(StandardJanusGraphTx.java:1385)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at org.janusgraph.graphdb.tinkerpop.JanusGraphBlueprintsGraph$GraphTransaction.doCommit(JanusGraphBlueprintsGraph.java:272)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at org.apache.tinkerpop.gremlin.structure.util.AbstractTransaction.commit(AbstractTransaction.java:104)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at com.fujitsu.fnc.mlpce.tetopology.impl.GraphDBService.commit(GraphDBService.java:509)[119:com.fujitsu.fnc.mlpce.tetopology.impl:5.2.0.SNAPSHOT]


Caused by: org.janusgraph.core.JanusGraphException: Unexpected exception
    at org.janusgraph.graphdb.database.StandardJanusGraph.commit(StandardJanusGraph.java:806)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at org.janusgraph.graphdb.transaction.StandardJanusGraphTx.commit(StandardJanusGraphTx.java:1374)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    ... 17 more
Caused by: org.janusgraph.diskstorage.locking.PermanentLockingException: Local lock contention**
    at org.janusgraph.diskstorage.locking.AbstractLocker.writeLock(AbstractLocker.java:327)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at org.janusgraph.diskstorage.locking.consistentkey.ExpectedValueCheckingStore.acquireLock(ExpectedValueCheckingStore.java:103)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at org.janusgraph.diskstorage.keycolumnvalue.KCVSProxy.acquireLock(KCVSProxy.java:52)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at org.janusgraph.diskstorage.BackendTransaction.acquireIndexLock(BackendTransaction.java:256)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at org.janusgraph.graphdb.database.StandardJanusGraph.prepareCommit(StandardJanusGraph.java:572)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    at org.janusgraph.graphdb.database.StandardJanusGraph.commit(StandardJanusGraph.java:702)[488:org.janusgraph.janusgraph-core:5.2.0.SNAPSHOT]
    ... 18 more

带有 cassandra 后端的 jansugraph 0.2.0

标签: cassandratinkerpopjanusgraphtinkerpop3

解决方案


推荐阅读