jankotek / mapdb

MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory. It is a fast and easy to use embedded Java database engine.
https://mapdb.org
Apache License 2.0
4.87k stars 873 forks source link

Retrieving data after rollback will throw an exception #1034

Open Montaro2017 opened 7 months ago

Montaro2017 commented 7 months ago

versioin

3.0.10

code

String name = "user";
User admin = new User().setUserName("admin");
Atomic.Var<Object> var = db.atomicVar(name).createOrOpen();
User user = (User) var.get();
// user should be null
Assertions.assertNull(user);

// set AtomicVar
var.set(admin);
user = (User) var.get();
Assertions.assertEquals(admin, user);

// rollback and get will throw exception
db.rollback();
user = (User) var.get();

It throw an exception in line user = (User) var.get(); after rollback

org.mapdb.DBException$GetVoid: Record does not exist, recid=10

    at org.mapdb.StoreWAL.getIndexVal(StoreWAL.kt:170)
    at org.mapdb.StoreWAL.get(StoreWAL.kt:500)
    at org.mapdb.Atomic$Var.get(Atomic.java:751)
    at com.mapdbtest.DBServiceTest.testRollback(DBServiceTest.java:110)