reverbrain/eblob — pull request #29 by SaveTheRbtz (2013-07-29 08:01:56+00:00)
Title: Removed binlog, Immutable bases, Multithreaded tests, Logging and Bugfixes.

Core:
* Bases are now immutable for the whole duration of defragmentation:
Every in-place overwrite of immutable base will be replaced internally by
read-copy-update cycle;
* Huge `binlog` implementation was replaced with tiny linked list of removed
entries:
This greatly simplifies code by removing almost ~1000 LOC, reduces memory
footprint and speeds up writepath.

Tests:
* Cleanup leftovers from previous test on start;
* Added multithreaded tests;
* Added new `travis-ci` test.

Logging:
* Added new `SPAM` log level;
* Removed excessive `ERROR` logging in write path by converting it to `DEBUG`:
Requested by: admins
* Fixed race in `eblob_dump_id` by converting it to macros:
This allows to safely log id's in multithreaded environments. Also this fixed
problem with truncated log messages.
* Added non intrusive log messages to multi-stage write path.

CMake:
* Removed unused `FreeBSD` parts;
* Build with `-fstrict-aliasing`;
* Switch to `-std=gnu99`;
* Moved some warnings to `C`-specific code;
* Removed linking with `-ldl` on `*san` builds.

Bugfixes:
* Fixed race between base removal by defragmentation and base addition on write
thread;
* Fixed aliasing problems spotted by `-Wstrict-aliasing=2` on most compilers;
* Fixed error code on base creation while max open file limit was reached.

PS. `API`/`ABI` change is introduced: exported functions `eblob_dump_id_len`/`eblob_dump_id` are now converted to macroses: major version bump is advised.
PPS. Merge of bases on defragmentation is not included in this pull request.