mtbl_merger - merge multiple MTBL data sources into a single output
struct mtbl_merger *
mtbl_merger_init(const struct mtbl_merger_options *mopt);
mtbl_merger_destroy(struct mtbl_merger **m);
mtbl_merger_add_source(struct mtbl_merger *m, const struct mtbl_source *s);
const struct mtbl_source *
mtbl_merger_source(struct mtbl_merger *m);
struct mtbl_merger_options *
mtbl_merger_options_destroy(struct mtbl_merger_options **mopt);
struct mtbl_merger_options *mopt,
const uint8_t *key, size_t len_key,
const uint8_t *val0, size_t len_val0,
const uint8_t *val1, size_t len_val1,
uint8_t **merged_val, size_t *len_merged_val);
Multiple MTBL data sources may be merged together using the mtbl_merger
interface, which reads key-value entries from one or more sources and provides
these entries in sorted order. The sorted entries may be consumed via the
(3) and mtbl_iter
Because the MTBL format does not allow duplicate keys, the caller must provide a
function which will accept a key and two conflicting values for that key and
return a replacement value. This function may be called multiple times for the
same key if more than two sources are being merged.
objects are created with the mtbl_merger_init
function, which requires a non-NULL mopt
argument which has been
configured with a merge function fp
One or more mtbl_reader
objects must be provided as input to the
object by calling mtbl_merger_add_source
the desired sources have been configured, mtbl_merger_source
be called in order to consume the merged output via the mtbl_source
This option specifies a merge function callback, consisting of a function
and a pointer to user data clos
which will be passed
as the first argument to fp
. The merge function callback will be used
during iteration over the mtbl_merger
object to merge entries with
duplicate keys in the input sources.
The remaining arguments to the merge function are:
— pointer to the key for which there exist duplicate values.
— length of the key.
— pointer to the first value.
— length of the first value.
— pointer to the second value.
— length of the second value.
— pointer to where the callee should place its merged
— pointer to where the callee should place the
length of its merged value.
must be allocated with the system allocator, and the
interface takes responsibility for free()ing the value once
it is no longer needed.
The callee may provide an empty value as the merged value, in which case
must still contain an allocated, non-NULL value and
must contain the value 0.
The callee may indicate an error by returning NULL in the merged_val
argument, which will abort iteration over the mtbl_merger
If the merge function callback is unable to provide a merged value (that is, it
fails to return a non-NULL value in its merged_val
argument), the merge
process will be aborted, and any iterators over the mtbl_merger
(via the mtbl_source
(3) interface) will return