orientechnologies / orientdb-gremlin

TinkerPop3 Graph Structure Implementation for OrientDB
Apache License 2.0
91 stars 32 forks source link

Inconsistent transaction beheviour w/remote: #169

Open MartinBrugnara opened 4 years ago

MartinBrugnara commented 4 years ago

Version: 3.0.27 Java-gremlin api Connection mode: remote

Goal

Context

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

wolf4ood commented 4 years ago

Hi @MartinBrugnara

do you have a complete test to reproduce this case?

Thanks

MartinBrugnara commented 4 years ago

Hi @wolf4ood, the code i posted is part of a much bigger framework which I cannot share at the moment. Nevertheless, I extracted for you all the relevant code: [https://pastebin.com/9E45Z7G0]() . Then you will need just a main function, imports, and the following deps:

    <dependencies>
        <dependency>
            <groupId>org.apache.tinkerpop</groupId>
            <artifactId>gremlin-core</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.orientechnologies/orientdb-gremlin -->
        <dependency>
            <groupId>com.orientechnologies</groupId>
            <artifactId>orientdb-gremlin</artifactId>
            <version>3.0.27</version>
        </dependency>
        <dependency>
            <groupId>com.orientechnologies</groupId>
            <artifactId>orientdb-client</artifactId>
            <version>3.0.27</version>
        </dependency>
    </dependencies>

Cheers, M

EDIT: GdbLogger is just a custom logger... feel free to replace it with prints, and the invocations to fatal() with System.exit(1).