reverbrain/eblob — pull request #25 by SaveTheRbtz (2013-06-23 21:20:42+00:00)
Title: Types and Compression removal. Introduction of writev()-like interface. Stat improvements.

* Removed columns aka `type`s. This change greatly simplifies code base, speeds it up and also allows us to remove substantial amounts of code lines;
* Removed near useless compression. Unlike most common block-based approaches we've used record based compression which is ineffective on small records and introduces too much overhead on big ones;
* Introduce scatter/gather interface which resembles POSIX `writev(2)`, but extends it by adding scatter to write path. This will simplify implementation of elliptics extended metadata;
* Introduced new extensible statistics with decent API. Now we have three kinds of stats:
* global per-backend, like number of hashed entries,
* local, per-base like size of base,
* Automatic summary across all local stats,
Also `.stat` file now provides far more extensive stats, e.g.: https://gist.github.com/SaveTheRbtz/5846362;
* Types removal allowed us to remove most of complexity from in-memory cache because now there can be only one entry with given key;
* Tests and CI improvements. We are now testing three write along with three read paths. Also added tests for `BLOB_DISK_CTL_APPEND`;
* Deprecated config options: `bsize` and `cache_size`;
* Deprecated `BLOB_DISK_CTL_WRITE_RETURN`/`BLOB_DISK_CTL_OVERWRITE`
flags and `EBLOB_OVERWRITE_COMMITS`/`EBLOB_TRY_OVERWRITE`
config flags;
* Cleaned up `bctl` structure from obsoleted fields;
* Fixed update of data file index. Now both index file and data file are updated simultaneously. This fixed 3-stage write tests with enabled `data-sort`;
* Less extensive logging. Either decreased severity or removed some log messages all along;
* Speedup `data-sort` by utilizing new statistics APIs instead of running iterator before defrag;
* Speedup `eblob_read_data()`. Removal of compression allowed us to remove now useless `map`/`unmap` calls.
* Fixed Clang static analyzer and `asan` warnings.

**NB!** This commit breaks both ABI and API. All applications needs to be recompiled, most of them need to be rewritten
**PS.** Pull request with Ellitics backend compatibility with this eblob version will follow soon.