From a0a07ab46499ba032ffef225c5b16ba25a341dc1 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 16 Dec 2023 00:30:32 +0100 Subject: [PATCH] use get_reset_ec to internally re-init ec/warnings if we do multiple calls to Archiver.do_something(), we need to reset the ec / warnings after each call, otherwise they will keep growing (in severity, in length). --- src/borg/archiver/benchmark_cmd.py | 22 ++++++++++++++-------- src/borg/helpers/__init__.py | 7 +++++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/borg/archiver/benchmark_cmd.py b/src/borg/archiver/benchmark_cmd.py index 78bf9b392..68ad7b8e8 100644 --- a/src/borg/archiver/benchmark_cmd.py +++ b/src/borg/archiver/benchmark_cmd.py @@ -9,7 +9,7 @@ from ..constants import * # NOQA from ..crypto.key import FlexiKey from ..helpers import format_file_size from ..helpers import msgpack -from ..helpers import get_ec +from ..helpers import get_reset_ec from ..item import Item from ..platform import SyncFile @@ -22,7 +22,7 @@ class BenchmarkMixIn: compression = "--compression=none" # measure create perf (without files cache to always have it chunking) t_start = time.monotonic() - rc = get_ec( + rc = get_reset_ec( self.do_create( self.parse_args( [ @@ -40,23 +40,27 @@ class BenchmarkMixIn: dt_create = t_end - t_start assert rc == 0 # now build files cache - rc1 = get_ec( + rc1 = get_reset_ec( self.do_create(self.parse_args([f"--repo={repo}", "create", compression, "borg-benchmark-crud2", path])) ) - rc2 = get_ec(self.do_delete(self.parse_args([f"--repo={repo}", "delete", "-a", "borg-benchmark-crud2"]))) + rc2 = get_reset_ec( + self.do_delete(self.parse_args([f"--repo={repo}", "delete", "-a", "borg-benchmark-crud2"])) + ) assert rc1 == rc2 == 0 # measure a no-change update (archive1 is still present) t_start = time.monotonic() - rc1 = get_ec( + rc1 = get_reset_ec( self.do_create(self.parse_args([f"--repo={repo}", "create", compression, "borg-benchmark-crud3", path])) ) t_end = time.monotonic() dt_update = t_end - t_start - rc2 = get_ec(self.do_delete(self.parse_args([f"--repo={repo}", "delete", "-a", "borg-benchmark-crud3"]))) + rc2 = get_reset_ec( + self.do_delete(self.parse_args([f"--repo={repo}", "delete", "-a", "borg-benchmark-crud3"])) + ) assert rc1 == rc2 == 0 # measure extraction (dry-run: without writing result to disk) t_start = time.monotonic() - rc = get_ec( + rc = get_reset_ec( self.do_extract(self.parse_args([f"--repo={repo}", "extract", "borg-benchmark-crud1", "--dry-run"])) ) t_end = time.monotonic() @@ -64,7 +68,9 @@ class BenchmarkMixIn: assert rc == 0 # measure archive deletion (of LAST present archive with the data) t_start = time.monotonic() - rc = get_ec(self.do_delete(self.parse_args([f"--repo={repo}", "delete", "-a", "borg-benchmark-crud1"]))) + rc = get_reset_ec( + self.do_delete(self.parse_args([f"--repo={repo}", "delete", "-a", "borg-benchmark-crud1"])) + ) t_end = time.monotonic() dt_delete = t_end - t_start assert rc == 0 diff --git a/src/borg/helpers/__init__.py b/src/borg/helpers/__init__.py index 8c0bed696..ae8259b7c 100644 --- a/src/borg/helpers/__init__.py +++ b/src/borg/helpers/__init__.py @@ -164,3 +164,10 @@ def get_ec(ec=None): return rcs[0] # there were different kinds of warnings return EXIT_WARNING # generic warning rc, user has to look into the logs + + +def get_reset_ec(ec=None): + """Like get_ec, but re-initialize ec/warnings afterwards.""" + rc = get_ec(ec) + init_ec_warnings() + return rc