diff --git a/0001-Fix-seed-chunker-discriminator-not-set-78.patch b/0001-Fix-seed-chunker-discriminator-not-set-78.patch new file mode 100644 index 0000000..fd0dd62 --- /dev/null +++ b/0001-Fix-seed-chunker-discriminator-not-set-78.patch @@ -0,0 +1,96 @@ +From a1ec5a369d2e2a98c21e8f508f444a80f1aef496 Mon Sep 17 00:00:00 2001 +From: Saki +Date: Fri, 1 Sep 2017 00:38:06 +0800 +Subject: [PATCH] Fix seed chunker discriminator not set (#78) + +When user set a chunk_size, chunker.discriminator should be re-caculated +with new chunk_size. Elsewise, Local seed cache can't be used to extract +remote server. +--- + src/caseed.c | 31 ++----------------------------- + src/caseed.h | 4 +--- + src/casync.c | 10 +--------- + 3 files changed, 4 insertions(+), 41 deletions(-) + +diff --git a/src/caseed.c b/src/caseed.c +index 6923750..ccf333a 100644 +--- a/src/caseed.c ++++ b/src/caseed.c +@@ -773,39 +773,12 @@ int ca_seed_set_feature_flags(CaSeed *s, uint64_t flags) { + return ca_feature_flags_normalize(flags, &s->feature_flags); + } + +-int ca_seed_set_chunk_size_min(CaSeed *s, size_t cmin) { ++int ca_seed_set_chunk_size(CaSeed *s, size_t cmin, size_t cavg, size_t cmax) { + if (!s) + return -EINVAL; +- if (cmin < CA_CHUNK_SIZE_LIMIT_MIN) +- return -EINVAL; +- if (cmin > CA_CHUNK_SIZE_LIMIT_MAX) +- return -EINVAL; +- +- s->chunker.chunk_size_min = cmin; +- return 0; +-} + +-int ca_seed_set_chunk_size_avg(CaSeed *s, size_t cavg) { +- if (!s) +- return -EINVAL; +- if (cavg < CA_CHUNK_SIZE_LIMIT_MIN) +- return -EINVAL; +- if (cavg > CA_CHUNK_SIZE_LIMIT_MAX) +- return -EINVAL; +- +- s->chunker.chunk_size_avg = cavg; +- return 0; +-} +- +-int ca_seed_set_chunk_size_max(CaSeed *s, size_t cmax) { +- if (!s) +- return -EINVAL; +- if (cmax < CA_CHUNK_SIZE_LIMIT_MIN) +- return -EINVAL; +- if (cmax > CA_CHUNK_SIZE_LIMIT_MAX) +- return -EINVAL; ++ ca_chunker_set_size(&s->chunker, cmin, cavg, cmax); + +- s->chunker.chunk_size_max = cmax; + return 0; + } + +diff --git a/src/caseed.h b/src/caseed.h +index f2d9f8e..55c3d43 100644 +--- a/src/caseed.h ++++ b/src/caseed.h +@@ -36,9 +36,7 @@ int ca_seed_current_mode(CaSeed *seed, mode_t *ret); + + int ca_seed_set_feature_flags(CaSeed *s, uint64_t flags); + +-int ca_seed_set_chunk_size_min(CaSeed *s, size_t cmin); +-int ca_seed_set_chunk_size_avg(CaSeed *s, size_t cavg); +-int ca_seed_set_chunk_size_max(CaSeed *s, size_t cmax); ++int ca_seed_set_chunk_size(CaSeed *s, size_t cmin, size_t cavg, size_t cmax); + + int ca_seed_set_hardlink(CaSeed *s, bool b); + int ca_seed_set_chunks(CaSeed *s, bool b); +diff --git a/src/casync.c b/src/casync.c +index 346d08b..a74b0d9 100644 +--- a/src/casync.c ++++ b/src/casync.c +@@ -2473,15 +2473,7 @@ static int ca_sync_propagate_flags_to_seeds(CaSync *s, uint64_t flags, size_t cm + if (r < 0) + return r; + +- r = ca_seed_set_chunk_size_min(s->seeds[i], cmin); +- if (r < 0) +- return r; +- +- r = ca_seed_set_chunk_size_avg(s->seeds[i], cavg); +- if (r < 0) +- return r; +- +- r = ca_seed_set_chunk_size_max(s->seeds[i], cmax); ++ r = ca_seed_set_chunk_size(s->seeds[i], cmin, cavg, cmax); + if (r < 0) + return r; + } diff --git a/casync.spec b/casync.spec index 6293ed7..36e21af 100644 --- a/casync.spec +++ b/casync.spec @@ -3,7 +3,7 @@ Name: casync Version: 2 -Release: 3%{?gitcommit:.git%{gitcommitshort}}%{?dist} +Release: 4%{?gitcommit:.git%{gitcommitshort}}%{?dist} Summary: Content Addressable Data Synchronizer License: LGPLv2+ @@ -14,6 +14,7 @@ Source0: https://github.com/keszybz/casync/archive/%{?gitcommit}/casync-% Source0: https://github.com/systemd/casync/archive/v%{version}/%{name}-%{version}.tar.gz %endif Patch0001: 0001-Fix-segv-in-ca_remote_forget_chunk.patch +Patch0002: 0001-Fix-seed-chunker-discriminator-not-set-78.patch BuildRequires: meson BuildRequires: gcc @@ -73,6 +74,9 @@ export LC_CTYPE=C.utf8 %_udevrulesdir/75-casync.rules %changelog +* Fri Sep 01 2017 Igor Gnatenko - 2-4 +- Backport fix for setting chunk-size + * Wed Aug 02 2017 Fedora Release Engineering - 2-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild