EnnoDB 1.3 fixes a critical bug and introduces several new convenience features for administrators.
- bug: when updating an existing key, the in-memory database was corrupted (aka the catbug).
- configuration through /etc/ennodb/ennodb.ini
- added a read-only mode in which no new log entries are written
- added -v option to print version number
server migration
Due to new hardware getting delivered last week, I was forced to move the public instance at http://enno.kn-bremen.de/ to a new server. This required some downtime during which the service was unavailable. Migrations will be easier in the future, the process is now:
- on the source host, set
readonly=1
in /etc/ennodb/ennodb.ini sudo service ennodb reload
to signal the change to the servicecurl http://localhost/ennodb/foo
to activate the change.- rsync the database to the destination host
- on the destination host:
service ennodb start
- point the load balancer at the destination host IP
- shut down the source host.
This replaces the window of no availability with a short window of read-only access.
The catbug
All software has bugs. Believing that there aren’t any in what are currently 2002 lines of C code is hubris, and I didn’t expect version 1.0 to stand up to actual use for very long. Judging by my server logs it took less than a day for some enterprising soul from the internet to find out that setting a value twice would cause corruption of unrelated keys (setting “catz” twice caused the loss of the “cat” key, which is how this bug got its name).
I took this opportunity to create a better test framework, and narrow the issue down from an integration test to a unit test that in the end was relatively easy to fix, but needed a change to my crit-bit tree library.