-
Notifications
You must be signed in to change notification settings - Fork 31
Open
Description
Version: 3.0.27
Java-gremlin api
Connection mode: remote
Goal
- 3 threads deleting 3 different nodes.
Context
- Each threads has its own
GraphTraversalSourcegenerated as
OrientGraph g = ogFactory.getTx();
g.makeActive()
GraphTraversalSource gts = g.traversal()- Code (simplified)
Transaction t;
for (int retry=5; retry>=0; retry--) {
try {
gts.tx().open();
gts.V(object_id).drop().iterate();
gts.tx().commit()
break;
} catch (OConcurrentModificationException ocm) {
gts.tx().rollback();
} catch (Exception e) {
// ...
}
}
What happens
- one thread completes
- the other 2 raise
OConcurrentModificationException - one of the remaining completes
- the other raises
ORecordNotFoundException
What should happen
Once the last thread tries to commit, either it succeed or it should fail with an OConcurrentModificationException.
The ORecordNotFoundException suggests that the rollback operation had not any effect, and instead the node was previously removed even tough we had an OConcurrentModificationException.
P.S.
Using plocal: the correct sequence of Exceptions is raised
Metadata
Metadata
Assignees
Labels
No labels