dedup

data deduplication program
git clone git://git.2f30.org/dedup.git
Log | Files | Refs | README | LICENSE

commit 573a013a9738a43524c0e5994245353b8bd4b564
parent 2c9dc65a8287e67d92b8ce1aa87d205243aa9eeb
Author: sin <sin@2f30.org>
Date:   Wed, 10 Apr 2019 13:16:48 +0100

Add support for snappy compressor/decompressor

Diffstat:
MCHANGELOG | 1+
MMakefile | 2+-
MREADME | 1+
Mcompress.c | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdedup.1 | 4++--
Mdedup.h | 1+
6 files changed, 67 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -4,6 +4,7 @@ ### Added - Support for blake2bp, which is parallel variant of blake2b. - Support for blake2s and blake2sp. +- Support for snappy compressor/decompressor. ## [0.9] - 2019-03-26 ### Added diff --git a/Makefile b/Makefile @@ -55,7 +55,7 @@ DISTFILES = \ CFLAGS = -g -O2 -Wall $(OPENMPCFLAGS) CPPFLAGS = -I/usr/local/include -D_FILE_OFFSET_BITS=64 LDFLAGS = -L/usr/local/lib -LDLIBS = -llz4 $(OPENMPLDLIBS) +LDLIBS = -llz4 -lsnappy $(OPENMPLDLIBS) all: $(BIN) diff --git a/README b/README @@ -41,6 +41,7 @@ Dependencies ============ - liblz4 + - snappy - libomp (optional, see config.mk) Contact diff --git a/compress.c b/compress.c @@ -6,6 +6,7 @@ #include <strings.h> #include <lz4.h> +#include <snappy-c.h> #include "blake2.h" #include "dedup.h" @@ -26,6 +27,14 @@ static size_t lz4_decompr(struct compr_ctx *ctx, const void *in, void *out, size_t insize, size_t outsize); static int lz4_final(struct compr_ctx *ctx); +static int snappy_init(struct compr_ctx *ctx); +static size_t snappy_size(struct compr_ctx *ctx, size_t n); +static size_t snappy_compr(struct compr_ctx *ctx, const void *in, void *out, + size_t insize, size_t outsize); +static size_t snappy_decompr(struct compr_ctx *ctx, const void *in, void *out, + size_t insize, size_t outsize); +static int snappy_final(struct compr_ctx *ctx); + static struct compr_ops { int (*init)(struct compr_ctx *ctx); size_t (*size)(struct compr_ctx *ctx, size_t n); @@ -49,6 +58,13 @@ static struct compr_ops { .decompr = lz4_decompr, .final = lz4_final, }, + { + .init = snappy_init, + .size = snappy_size, + .compr = snappy_compr, + .decompr = snappy_decompr, + .final = snappy_final, + }, }; static struct algomap { @@ -57,6 +73,7 @@ static struct algomap { } algomap[] = { { .name = "none", .type = COMPR_NONE }, { .name = "lz4", .type = COMPR_LZ4 }, + { .name = "snappy", .type = COMPR_SNAPPY }, { .name = NULL, }, }; @@ -138,6 +155,50 @@ lz4_final(struct compr_ctx *ctx) return 0; } +static int +snappy_init(struct compr_ctx *ctx) +{ + return 0; +} + +static size_t +snappy_size(struct compr_ctx *ctx, size_t n) +{ + return snappy_max_compressed_length(n); +} + +static size_t +snappy_compr(struct compr_ctx *ctx, const void *in, void *out, + size_t insize, size_t outsize) +{ + size_t n = outsize; + snappy_status ret; + + ret = snappy_compress((char *)in, insize, (char *)out, &n); + if (ret != SNAPPY_OK) + errx(1, "snappy_compress failed: %d", ret); + return n; +} + +static size_t +snappy_decompr(struct compr_ctx *ctx, const void *in, void *out, + size_t insize, size_t outsize) +{ + size_t n = outsize; + snappy_status ret; + + ret = snappy_uncompress((char *)in, insize, (char *)out, &n); + if (ret != SNAPPY_OK) + errx(1, "snappy_uncompress failed: %d", ret); + return n; +} + +static int +snappy_final(struct compr_ctx *ctx) +{ + return 0; +} + int compr_init(struct compr_ctx *ctx, int type) { diff --git a/dedup.1 b/dedup.1 @@ -1,4 +1,4 @@ -.Dd April 7, 2019 +.Dd April 10, 2019 .Dt DEDUP 1 .Os .Sh NAME @@ -38,7 +38,7 @@ By default blake2b is used. .It Fl Z Ar compressor The compressor function used to compress the blocks in the store. -The supported compressor functions are none and lz4. +The supported compressor functions are none, lz4 and snappy. This flag only has an effect when initializing the repository. By default lz4 is used. .It Fl c diff --git a/dedup.h b/dedup.h @@ -30,6 +30,7 @@ enum compr_algo { COMPR_NONE, COMPR_LZ4, + COMPR_SNAPPY, NR_COMPRS, };