Merge pull request #7340 from ThomasWaldmann/fix-recreate-rechunkify-master

recreate: --chunker-params must default to None, fixes #7337
This commit is contained in:
TW 2023-02-11 14:11:03 +01:00 committed by GitHub
commit d90ebc8bef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 4 deletions

View File

@ -219,10 +219,10 @@ class RecreateMixIn:
dest="chunker_params",
action=Highlander,
type=ChunkerParams,
default=CHUNKER_PARAMS,
help="specify the chunker parameters (ALGO, CHUNK_MIN_EXP, CHUNK_MAX_EXP, "
"HASH_MASK_BITS, HASH_WINDOW_SIZE) or `default` to use the current defaults. "
"default: %s,%d,%d,%d,%d" % CHUNKER_PARAMS,
default=None,
help="rechunk using given chunker parameters (ALGO, CHUNK_MIN_EXP, CHUNK_MAX_EXP, "
"HASH_MASK_BITS, HASH_WINDOW_SIZE) or `default` to use the chunker defaults. "
"default: do not rechunk",
)
subparser.add_argument(

View File

@ -171,6 +171,33 @@ class ArchiverTestCase(ArchiverTestCaseBase):
num_chunks = int(output)
assert num_chunks == 2
def test_recreate_no_rechunkify(self):
with open(os.path.join(self.input_path, "file"), "wb") as fd:
fd.write(b"a" * 8192)
self.cmd(f"--repo={self.repository_location}", "rcreate", RK_ENCRYPTION)
# first create an archive with non-default chunker params:
self.cmd(f"--repo={self.repository_location}", "create", "test", "input", "--chunker-params", "7,9,8,128")
output = self.cmd(
f"--repo={self.repository_location}", "list", "test", "input/file", "--format", "{num_chunks}"
)
num_chunks = int(output)
# now recreate the archive and do NOT specify chunker params:
output = self.cmd(
f"--repo={self.repository_location}",
"recreate",
"--debug",
"--exclude",
"filename_never_matches",
"-a",
"test",
)
assert "Rechunking" not in output # we did not give --chunker-params, so it must not rechunk!
output = self.cmd(
f"--repo={self.repository_location}", "list", "test", "input/file", "--format", "{num_chunks}"
)
num_chunks_after_recreate = int(output)
assert num_chunks == num_chunks_after_recreate
def test_recreate_recompress(self):
self.create_regular_file("compressible", size=10000)
self.cmd(f"--repo={self.repository_location}", "rcreate", RK_ENCRYPTION)