Hello, @Evgenij:
> This code throws OOME unless restore point creation is commented out: I've taken a look at it and at first I thought it's the concurrent system session that commits the auto generated sequence value. However, a bit of playing and testing revealed that I can reproduce at least a similar issue in "vanilla" H2 (i.e. without restore points). It is caused by auto-commit `false` which I tried, because I thought it would prevent database version increments. After all, with a restore point, all commits (database versions) are being retained and thus cost storage. Please find a reproducer at https://github.com/i-am-not-giving-my-name-to-a-machine/h2-tests > This code throws General Error: Very interesting. This shows a blatant shortcoming of my implementation. The oldest version to keep is currently not part of the MVStore *file* (it's only part of the META table of the database), but it has to be to be taken into account in situations where the files are being compacted. This is something I'd happily try to address if this feature has a future. @Andrei > Here is my quick and dirty simulation of the "restore point" with copying of in-memory files: I didn't fully realize that H2 comes with its own in-memory file system. Albeit a very basic one. I have taken your code and tried it for Spring tests. It works great. If anyone is interested, here's my "PoC": https://github.com/i-am-not-giving-my-name-to-a-machine/spring-test-database-restoration-poc This also made me realize that it would be nice if a restore point feature would not drop connections on a `restore to point` SQL execution. If no transaction is ongoing, it could "freeze" the database (block new transactions), restore the database and unfreeze it. That would remove the need for clearing a connection pool of connections to a database that doesn't exist anymore. And a golden copy (nice choice of words btw) wouldn't be necessary as well. @Noel > [...] thanks to H2's excellent internal architecture Couldn't agree more. It was extremely easy to understand the mechanics and interactions. The one thing that "frightens" me the most is the actual storage format/structure of the MVStore, but it's probably not a that difficult either. To wrap up: I'm here, if you want to continue this journey. Maybe you could point me in the right direction where to put the oldest version to keep in the MVStore file. I'm assuming there are some headers and I could simply put it there? Regards, Enno On Monday, November 11, 2024 at 7:38:43 AM UTC+1 Noel Grandin wrote: > Hi > > On 11/9/2024 4:47 AM, Andrei Tokar wrote: > > Forgive me for a possibly stupid question, but why this feature is so > badly needed? > > What's wrong with populating database to a desired state, shutting down, > copying the file, and starting H2 with a file copy. > > Why do you need this functionality for in-memory (non-persistent) > database? If performance is the reason, you can use > > RAM-based file system instead. > > Just noting that in the time I have been working on H2, this is the third > time this feature has come up. > > Some people want to (a) have their test database at a known point (b) run > a _lot_ of unit tests and (c) have their unit > tests run relatively quickly. > > So for all it's shortcomings, I think it would be a useful addition (Plus > I am tickled pink that such afeature could be > implemented in so few lines of code, thanks to H2's excellent internal > architecture) > > Regards, Noel Grandin > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to h2-database+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/h2-database/cc7ffa5b-2513-4ff8-8274-9a7b87631bb5n%40googlegroups.com.