cassandra - 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
解决方案
推荐阅读
- discord - 我最近使用 switch case 重写了我的机器人,现在它不响应命令
- reactjs - 将 Next Js 应用程序部署到 Firebase 托管
- android - 从 vs 代码中制作 APK
- java - Spring MVC @RequestBody 不适用于 JSONObject
- reactjs - React Redux,仅在第一页加载时从 API 加载数据。加载数据后渲染组件
- kubernetes - 在单节点集群的情况下,主节点和工作节点是同一个节点吗?
- python - python - 美丽的汤链接解析不起作用
- java - 从通用数组列表中查找最大值
- javascript - 如何关闭由结帐脚本打开的弹出窗口
- javascript - 我可以从 Realm React Native 中的嵌套对象架构上的关系方法访问具有循环引用的属性对象吗