Blob Blame History Raw
From a1ec5a369d2e2a98c21e8f508f444a80f1aef496 Mon Sep 17 00:00:00 2001
From: Saki <shadowofs@gmail.com>
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;
         }