У меня высокоуровневый код, подобный этому.
MethodXyz() {
updateVertex(A, props1)
commit
// some other code
updateVertex(A, props2)
commit
// do something else - long running
}
Этот метод вызывается из 10+ разных потоков для разных вершин, в частности через Java поток ExecutorSerevice, инициализированный с 10+ потоками
Я получаю исключение, как показано ниже, во 2-м коммите в вышеприведенном методе из 4-5 потоков случайным образом из 10+ все время.
Я не использую никаких ограничений уникальности для свойства вершины
Я определил свойство вершины "name" как тип данных String, который c уникален (код приложения гарантирует эту уникальность без использования каких-либо уникальных ограничений при создании ключа свойства в Janusgraph)
Однако я строю индекс, используя этот ключ свойства "имя"
используется схема схемы по умолчанию - явная схема не определена
Я пытаюсь выяснить, почему возникает исключение постоянной блокировки, хотя разные потоки обновляют совершенно разные вершины (взаимоисключающие), а также почему исключение блокировки, когда нет ключа свойства, определенного как уникальный для использования любых блокировок janusgrpah.
org.janusgraph.core.JanusGraphException: Не удалось зафиксировать транзакцию из-за исключения во время сохранения в org.janusgraph.graphdb.transaction.StandardJanusGraphTx.commit (StandardJanusGraphTx. java: 1385) [488: org.janusgraph.janusgraph-core: 5.2.0.SNAPSHOT] в org.janusgraph.graphdb.tinkerpraphGprintsJpr $ 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.fn c .mlpce.tetopology.impl.GraphDBService.commit (GraphDBService. java: 509) [119: com.fujitsu.fn c .mlpce.tetopology.impl: 5.2.0.SNAPSHOT]
Причина: org.janusgraph.core.JanusGraphException: неожиданное исключение на org.janusgraph.graph db.database.StandardJanusGraph.commit (StandardJanusGraph. java: 806) [488: org.janusgraph.janusgraph-core: 5.2.0.SNAPSHOT] в org.janusgraph.graphdb.transaction.StandardJanusGraphTx.commit (StandardJanusGraphT. *: 1374) [488: org.janusgraph.janusgraph-core: 5.2.0.SNAPSHOT] ... еще 17 Вызывается: org.janusgraph.diskstorage.locking.PermanentLockingException: Локальная конкуренция блокировок в org .janusgraph.diskstorage.locking.AbstractLocker.writeLock (AbstractLocker. java: 327) [488: org.janusgraph.janusgraph-core: 5.2.0.SNAPSHOT] в org.janusgraph.diskstorage.locking.consistentkey.ExpectedValueCireckingStore (ExpectedValueCheckingStore. java: 103) [488: org.janusgraph.janusgraph-core: 5.2.0.SNAPSHOT] в 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] t org.janusgraph.graphdb.database.StandardJanusGraph.prepareCommit (StandardJanusGraph. java: 572) [488: org.janusgraph.janusgraph-core: 5.2.0.SNAPSHOT] в org.janusgraph.graphdb.database.Standardmitananus (StandardJanusGraph. java: 702) [488: org.janusgraph.janusgraph-core: 5.2.0.SNAPSHOT] ... еще 18
jansugraph 0.2.0 с бэкэндом кассандры