Skip to content

Releases: oasis-protection/oasis-downloads

Oasis 1.0.1

Choose a tag to compare

@Telesphoreo Telesphoreo released this 09 Sep 04:54

Oasis 1.0.1 is a bug fix release.

The time words are now last and older. /rollback user Steve last 2h undoes the last two hours, and /oasis purge older 90d deletes edits older than 90 days. In 1.0 the words were since and before, and before 10m read like "the last ten minutes" when it meant the opposite. today is now day, and the short forms of /lookup and /inspect are /lo and /ins.

A server that was killed, by a process manager or a power cut, could lose the edits of its last quarter of a second. Oasis now writes edits to disk within a few milliseconds, and a kill in the middle of a burst of edits loses none of them. A normal stop never lost anything.

The prefetch-chunks setting is gone from the config. It never did anything, and Oasis removes it on the next start.

Other plugins can get the API from https://nexus.telesphoreo.me/repository/oasis/ as com.oasis:oasis-api:1.0.1. The README has the details.

Oasis needs Paper 26.2 on Java 25 and a ClickHouse server.

Oasis 1.0

Choose a tag to compare

@Telesphoreo Telesphoreo released this 09 Sep 00:49

We present Oasis, a block logging and rollback plugin for Paper that stores its history in ClickHouse rather than in the embedded or relational databases that plugins in this class have used for the past decade. The design follows one observation: a game server should never hold the history it is rolling back. Oasis reads the edits from ClickHouse as it goes, places blocks for a few milliseconds of each tick and gives the rest of the tick back to the game, and writes every edit to disk before it sends it to ClickHouse. The result is a rollback whose memory does not grow with its size, whose first block lands within a second, and whose speed is set by how much of each tick you give it rather than by the tick rate.

We evaluated Oasis against CoreProtect on identical hardware, the same Paper build, the same FastAsyncWorldEdit build, and the same ClickHouse container, with 2 GB of memory for the server. On a cube of 8,000,000 blocks, Oasis had every edit in ClickHouse in 8.4 s, rolled the cube back in 6.7 s, restored it in 5.6 s, and kept 368 MB of memory afterwards, with a worst tick of 37 ms. CoreProtect with the same 2 GB ran out of memory during the set and logged nothing. Given 16 GB it needed 154.5 s to log, 15.2 s to roll back, 86.7 s to restore, and held 2,308 MB afterwards; its slowest tick was 213 ms with 16 GB and 23.3 s with 2 GB. On 1,000,000 blocks Oasis used the same memory it used on 27,000, because it never holds the edits; CoreProtect used four times as much. Lookups in ClickHouse took 15 to 29 ms across every size, against 100 to 261 ms for CoreProtect, or no answer within 10 s.

At scale, Oasis logged 50,000,000 generated edits in 12.4 s of server time and had all of them in ClickHouse 50 s later. It rolled them all back in 61.7 s at 810,000 edits per second, with the first block after 0.6 s and 444 MB of memory at the end, and restored them in 63.4 s. Those 50,000,000 edits occupy 110 MB on disk, 2.2 bytes per edit. A 2 MB item moved 10,000 times by hoppers is stored once; the moves add 403 bytes. Killing the server process 1.5 s into a burst of 4,000,000 edits lost none of them, and killing it 300 chunks into a rollback left 351 unfinished chunks that replayed in 3.7 s on the next start.

Oasis was written in a single 24 hour sprint after one griefer put 78,000,000 rows into a CoreProtect database and six hours of tuning could not make it usable again. Its first production deployment imported 167,000,000 rows of CoreProtect history from a MySQL and a ClickHouse database in 8 minutes.

The commands have no flags. Each takes a set of words, user, since, near, block, cause, in any order, and tab completion documents every word and every value. Rollbacks restore chest contents, sign text, item frames, armor stands, and killed mobs exactly. Chat, commands, books, and logins share the same history. A public API ships as oasis-api-1.0.jar, with its source in this repository.

Oasis-1.0.jar is the plugin. oasis-api-1.0.jar is the API for other plugins. Oasis needs Paper 26.2 on Java 25 and a ClickHouse server. The README has the installation steps, the command reference, the full measurements, and the graphs.