From 70a71e1486b6697f2bb32e176692215e591d006d Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 24 Nov 2024 14:55:07 +0100 Subject: [PATCH 01/30] smartremove tests in own file --- common/test/test_snapshots.py | 140 -------------------- common/test/test_snapshots_autoremove.py | 157 +++++++++++++++++++++++ 2 files changed, 157 insertions(+), 140 deletions(-) create mode 100644 common/test/test_snapshots_autoremove.py diff --git a/common/test/test_snapshots.py b/common/test/test_snapshots.py index efe4e9016..60988f6e2 100644 --- a/common/test/test_snapshots.py +++ b/common/test/test_snapshots.py @@ -300,146 +300,6 @@ def test_error(self): '[E] Error: rsync: send_files failed to open "/foo/bar": Operation not permitted (1)\n', f.read()) -class SmartRemove(generic.SnapshotsTestCase): - def test_increment_month(self): - self.assertEqual(self.sn.incMonth(date(2016, 4, 21)), date(2016, 5, 1)) - self.assertEqual(self.sn.incMonth(date(2016, 12, 24)), date(2017, 1, 1)) - - def test_decrement_month(self): - self.assertEqual(self.sn.decMonth(date(2016, 4, 21)), date(2016, 3, 1)) - self.assertEqual(self.sn.decMonth(date(2016, 1, 14)), date(2015, 12, 1)) - - def test_keep_all(self): - sid1 = snapshots.SID('20160424-215134-123', self.cfg) - sid2 = snapshots.SID('20160422-030324-123', self.cfg) - sid3 = snapshots.SID('20160422-020324-123', self.cfg) - sid4 = snapshots.SID('20160422-010324-123', self.cfg) - sid5 = snapshots.SID('20160421-013218-123', self.cfg) - sid6 = snapshots.SID('20160410-134327-123', self.cfg) - sids = [sid1, sid2, sid3, sid4, sid5, sid6] - - keep = self.sn.smartRemoveKeepAll(sids, - date(2016, 4, 20), - date(2016, 4, 23)) - self.assertSetEqual(keep, set((sid2, sid3, sid4, sid5))) - - keep = self.sn.smartRemoveKeepAll(sids, - date(2016, 4, 11), - date(2016, 4, 18)) - self.assertSetEqual(keep, set()) - - def test_keep_first(self): - sid1 = snapshots.SID('20160424-215134-123', self.cfg) - sid2 = snapshots.SID('20160422-030324-123', self.cfg) - sid3 = snapshots.SID('20160422-020324-123', self.cfg) - sid4 = snapshots.SID('20160422-010324-123', self.cfg) - sid5 = snapshots.SID('20160421-013218-123', self.cfg) - sid6 = snapshots.SID('20160410-134327-123', self.cfg) - sids = [sid1, sid2, sid3, sid4, sid5, sid6] - - keep = self.sn.smartRemoveKeepFirst(sids, - date(2016, 4, 20), - date(2016, 4, 23)) - self.assertSetEqual(keep, set((sid2,))) - - keep = self.sn.smartRemoveKeepFirst(sids, - date(2016, 4, 11), - date(2016, 4, 18)) - self.assertSetEqual(keep, set()) - - def test_keep_first_no_errors(self): - sid1 = snapshots.SID('20160424-215134-123', self.cfg) - sid2 = snapshots.SID('20160422-030324-123', self.cfg) - sid2.makeDirs() - sid2.failed = True - sid3 = snapshots.SID('20160422-020324-123', self.cfg) - sid4 = snapshots.SID('20160422-010324-123', self.cfg) - sid5 = snapshots.SID('20160421-013218-123', self.cfg) - sid6 = snapshots.SID('20160410-134327-123', self.cfg) - sids = [sid1, sid2, sid3, sid4, sid5, sid6] - - # keep the first healthy snapshot - keep = self.sn.smartRemoveKeepFirst(sids, - date(2016, 4, 20), - date(2016, 4, 23), - keep_healthy = True) - self.assertSetEqual(keep, set((sid3,))) - - # if all snapshots failed, keep the first at all - for sid in (sid3, sid4, sid5): - sid.makeDirs() - sid.failed = True - keep = self.sn.smartRemoveKeepFirst(sids, - date(2016, 4, 20), - date(2016, 4, 23), - keep_healthy = True) - self.assertSetEqual(keep, set((sid2,))) - - def test_smart_remove_list(self): - sid1 = snapshots.SID('20160424-215134-123', self.cfg) - sid2 = snapshots.SID('20160422-030324-123', self.cfg) - sid3 = snapshots.SID('20160422-020324-123', self.cfg) - sid4 = snapshots.SID('20160422-010324-123', self.cfg) - sid5 = snapshots.SID('20160421-033218-123', self.cfg) - sid6 = snapshots.SID('20160421-013218-123', self.cfg) - sid7 = snapshots.SID('20160420-013218-123', self.cfg) - sid8 = snapshots.SID('20160419-013218-123', self.cfg) - sid9 = snapshots.SID('20160419-003218-123', self.cfg) - sid10 = snapshots.SID('20160418-003218-123', self.cfg) - sid11 = snapshots.SID('20160417-033218-123', self.cfg) - sid12 = snapshots.SID('20160417-003218-123', self.cfg) - sid13 = snapshots.SID('20160416-134327-123', self.cfg) - sid14 = snapshots.SID('20160416-114327-123', self.cfg) - sid15 = snapshots.SID('20160415-134327-123', self.cfg) - sid16 = snapshots.SID('20160411-134327-123', self.cfg) - sid17 = snapshots.SID('20160410-134327-123', self.cfg) - sid18 = snapshots.SID('20160409-134327-123', self.cfg) - sid19 = snapshots.SID('20160407-134327-123', self.cfg) - sid20 = snapshots.SID('20160403-134327-123', self.cfg) - sid21 = snapshots.SID('20160402-134327-123', self.cfg) - sid22 = snapshots.SID('20160401-134327-123', self.cfg) - sid23 = snapshots.SID('20160331-134327-123', self.cfg) - sid24 = snapshots.SID('20160330-134327-123', self.cfg) - sid25 = snapshots.SID('20160323-133715-123', self.cfg) - sid26 = snapshots.SID('20160214-134327-123', self.cfg) - sid27 = snapshots.SID('20160205-134327-123', self.cfg) - sid28 = snapshots.SID('20160109-134327-123', self.cfg) - sid29 = snapshots.SID('20151224-134327-123', self.cfg) - sid30 = snapshots.SID('20150904-134327-123', self.cfg) - sid31 = snapshots.SID('20140904-134327-123', self.cfg) - - sids = [ sid1, sid2, sid3, sid4, sid5, sid6, sid7, sid8, sid9, - sid10, sid11, sid12, sid13, sid14, sid15, sid16, sid17, sid18, sid19, - sid20, sid21, sid22, sid23, sid24, sid25, sid26, sid27, sid28, sid29, - sid30, sid31] - for sid in sids: - sid.makeDirs() - now = datetime(2016, 4, 24, 21, 51, 34) - - del_snapshots = self.sn.smartRemoveList(now, - 3, #keep_all - 7, #keep_one_per_day - 5, #keep_one_per_week - 3 #keep_one_per_month - ) - self.assertListEqual(del_snapshots, [sid6, sid9, sid12, sid13, sid14, - sid15, sid16, sid18, sid19, sid21, - sid22, sid24, sid27, sid28, sid30]) - - # test failed snapshots - for sid in (sid5, sid8, sid11, sid12, sid20, sid21, sid22): - sid.failed = True - del_snapshots = self.sn.smartRemoveList(now, - 3, #keep_all - 7, #keep_one_per_day - 5, #keep_one_per_week - 3 #keep_one_per_month - ) - self.assertListEqual(del_snapshots, [sid5, sid8, sid11, sid12, sid14, - sid15, sid16, sid18, sid19, sid20, sid21, - sid22, sid24, sid27, sid28, sid30]) - - class SnapshotWithSID(generic.SnapshotsWithSidTestCase): def test_backup_config(self): self.sn.backupConfig(self.sid) diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py new file mode 100644 index 000000000..016618bf6 --- /dev/null +++ b/common/test/test_snapshots_autoremove.py @@ -0,0 +1,157 @@ +# SPDX-FileCopyrightText: © 2008-2022 Oprea Dan +# SPDX-FileCopyrightText: © 2008-2022 Bart de Koning +# SPDX-FileCopyrightText: © 2008-2022 Richard Bailey +# SPDX-FileCopyrightText: © 2008-2022 Germar Reitze +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +# This file is part of the program "Back In Time" which is released under GNU +# General Public License v2 (GPLv2). See LICENSES directory or go to +# . +import os +import sys +import grp +from datetime import date, datetime +from test import generic +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) +import snapshots + + +class SmartRemove(generic.SnapshotsTestCase): + def test_increment_month(self): + self.assertEqual(self.sn.incMonth(date(2016, 4, 21)), date(2016, 5, 1)) + self.assertEqual(self.sn.incMonth(date(2016, 12, 24)), date(2017, 1, 1)) + + def test_decrement_month(self): + self.assertEqual(self.sn.decMonth(date(2016, 4, 21)), date(2016, 3, 1)) + self.assertEqual(self.sn.decMonth(date(2016, 1, 14)), date(2015, 12, 1)) + + def test_keep_all(self): + sid1 = snapshots.SID('20160424-215134-123', self.cfg) + sid2 = snapshots.SID('20160422-030324-123', self.cfg) + sid3 = snapshots.SID('20160422-020324-123', self.cfg) + sid4 = snapshots.SID('20160422-010324-123', self.cfg) + sid5 = snapshots.SID('20160421-013218-123', self.cfg) + sid6 = snapshots.SID('20160410-134327-123', self.cfg) + sids = [sid1, sid2, sid3, sid4, sid5, sid6] + + keep = self.sn.smartRemoveKeepAll(sids, + date(2016, 4, 20), + date(2016, 4, 23)) + self.assertSetEqual(keep, set((sid2, sid3, sid4, sid5))) + + keep = self.sn.smartRemoveKeepAll(sids, + date(2016, 4, 11), + date(2016, 4, 18)) + self.assertSetEqual(keep, set()) + + def test_keep_first(self): + sid1 = snapshots.SID('20160424-215134-123', self.cfg) + sid2 = snapshots.SID('20160422-030324-123', self.cfg) + sid3 = snapshots.SID('20160422-020324-123', self.cfg) + sid4 = snapshots.SID('20160422-010324-123', self.cfg) + sid5 = snapshots.SID('20160421-013218-123', self.cfg) + sid6 = snapshots.SID('20160410-134327-123', self.cfg) + sids = [sid1, sid2, sid3, sid4, sid5, sid6] + + keep = self.sn.smartRemoveKeepFirst(sids, + date(2016, 4, 20), + date(2016, 4, 23)) + self.assertSetEqual(keep, set((sid2,))) + + keep = self.sn.smartRemoveKeepFirst(sids, + date(2016, 4, 11), + date(2016, 4, 18)) + self.assertSetEqual(keep, set()) + + def test_keep_first_no_errors(self): + sid1 = snapshots.SID('20160424-215134-123', self.cfg) + sid2 = snapshots.SID('20160422-030324-123', self.cfg) + sid2.makeDirs() + sid2.failed = True + sid3 = snapshots.SID('20160422-020324-123', self.cfg) + sid4 = snapshots.SID('20160422-010324-123', self.cfg) + sid5 = snapshots.SID('20160421-013218-123', self.cfg) + sid6 = snapshots.SID('20160410-134327-123', self.cfg) + sids = [sid1, sid2, sid3, sid4, sid5, sid6] + + # keep the first healthy snapshot + keep = self.sn.smartRemoveKeepFirst(sids, + date(2016, 4, 20), + date(2016, 4, 23), + keep_healthy = True) + self.assertSetEqual(keep, set((sid3,))) + + # if all snapshots failed, keep the first at all + for sid in (sid3, sid4, sid5): + sid.makeDirs() + sid.failed = True + keep = self.sn.smartRemoveKeepFirst(sids, + date(2016, 4, 20), + date(2016, 4, 23), + keep_healthy = True) + self.assertSetEqual(keep, set((sid2,))) + + def test_smart_remove_list(self): + sid1 = snapshots.SID('20160424-215134-123', self.cfg) + sid2 = snapshots.SID('20160422-030324-123', self.cfg) + sid3 = snapshots.SID('20160422-020324-123', self.cfg) + sid4 = snapshots.SID('20160422-010324-123', self.cfg) + sid5 = snapshots.SID('20160421-033218-123', self.cfg) + sid6 = snapshots.SID('20160421-013218-123', self.cfg) + sid7 = snapshots.SID('20160420-013218-123', self.cfg) + sid8 = snapshots.SID('20160419-013218-123', self.cfg) + sid9 = snapshots.SID('20160419-003218-123', self.cfg) + sid10 = snapshots.SID('20160418-003218-123', self.cfg) + sid11 = snapshots.SID('20160417-033218-123', self.cfg) + sid12 = snapshots.SID('20160417-003218-123', self.cfg) + sid13 = snapshots.SID('20160416-134327-123', self.cfg) + sid14 = snapshots.SID('20160416-114327-123', self.cfg) + sid15 = snapshots.SID('20160415-134327-123', self.cfg) + sid16 = snapshots.SID('20160411-134327-123', self.cfg) + sid17 = snapshots.SID('20160410-134327-123', self.cfg) + sid18 = snapshots.SID('20160409-134327-123', self.cfg) + sid19 = snapshots.SID('20160407-134327-123', self.cfg) + sid20 = snapshots.SID('20160403-134327-123', self.cfg) + sid21 = snapshots.SID('20160402-134327-123', self.cfg) + sid22 = snapshots.SID('20160401-134327-123', self.cfg) + sid23 = snapshots.SID('20160331-134327-123', self.cfg) + sid24 = snapshots.SID('20160330-134327-123', self.cfg) + sid25 = snapshots.SID('20160323-133715-123', self.cfg) + sid26 = snapshots.SID('20160214-134327-123', self.cfg) + sid27 = snapshots.SID('20160205-134327-123', self.cfg) + sid28 = snapshots.SID('20160109-134327-123', self.cfg) + sid29 = snapshots.SID('20151224-134327-123', self.cfg) + sid30 = snapshots.SID('20150904-134327-123', self.cfg) + sid31 = snapshots.SID('20140904-134327-123', self.cfg) + + sids = [ sid1, sid2, sid3, sid4, sid5, sid6, sid7, sid8, sid9, + sid10, sid11, sid12, sid13, sid14, sid15, sid16, sid17, sid18, sid19, + sid20, sid21, sid22, sid23, sid24, sid25, sid26, sid27, sid28, sid29, + sid30, sid31] + for sid in sids: + sid.makeDirs() + now = datetime(2016, 4, 24, 21, 51, 34) + + del_snapshots = self.sn.smartRemoveList(now, + 3, #keep_all + 7, #keep_one_per_day + 5, #keep_one_per_week + 3 #keep_one_per_month + ) + self.assertListEqual(del_snapshots, [sid6, sid9, sid12, sid13, sid14, + sid15, sid16, sid18, sid19, sid21, + sid22, sid24, sid27, sid28, sid30]) + + # test failed snapshots + for sid in (sid5, sid8, sid11, sid12, sid20, sid21, sid22): + sid.failed = True + del_snapshots = self.sn.smartRemoveList(now, + 3, #keep_all + 7, #keep_one_per_day + 5, #keep_one_per_week + 3 #keep_one_per_month + ) + self.assertListEqual(del_snapshots, [sid5, sid8, sid11, sid12, sid14, + sid15, sid16, sid18, sid19, sid20, sid21, + sid22, sid24, sid27, sid28, sid30]) From 934b7b153d9c6c3178a0f0a02075e6b43fb8abc2 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 24 Nov 2024 15:57:57 +0100 Subject: [PATCH 02/30] keepfirst simple tests --- common/snapshots.py | 3 +- common/test/test_sid.py | 1 - common/test/test_snapshots_autoremove.py | 127 ++++++++++++++++++++++- 3 files changed, 126 insertions(+), 5 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index f86f66418..5e5c7faf7 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -2434,7 +2434,8 @@ def __init__(self, date, cfg): raise LastSnapshotSymlink() else: - raise ValueError("'date' must be in snapshot ID format (e.g 20151218-173512-123)") + raise ValueError("'date' must be in snapshot ID format " + f"(e.g 20151218-173512-123) but is '{date}'") else: raise TypeError("'date' must be an instance of str, datetime.date or datetime.datetime") diff --git a/common/test/test_sid.py b/common/test/test_sid.py index 84346b94c..bc8d44885 100644 --- a/common/test/test_sid.py +++ b/common/test/test_sid.py @@ -14,7 +14,6 @@ # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation,Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - import os import sys import unittest diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 016618bf6..26e18d5bc 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -2,6 +2,7 @@ # SPDX-FileCopyrightText: © 2008-2022 Bart de Koning # SPDX-FileCopyrightText: © 2008-2022 Richard Bailey # SPDX-FileCopyrightText: © 2008-2022 Germar Reitze +# SPDX-FileCopyrightText: © 2024 Christian Buhtz # # SPDX-License-Identifier: GPL-2.0-or-later # @@ -10,14 +11,134 @@ # . import os import sys -import grp -from datetime import date, datetime +import inspect +from typing import Union +from datetime import date, time, datetime, timedelta +from pathlib import Path +from tempfile import TemporaryDirectory from test import generic +import pyfakefs.fake_filesystem_unittest as pyfakefs_ut sys.path.append(os.path.join(os.path.dirname(__file__), '..')) -import snapshots +import config # noqa: E402,RUF100 +import snapshots # noqa: E402,RUF100 + + +def sid2str(year, + month, + day, + hour=None, + minute=None, + seconds=None, + tag=123): + """Create a SID identification string out ouf date and time infos.""" + return '{year:04}{month:02}{day:02}-' \ + '{hour:02}{minute:02}{seconds:02}-{tag}'.format( + year=year, + month=month, + day=day, + hour=hour or 7, + minute=minute or 42, + seconds=seconds or 31, + tag=tag) + + +def dt2str(d: Union[date, datetime], t: time = None, tag: int = 123): + """Create a SID identification string out ouf a date and time infos.""" + if not t: + try: + # If d is datetime + t = d.time() + except AttributeError: + t = time(7, 42, 31) + + return datetime.combine(d, t).strftime(f'%Y%m%d-%H%M%S-{tag}') + + +def create_SIDs(start_date: Union[date, datetime], + days: int, + cfg: config.Config): + sids = [] + for d in [start_date + timedelta(days=x) for x in range(days)]: + sids.append(snapshots.SID(dt2str(d), cfg)) + + return sids + + +class KeepFirst(pyfakefs_ut.TestCase): + def setUp(self): + """Setup a fake filesystem.""" + self.setUpPyfakefs(allow_root_user=False) + + # cleanup() happens automatically + # pylint: disable-next=consider-using-with + self._temp_dir = TemporaryDirectory(prefix='bit.') + # Workaround: tempfile and pathlib not compatible yet + self.temp_path = Path(self._temp_dir.name) + + self._config_fp = self._create_config_file(parent_path=self.temp_path) + self.cfg = config.Config(str(self._config_fp)) + + self.sn = snapshots.Snapshots(self.cfg) + + def _create_config_file(self, parent_path): + """Minimal config file""" + # pylint: disable-next=R0801 + cfg_content = inspect.cleandoc(''' + config.version=6 + profile1.snapshots.include.1.type=0 + profile1.snapshots.include.1.value=rootpath/source + profile1.snapshots.include.size=1 + profile1.snapshots.no_on_battery=false + profile1.snapshots.notify.enabled=true + profile1.snapshots.path=rootpath/destination + profile1.snapshots.path.host=test-host + profile1.snapshots.path.profile=1 + profile1.snapshots.path.user=test-user + profile1.snapshots.preserve_acl=false + profile1.snapshots.preserve_xattr=false + profile1.snapshots.remove_old_snapshots.enabled=true + profile1.snapshots.remove_old_snapshots.unit=80 + profile1.snapshots.remove_old_snapshots.value=10 + profile1.snapshots.rsync_options.enabled=false + profile1.snapshots.rsync_options.value= + profiles.version=1 + ''') + + # config file location + config_fp = parent_path / 'config_path' / 'config' + config_fp.parent.mkdir() + config_fp.write_text(cfg_content, 'utf-8') + + return config_fp + + def test_one_but_set(self): + """Return value is always a set with always only one element.""" + # One SID for each of 20 days beginning with 5th March 2022 07:42:31 + sids = create_SIDs( + datetime(2020, 3, 5, 7, 42, 31), 700, self.cfg) + + sut = self.sn.smartRemoveKeepFirst( + sids, date(2021, 8, 5), datetime.now().date()) + + self.assertIsInstance(sut, set) + self.assertTrue(len(sut), 1) + + def test_simple(self): + """First element in a range of SIDs""" + sids = create_SIDs( + datetime(2022, 3, 5, 7, 42, 31), 20, self.cfg) + + sut = self.sn.smartRemoveKeepFirst( + sids, date(2022, 3, 5), datetime.now().date()) + sut = sut.pop() + + self.assertTrue(str(sut).startswith('20220305-074231-')) class SmartRemove(generic.SnapshotsTestCase): + """This is the old/original test case using real filesystem and to much + dependencies.""" + def test_increment_month(self): self.assertEqual(self.sn.incMonth(date(2016, 4, 21)), date(2016, 5, 1)) self.assertEqual(self.sn.incMonth(date(2016, 12, 24)), date(2017, 1, 1)) From bf79e80e2b8f7137c39252c9a4b6d1dc03e36d71 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 24 Nov 2024 16:21:49 +0100 Subject: [PATCH 03/30] test invalid SIDs --- common/test/test_snapshots_autoremove.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 26e18d5bc..31156eced 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -12,6 +12,7 @@ import os import sys import inspect +from unittest import mock from typing import Union from datetime import date, time, datetime, timedelta from pathlib import Path @@ -65,6 +66,10 @@ def create_SIDs(start_date: Union[date, datetime], class KeepFirst(pyfakefs_ut.TestCase): + """Test Snapshot.removeKeepFirst(). + + PyFakeFS is used here because of Config file dependency.""" + def setUp(self): """Setup a fake filesystem.""" self.setUpPyfakefs(allow_root_user=False) @@ -134,6 +139,23 @@ def test_simple(self): self.assertTrue(str(sut).startswith('20220305-074231-')) + @mock.patch.object(snapshots.SID, 'failed', new_callable=lambda: True) + def test_all_invalid(self, _mock_failed): + """All SIDS invalid (not healthy)""" + sids = create_SIDs( + datetime(2022, 3, 5, 7, 42, 31), 20, self.cfg) + + # By default healthy/invalid status is irrelevant + sut = self.sn.smartRemoveKeepFirst( + sids, date(2022, 3, 5), datetime.now().date()) + self.assertTrue(len(sut), 1) + + # Now make it relevant + sut = self.sn.smartRemoveKeepFirst( + sids, date(2022, 3, 5), datetime.now().date(), + keep_healthy=True) + self.assertTrue(len(sut), 0) + class SmartRemove(generic.SnapshotsTestCase): """This is the old/original test case using real filesystem and to much From e50fe43b0daa0f62c280d9784ac755649b68a1ff Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 24 Nov 2024 17:50:32 +0100 Subject: [PATCH 04/30] pain in the ass! --- common/snapshots.py | 4 + common/test/test_snapshots_autoremove.py | 133 +++++++++++++++++++++++ 2 files changed, 137 insertions(+) diff --git a/common/snapshots.py b/common/snapshots.py index 5e5c7faf7..ecf67d1d9 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -1559,6 +1559,7 @@ def smartRemoveKeepFirst(self, Returns: set: set of snapshots that should be kept """ + print(f'smartRemoveKeepFirst() :: {min_date=} {max_date=}') # DEBUG min_id = SID(min_date, self.config) max_id = SID(max_date, self.config) @@ -1569,7 +1570,10 @@ def smartRemoveKeepFirst(self, if keep_healthy and sid.failed: logger.debug("Do not keep failed snapshot %s" %sid, self) continue + # DEBUG + print(f'smartRemoveKeepFirst() :: for sid ... sid={str(sid)}') if sid >= min_id and sid < max_id: + print(f' return {str(sid)}') return set([sid]) # if all snapshots failed return the first snapshot # no matter if it has errors diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 31156eced..1e1cd478e 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -55,6 +55,17 @@ def dt2str(d: Union[date, datetime], t: time = None, tag: int = 123): return datetime.combine(d, t).strftime(f'%Y%m%d-%H%M%S-{tag}') +def sid2str(sid): + """Convert a SID string into human readable date incl. weekday.""" + result = datetime.strptime(sid.split('-')[0], '%Y%m%d') \ + .date().strftime('%c').strip() + + if result.endswith(' 00:00:00'): + result = result[:-9] + + return result + + def create_SIDs(start_date: Union[date, datetime], days: int, cfg: config.Config): @@ -157,6 +168,128 @@ def test_all_invalid(self, _mock_failed): self.assertTrue(len(sut), 0) +class OnePerWeek(pyfakefs_ut.TestCase): + """Covering the smart remove setting 'Keep one snapshot per week for the + last N weeks'. + + That logic is implemented in 'Snapshots.smartRemoveList()' but not testable + in isolation. So for a first shot we just duplicate that code in this + tests (see self._org()). + """ + + def setUp(self): + """Setup a fake filesystem.""" + self.setUpPyfakefs(allow_root_user=False) + + # cleanup() happens automatically + # pylint: disable-next=consider-using-with + self._temp_dir = TemporaryDirectory(prefix='bit.') + # Workaround: tempfile and pathlib not compatible yet + self.temp_path = Path(self._temp_dir.name) + + self._config_fp = self._create_config_file(parent_path=self.temp_path) + self.cfg = config.Config(str(self._config_fp)) + + self.sn = snapshots.Snapshots(self.cfg) + + def _create_config_file(self, parent_path): + """Minimal config file""" + # pylint: disable-next=R0801 + cfg_content = inspect.cleandoc(''' + config.version=6 + profile1.snapshots.include.1.type=0 + profile1.snapshots.include.1.value=rootpath/source + profile1.snapshots.include.size=1 + profile1.snapshots.no_on_battery=false + profile1.snapshots.notify.enabled=true + profile1.snapshots.path=rootpath/destination + profile1.snapshots.path.host=test-host + profile1.snapshots.path.profile=1 + profile1.snapshots.path.user=test-user + profile1.snapshots.preserve_acl=false + profile1.snapshots.preserve_xattr=false + profile1.snapshots.remove_old_snapshots.enabled=true + profile1.snapshots.remove_old_snapshots.unit=80 + profile1.snapshots.remove_old_snapshots.value=10 + profile1.snapshots.rsync_options.enabled=false + profile1.snapshots.rsync_options.value= + profiles.version=1 + ''') + + # config file location + config_fp = parent_path / 'config_path' / 'config' + config_fp.parent.mkdir() + config_fp.write_text(cfg_content, 'utf-8') + + return config_fp + + def _org(self, now, n_weeks, snapshots, keep_healthy=True): + """Keep one per week for the last n_weeks weeks. + + Copied and slightly refactored from inside + 'Snapshots.smartRemoveList()'. + """ + print(f'_org() :: {now=} {n_weeks=}') + keep = set() + + # Sunday (Sonntag) of previous week + idx_date = now - timedelta(days=now.weekday() + 1) + + print(f'_org() :: {idx_date=} {idx_date.weekday()=} {now.weekday()=}') + + for i in range(0, n_weeks): + print(f' for ... :: {idx_date=} {idx_date + timedelta(days=8)=}') + keep |= self.sn.smartRemoveKeepFirst( + snapshots, + idx_date, + idx_date + timedelta(days=8), + keep_healthy=keep_healthy) + + idx_date -= timedelta(days=7) + + return keep + + def test_sunday_last_week(self): + """Keep sunday of the last week.""" + # 9 backups: 18th (Monday) - 26th (Thursday) March 2024 + sids = create_SIDs(date(2024, 3, 18), 9, self.cfg) + + sut = self._org( + # "Today" is Thursday 28th March + now=date(2024, 3, 28), + # Keep the last week + n_weeks=1, + snapshots=sids) + + # only one kept + self.assertTrue(len(sut), 1) + # Sunday March 24th + self.assertTrue(str(sut.pop()).startswith('20240324-')) + + def test_three_weeks(self): + """Keep sunday of the last 3 weeks and throw away the rest.""" + + # 6 Weeks of backups (2024-02-18 - 2024-03-30) + sids = create_SIDs(datetime(2024, 2, 18), 7*6, self.cfg) + print(f'{str(sids[0])=} {str(sids[-1])=}') + + sut = self._org( + # "Today" is Thursday 28th March + now=date(2024, 3, 28), + # Keep the last week + n_weeks=3, + snapshots=sids) + + # only one kept + self.assertTrue(len(sut), 3) + sut = sorted(sut) + for s in sut: + print(s) + self.assertTrue(sut[0].startswith('20240324-')) + self.assertTrue(sut[1].startswith('20240317-')) + self.assertTrue(sut[2].startswith('20240310-')) + + class SmartRemove(generic.SnapshotsTestCase): """This is the old/original test case using real filesystem and to much dependencies.""" From 598c452f8f18736fff4ae2d8618ad7e2d6a816ca Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 24 Nov 2024 22:21:49 +0100 Subject: [PATCH 05/30] x [skip ci] --- common/snapshots.py | 9 +-- common/test/test_snapshots_autoremove.py | 86 ++++++++++++++++-------- 2 files changed, 63 insertions(+), 32 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index ecf67d1d9..646e51ab6 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -1559,7 +1559,7 @@ def smartRemoveKeepFirst(self, Returns: set: set of snapshots that should be kept """ - print(f'smartRemoveKeepFirst() :: {min_date=} {max_date=}') # DEBUG + # print(f'smartRemoveKeepFirst() :: {min_date=} {max_date=}') # DEBUG min_id = SID(min_date, self.config) max_id = SID(max_date, self.config) @@ -1571,9 +1571,9 @@ def smartRemoveKeepFirst(self, logger.debug("Do not keep failed snapshot %s" %sid, self) continue # DEBUG - print(f'smartRemoveKeepFirst() :: for sid ... sid={str(sid)}') + # print(f'smartRemoveKeepFirst() :: for sid ... sid={str(sid)}') if sid >= min_id and sid < max_id: - print(f' return {str(sid)}') + # print(f' return {str(sid)}') return set([sid]) # if all snapshots failed return the first snapshot # no matter if it has errors @@ -2442,7 +2442,8 @@ def __init__(self, date, cfg): f"(e.g 20151218-173512-123) but is '{date}'") else: - raise TypeError("'date' must be an instance of str, datetime.date or datetime.datetime") + raise TypeError("'date' must be an instance of str, datetime.date " + f"or datetime.datetime but is '{date}'") def __repr__(self): return self.sid diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 1e1cd478e..4dcbc3d4e 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -24,26 +24,26 @@ import snapshots # noqa: E402,RUF100 -def sid2str(year, - month, - day, - hour=None, - minute=None, - seconds=None, - tag=123): - """Create a SID identification string out ouf date and time infos.""" - return '{year:04}{month:02}{day:02}-' \ - '{hour:02}{minute:02}{seconds:02}-{tag}'.format( - year=year, - month=month, - day=day, - hour=hour or 7, - minute=minute or 42, - seconds=seconds or 31, - tag=tag) - - -def dt2str(d: Union[date, datetime], t: time = None, tag: int = 123): +# def timestmap2sidstr(year, +# month, +# day, +# hour=None, +# minute=None, +# seconds=None, +# tag=123): +# """Create a SID identification string out ouf date and time infos.""" +# return '{year:04}{month:02}{day:02}-' \ +# '{hour:02}{minute:02}{seconds:02}-{tag}'.format( +# year=year, +# month=month, +# day=day, +# hour=hour or 7, +# minute=minute or 42, +# seconds=seconds or 31, +# tag=tag) + + +def dt2sidstr(d: Union[date, datetime], t: time = None, tag: int = 123): """Create a SID identification string out ouf a date and time infos.""" if not t: try: @@ -55,8 +55,16 @@ def dt2str(d: Union[date, datetime], t: time = None, tag: int = 123): return datetime.combine(d, t).strftime(f'%Y%m%d-%H%M%S-{tag}') +def dt2str(d: Union[date, datetime]): + return d.strftime('%a %d %b %Y') + + def sid2str(sid): """Convert a SID string into human readable date incl. weekday.""" + + if isinstance(sid, snapshots.SID): + sid = str(sid) + result = datetime.strptime(sid.split('-')[0], '%Y%m%d') \ .date().strftime('%c').strip() @@ -71,7 +79,7 @@ def create_SIDs(start_date: Union[date, datetime], cfg: config.Config): sids = [] for d in [start_date + timedelta(days=x) for x in range(days)]: - sids.append(snapshots.SID(dt2str(d), cfg)) + sids.append(snapshots.SID(dt2sidstr(d), cfg)) return sids @@ -229,26 +237,48 @@ def _org(self, now, n_weeks, snapshots, keep_healthy=True): Copied and slightly refactored from inside 'Snapshots.smartRemoveList()'. """ - print(f'_org() :: {now=} {n_weeks=}') + print(f'\n_org() :: now={dt2str(now)} {n_weeks=}') keep = set() - # Sunday (Sonntag) of previous week + # Sunday ??? (Sonntag) of previous week idx_date = now - timedelta(days=now.weekday() + 1) - print(f'_org() :: {idx_date=} {idx_date.weekday()=} {now.weekday()=}') - + print(f' for-loop... idx_date={dt2str(idx_date)}') for i in range(0, n_weeks): - print(f' for ... :: {idx_date=} {idx_date + timedelta(days=8)=}') + + min_date = idx_date + max_date = idx_date + timedelta(days=8) + + print(f' from {dt2str(min_date)} to/before {dt2str(max_date)}') keep |= self.sn.smartRemoveKeepFirst( snapshots, - idx_date, - idx_date + timedelta(days=8), + min_date, + max_date, keep_healthy=keep_healthy) idx_date -= timedelta(days=7) + print(f' new idx_date={dt2str(idx_date)}') + print(' ...end loop') return keep + def test_foobar(self): + start = date(2024, 10, 29) + now = date(2024, 11, 18) + sids = create_SIDs(start, 9*7+3, self.cfg) + print(f'\nsnapshots from: {sid2str(sids[0])} to: {sid2str(sids[-1])}') + + sut = self._org( + # "Today" is Thursday 28th March + now=now, + # Keep the last week + n_weeks=5, + snapshots=sids) + + for s in sorted(sut): + print(f'keep: {sid2str(s)}') + print(f'from: {dt2str(now)}') + def test_sunday_last_week(self): """Keep sunday of the last week.""" # 9 backups: 18th (Monday) - 26th (Thursday) March 2024 From 8df2817cf874d43a9df657283333a055aaf9333b Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Mon, 25 Nov 2024 21:11:16 +0100 Subject: [PATCH 06/30] improve debug output [skip ci] --- common/test/test_snapshots_autoremove.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 4dcbc3d4e..aac191924 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -263,21 +263,23 @@ def _org(self, now, n_weeks, snapshots, keep_healthy=True): return keep def test_foobar(self): - start = date(2024, 10, 29) - now = date(2024, 11, 18) + start = date(2022, 1, 15) + now = date(2022, 3, 5) sids = create_SIDs(start, 9*7+3, self.cfg) - print(f'\nsnapshots from: {sid2str(sids[0])} to: {sid2str(sids[-1])}') + weeks = 5 sut = self._org( # "Today" is Thursday 28th March now=now, # Keep the last week - n_weeks=5, + n_weeks=weeks, snapshots=sids) + print(f'\noldest snapshot: {sid2str(sids[0])}') for s in sorted(sut): print(f'keep: {sid2str(s)}') - print(f'from: {dt2str(now)}') + print(f'from/now: {dt2str(now)} {weeks=}') + print(f'latest snapshot: {sid2str(sids[-1])}') def test_sunday_last_week(self): """Keep sunday of the last week.""" From 2f3adb0ceab027f86103a83a7d434503d206b6a6 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Mon, 25 Nov 2024 21:58:47 +0100 Subject: [PATCH 07/30] refactor: incremend & decrement months --- common/snapshots.py | 32 +++++---- common/test/test_snapshots_autoremove.py | 86 +++++++++++++++++++++--- 2 files changed, 97 insertions(+), 21 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index 646e51ab6..07e531462 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -3,16 +3,18 @@ # SPDX-FileCopyrightText: © 2008-2022 Richard Bailey # SPDX-FileCopyrightText: © 2008-2022 Germar Reitze # SPDX-FileCopyrightText: © 2008-2022 Taylor Raack +# SPDX-FileCopyrightText: © 2024 Christian Buhtz # # SPDX-License-Identifier: GPL-2.0-or-later # -# This file is part of the program "Back In time" which is released under GNU +# This file is part of the program "Back In Time" which is released under GNU # General Public License v2 (GPLv2). See file/folder LICENSE or go to # . import os from pathlib import Path import stat import datetime +import calendar import gettext import bz2 import pwd @@ -1595,12 +1597,13 @@ def incMonth(self, date): Returns: datetime.date: 1st day of next month """ - y = date.year - m = date.month + 1 - if m > 12: - m = 1 - y = y + 1 - return datetime.date(y, m, 1) + # Last day in current month + last = datetime.date( + year=date.year, + month=date.month, + day=calendar.monthrange(date.year, date.month)[1]) + + return last + datetime.timedelta(days=1) def decMonth(self, date): """ @@ -1614,12 +1617,15 @@ def decMonth(self, date): Returns: datetime.date: 1st day of previous month """ - y = date.year - m = date.month - 1 - if m < 1: - m = 12 - y = y - 1 - return datetime.date(y, m, 1) + # First day of current month + first = datetime.date(year=date.year, month=date.month, day=1) + + # Last day of previous month + prev = first - datetime.timedelta(days=1) + + # First day of previous month + return datetime.date(year=prev.year, month=prev.month, day=1) + def smartRemoveList(self, now_full, diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index aac191924..65756ba91 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -322,18 +322,88 @@ def test_three_weeks(self): self.assertTrue(sut[2].startswith('20240310-')) +class IncDecMonths(pyfakefs_ut.TestCase): + """PyFakeFS is used here because of Config file dependency.""" + + def setUp(self): + """Setup a fake filesystem.""" + self.setUpPyfakefs(allow_root_user=False) + + # cleanup() happens automatically + # pylint: disable-next=consider-using-with + self._temp_dir = TemporaryDirectory(prefix='bit.') + # Workaround: tempfile and pathlib not compatible yet + self.temp_path = Path(self._temp_dir.name) + + self._config_fp = self._create_config_file(parent_path=self.temp_path) + self.cfg = config.Config(str(self._config_fp)) + + self.sn = snapshots.Snapshots(self.cfg) + + def _create_config_file(self, parent_path): + """Minimal config file""" + # pylint: disable-next=R0801 + cfg_content = inspect.cleandoc(''' + config.version=6 + profile1.snapshots.include.1.type=0 + profile1.snapshots.include.1.value=rootpath/source + profile1.snapshots.include.size=1 + profile1.snapshots.no_on_battery=false + profile1.snapshots.notify.enabled=true + profile1.snapshots.path=rootpath/destination + profile1.snapshots.path.host=test-host + profile1.snapshots.path.profile=1 + profile1.snapshots.path.user=test-user + profile1.snapshots.preserve_acl=false + profile1.snapshots.preserve_xattr=false + profile1.snapshots.remove_old_snapshots.enabled=true + profile1.snapshots.remove_old_snapshots.unit=80 + profile1.snapshots.remove_old_snapshots.value=10 + profile1.snapshots.rsync_options.enabled=false + profile1.snapshots.rsync_options.value= + profiles.version=1 + ''') + + # config file location + config_fp = parent_path / 'config_path' / 'config' + config_fp.parent.mkdir() + config_fp.write_text(cfg_content, 'utf-8') + + return config_fp + + def test_inc_simple(self): + sut = self.sn.incMonth(date(1982, 8, 6)) + self.assertEqual(sut, date(1982, 9, 1)) + + def test_inc_next_year(self): + sut = self.sn.incMonth(date(1982, 12, 16)) + self.assertEqual(sut, date(1983, 1, 1)) + + def test_inc_leap_year(self): + sut = self.sn.incMonth(date(2020, 12, 16)) + self.assertEqual(sut, date(2021, 1, 1)) + + def test_inc_leap_months(self): + sut = self.sn.incMonth(date(2020, 2, 29)) + self.assertEqual(sut, date(2020, 3, 1)) + + def test_dec_simple(self): + sut = self.sn.decMonth(date(1982, 8, 6)) + self.assertEqual(sut, date(1982, 7, 1)) + + def test_dec_year(self): + sut = self.sn.decMonth(date(1982, 1, 6)) + self.assertEqual(sut, date(1981, 12, 1)) + + def test_dec_leap_months(self): + sut = self.sn.decMonth(date(2020, 2, 29)) + self.assertEqual(sut, date(2020, 1, 1)) + + class SmartRemove(generic.SnapshotsTestCase): """This is the old/original test case using real filesystem and to much dependencies.""" - def test_increment_month(self): - self.assertEqual(self.sn.incMonth(date(2016, 4, 21)), date(2016, 5, 1)) - self.assertEqual(self.sn.incMonth(date(2016, 12, 24)), date(2017, 1, 1)) - - def test_decrement_month(self): - self.assertEqual(self.sn.decMonth(date(2016, 4, 21)), date(2016, 3, 1)) - self.assertEqual(self.sn.decMonth(date(2016, 1, 14)), date(2015, 12, 1)) - def test_keep_all(self): sid1 = snapshots.SID('20160424-215134-123', self.cfg) sid2 = snapshots.SID('20160422-030324-123', self.cfg) From 3a76781300a19f6caf3315670ba33fa9c408fb24 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Tue, 26 Nov 2024 11:57:20 +0100 Subject: [PATCH 08/30] x --- common/test/test_snapshots_autoremove.py | 50 ++++++++++++------------ 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 65756ba91..582ee9d76 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -24,25 +24,6 @@ import snapshots # noqa: E402,RUF100 -# def timestmap2sidstr(year, -# month, -# day, -# hour=None, -# minute=None, -# seconds=None, -# tag=123): -# """Create a SID identification string out ouf date and time infos.""" -# return '{year:04}{month:02}{day:02}-' \ -# '{hour:02}{minute:02}{seconds:02}-{tag}'.format( -# year=year, -# month=month, -# day=day, -# hour=hour or 7, -# minute=minute or 42, -# seconds=seconds or 31, -# tag=tag) - - def dt2sidstr(d: Union[date, datetime], t: time = None, tag: int = 123): """Create a SID identification string out ouf a date and time infos.""" if not t: @@ -74,11 +55,17 @@ def sid2str(sid): return result -def create_SIDs(start_date: Union[date, datetime], +def create_SIDs(start_date: Union[date, datetime, list[date]], days: int, cfg: config.Config): sids = [] - for d in [start_date + timedelta(days=x) for x in range(days)]: + + if isinstance(start_date, list): + the_dates = start_date + else: + the_dates = [start_date + timedelta(days=x) for x in range(days)] + + for d in the_dates: sids.append(snapshots.SID(dt2sidstr(d), cfg)) return sids @@ -247,7 +234,7 @@ def _org(self, now, n_weeks, snapshots, keep_healthy=True): for i in range(0, n_weeks): min_date = idx_date - max_date = idx_date + timedelta(days=8) + max_date = idx_date + timedelta(days=7) print(f' from {dt2str(min_date)} to/before {dt2str(max_date)}') keep |= self.sn.smartRemoveKeepFirst( @@ -255,6 +242,7 @@ def _org(self, now, n_weeks, snapshots, keep_healthy=True): min_date, max_date, keep_healthy=keep_healthy) + print(f' {keep=}') idx_date -= timedelta(days=7) print(f' new idx_date={dt2str(idx_date)}') @@ -264,10 +252,20 @@ def _org(self, now, n_weeks, snapshots, keep_healthy=True): def test_foobar(self): start = date(2022, 1, 15) - now = date(2022, 3, 5) - sids = create_SIDs(start, 9*7+3, self.cfg) - - weeks = 5 + now = date(2024, 11, 26) + # sids = create_SIDs(start, 9*7+3, self.cfg) + sids = create_SIDs( + [ + date(2024, 11, 2), + date(2024, 11, 9), + date(2024, 11, 16), + date(2024, 11, 23) + ], + None, + self.cfg + ) + + weeks = 3 sut = self._org( # "Today" is Thursday 28th March now=now, From 55581fe772e32b549e1d7d431c3d7e6368c5acd9 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Tue, 26 Nov 2024 14:12:27 +0100 Subject: [PATCH 09/30] x [skipp test] --- common/test/test_snapshots_autoremove.py | 1 + 1 file changed, 1 insertion(+) diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 582ee9d76..aadd18ab7 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -398,6 +398,7 @@ def test_dec_leap_months(self): self.assertEqual(sut, date(2020, 1, 1)) + class SmartRemove(generic.SnapshotsTestCase): """This is the old/original test case using real filesystem and to much dependencies.""" From 330e046c3ecad5a8daee57bf826bbd9638fe71d0 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Tue, 26 Nov 2024 20:36:43 +0100 Subject: [PATCH 10/30] x [skip ci] --- common/test/test_snapshots_autoremove.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index aadd18ab7..34ade79cb 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -259,7 +259,8 @@ def test_foobar(self): date(2024, 11, 2), date(2024, 11, 9), date(2024, 11, 16), - date(2024, 11, 23) + date(2024, 11, 23), + # date(2024, 11, 25) ], None, self.cfg @@ -398,7 +399,6 @@ def test_dec_leap_months(self): self.assertEqual(sut, date(2020, 1, 1)) - class SmartRemove(generic.SnapshotsTestCase): """This is the old/original test case using real filesystem and to much dependencies.""" From 0f3bbbf6c077bc114a4ac12f7608e540b9b61be6 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Wed, 27 Nov 2024 21:57:21 +0100 Subject: [PATCH 11/30] start docu --- doc/maintain/1_doc_howto.md | 2 +- doc/maintain/5_auto_smart_remove.md | 26 ++++++++++++++++++++++++++ doc/maintain/{ => _images}/REUSE.toml | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 doc/maintain/5_auto_smart_remove.md rename doc/maintain/{ => _images}/REUSE.toml (96%) diff --git a/doc/maintain/1_doc_howto.md b/doc/maintain/1_doc_howto.md index 2f6cb229f..b5ee560ac 100644 --- a/doc/maintain/1_doc_howto.md +++ b/doc/maintain/1_doc_howto.md @@ -4,7 +4,7 @@ SPDX-FileCopyrightText: © 2024 Christian Buhtz SPDX-License-Identifier: GPL-2.0-or-later This file is part of the program "Back In Time" which is released under GNU -General Public License v2 (GPLv2). See file/folder LICENSE or go to +General Public License v2 (GPLv2). See LICENSES folder or go to --> diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md new file mode 100644 index 000000000..ffc93b176 --- /dev/null +++ b/doc/maintain/5_auto_smart_remove.md @@ -0,0 +1,26 @@ + +* [Introduction](#introduction) +* [What we know](#what_we_know) +* [What we don't](#what_we_dont_know) + +# Introduction +The actual auto- and smart-remove behavior of BIT will be described in this +document. Don't take this as a regular user manual. The document will help to +decide how that feature can be revised. See +[Meta Issue #1945](https://github.com/bit-team/backintime/issues/1945) about +the background story. + +# What we know + +# What we don't know +A lot! + +December 2024 diff --git a/doc/maintain/REUSE.toml b/doc/maintain/_images/REUSE.toml similarity index 96% rename from doc/maintain/REUSE.toml rename to doc/maintain/_images/REUSE.toml index 6339bff8d..e8014c771 100644 --- a/doc/maintain/REUSE.toml +++ b/doc/maintain/_images/REUSE.toml @@ -12,6 +12,6 @@ version = 1 [[annotations]] -path = "_images/**" +path = "*" SPDX-License-Identifier = "GPL-2.0-or-later" SPDX-FileCopyrightText = "© 2024 Back In Time Team" From 895be19d6ae8656823e0df4cd74b703b1ae76bf5 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Wed, 27 Nov 2024 21:59:46 +0100 Subject: [PATCH 12/30] toc [skip ci] --- doc/maintain/5_auto_smart_remove.md | 6 ++++-- doc/maintain/README.md | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index ffc93b176..c82e7f3b2 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -7,9 +7,11 @@ This file is part of the program "Back In Time" which is released under GNU General Public License v2 (GPLv2). See LICENSES folder or go to --> +# Auto- & Smart-Remove +## Table of contents * [Introduction](#introduction) -* [What we know](#what_we_know) -* [What we don't](#what_we_dont_know) +* [What we know](#what-we-know) +* [What we don't](#what-we-dont-know) # Introduction The actual auto- and smart-remove behavior of BIT will be described in this diff --git a/doc/maintain/README.md b/doc/maintain/README.md index 84bcda29c..e59eb2307 100644 --- a/doc/maintain/README.md +++ b/doc/maintain/README.md @@ -16,6 +16,7 @@ General Public License v2 (GPLv2). See directory LICENSES or go to - [How to setup openssh for unit tests](3_How_to_set_up_openssh_server_for_ssh_unit_tests.md) - [Usage of control files (locks, flocks, logs and others)](4_Control_files_usage_(locks_flocks_logs_and_others).md) - [How to prepare and publish a new BiT release](BiT_release_process.md) +- [Auto- & Smart-Remove](auto_smart_remove.md) Sept 2024 From ba214c82bcf3ac35fb0e738fe08e646acd95d10f Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Wed, 27 Nov 2024 22:00:28 +0100 Subject: [PATCH 13/30] [skip ci] --- doc/maintain/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/maintain/README.md b/doc/maintain/README.md index e59eb2307..286d510ca 100644 --- a/doc/maintain/README.md +++ b/doc/maintain/README.md @@ -16,7 +16,7 @@ General Public License v2 (GPLv2). See directory LICENSES or go to - [How to setup openssh for unit tests](3_How_to_set_up_openssh_server_for_ssh_unit_tests.md) - [Usage of control files (locks, flocks, logs and others)](4_Control_files_usage_(locks_flocks_logs_and_others).md) - [How to prepare and publish a new BiT release](BiT_release_process.md) -- [Auto- & Smart-Remove](auto_smart_remove.md) +- [Auto- & Smart-Remove](5_auto_smart_remove.md) Sept 2024 From 4aa312309b9d34c4f63bca60b7258661dec786ad Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Wed, 27 Nov 2024 22:17:26 +0100 Subject: [PATCH 14/30] [skip ci] --- doc/maintain/5_auto_smart_remove.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index c82e7f3b2..b9a7500d8 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -20,7 +20,30 @@ decide how that feature can be revised. See [Meta Issue #1945](https://github.com/bit-team/backintime/issues/1945) about the background story. +![Aut-remove tab](https://translate.codeberg.org/media/screenshots/bit_manage_profiles_autoremove.gif) + # What we know +## Location in code +* `common/snapshots.py` + * `Snapshots.freeSpace()` is the main entry for the overall logic. + * `Snapshots.smartRemoveList()` is called by `freeSpace()` and is the entry + for _Smart remove_ related rules. + +## Weekly +GUI wording: _Keep one snapshot per week for the last `N` week(s)._ + +Current behavior of the algorithm: +* A "week" is defined based on the weekdays Monday to Sunday. +* The first week BIT is looking into is the current week even if it is not + completed yet. E.g. today is Wednesday the 27th November, BIT will look + for existing backups starting with Sunday the 24th ending and including the + Saturday 30th November. +* If there is not backup in the current week found that week is "lost" and + there will only be `N-1` backups in the resulting list of weekly backups. +* See + * [#1094](https://github.com/bit-team/backintime/issues/1094) + * [PR #1944](https://github.com/bit-team/backintime/pull/1944) + * [PR #1819](https://github.com/bit-team/backintime/pull/1819) # What we don't know A lot! From df464aedead5f7d369c7fa9cd3482b1bd0f0e5b8 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Wed, 27 Nov 2024 22:46:59 +0100 Subject: [PATCH 15/30] [skip ci] --- common/snapshots.py | 74 ++++++++++++++--------------- doc/maintain/5_auto_smart_remove.md | 38 ++++++++++++++- 2 files changed, 74 insertions(+), 38 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index 07e531462..5bfdc9729 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -926,6 +926,7 @@ def backup(self, force=False): # "continue on errors" is enabled if not ret_error: + # Start auto- and smart-remove self.freeSpace(now) self.setTakeSnapshotMessage( 0, _('Please be patient. Finalizing…')) @@ -1626,16 +1627,13 @@ def decMonth(self, date): # First day of previous month return datetime.date(year=prev.year, month=prev.month, day=1) - def smartRemoveList(self, now_full, keep_all, keep_one_per_day, keep_one_per_week, keep_one_per_month): - """ - Get a list of old snapshots that should be removed based on configurable - intervals. + """Get list of backups to be removed based on configurable intervals. Args: now_full (datetime.datetime): date and time when takeSnapshot was @@ -1651,8 +1649,10 @@ def smartRemoveList(self, Returns: list: snapshots that should be removed + """ - snapshots = listSnapshots(self.config) + # Latest/younges backup first, the oldest is last + snapshots = listSnapshots(self.config, reverse=True) logger.debug(f'Considered: {snapshots}', self) if len(snapshots) <= 1: @@ -1664,7 +1664,7 @@ def smartRemoveList(self, now = now_full.date() - # keep the last snapshot + # keep the last/youngest backup keep = set([snapshots[0]]) # keep all for the last keep_all days @@ -1831,28 +1831,28 @@ def smartRemove(self, del_snapshots, log = None): self.remove(sid) def freeSpace(self, now): - """ - Remove old snapshots on based on different rules (only if enabled). - First rule is to remove snapshots older than X years. Next will call - :py:func:`smartRemove` to remove snapshots based on - configurable intervals. Third rule is to remove the oldest snapshot - until there is enough free space. Last rule will remove the oldest - snapshot until there are enough free inodes. + """Remove old backups based on several rules (if enabled). - 'last_snapshot' symlink will be fixed when done. + Rules are considered in the following order: + 1. Remove snapshots older than X years. + 2. Smart-remove rules with calling :py:func:`smartRemoveList`. See + there for details. + 3. Remove the oldest backup until there is enough free space. + 4. Remove the oldest backup until there are enough free inodes. + + The 'last_snapshot' symlink will be fixed when done. Args: - now (datetime.datetime): date and time when takeSnapshot was - started + now (datetime.datetime): Timestamp when takeSnapshot was started. """ - snapshots = listSnapshots(self.config, reverse = False) + snapshots = listSnapshots(self.config, reverse=False) if not snapshots: logger.debug('No snapshots. Skip freeSpace', self) return last_snapshot = snapshots[-1] - #remove old backups + # Remove old backups if self.config.removeOldSnapshotsEnabled(): self.setTakeSnapshotMessage(0, _('Removing old snapshots')) @@ -1887,7 +1887,7 @@ def freeSpace(self, now): keep_one_per_month) self.smartRemove(del_snapshots) - # try to keep min free space + # Try to keep min free space if self.config.minFreeSpaceEnabled(): self.setTakeSnapshotMessage(0, _('Trying to keep min free space')) @@ -1895,7 +1895,7 @@ def freeSpace(self, now): logger.debug("Keep min free disk space: {} MiB".format(minFreeSpace), self) - snapshots = listSnapshots(self.config, reverse = False) + snapshots = listSnapshots(self.config, reverse=False) while True: if len(snapshots) <= 1: @@ -1923,7 +1923,7 @@ def freeSpace(self, now): self.remove(snapshots[0]) del snapshots[0] - #try to keep free inodes + # Try to keep free inodes if self.config.minFreeInodesEnabled(): minFreeInodes = self.config.minFreeInodes() self.setTakeSnapshotMessage( @@ -1944,7 +1944,7 @@ def freeSpace(self, now): try: info = os.statvfs(self.config.snapshotsPath()) free_inodes = info.f_favail - max_inodes = info.f_files + max_inodes = info.f_files except Exception as e: logger.debug('Failed to get free inodes for snapshot path %s: %s' % (self.config.snapshotsPath(), str(e)), @@ -1965,7 +1965,7 @@ def freeSpace(self, now): self.remove(snapshots[0]) del snapshots[0] - #set correct last snapshot again + # Set correct last snapshot again if last_snapshot is not snapshots[-1]: self.createLastSnapshotSymlink(snapshots[-1]) @@ -3073,17 +3073,16 @@ def path(self, *path, use_mode = []): return os.path.join(os.sep, *path) -def iterSnapshots(cfg, includeNewSnapshot = False): - """ - A generator to iterate over snapshots in current snapshot path. +def iterSnapshots(cfg, includeNewSnapshot=False): + """A generator to iterate over snapshots in current snapshot path. Args: - cfg (config.Config): current config - includeNewSnapshot (bool): include a NewSnapshot instance if - 'new_snapshot' folder is available. + cfg (config.Config): Current config instance. + includeNewSnapshot (bool): Include a NewSnapshot instance if + 'new_snapshot' directory is available (default: False). Yields: - SID: snapshot IDs + SID: Snapshot IDs """ path = cfg.snapshotsFullPath() @@ -3115,21 +3114,22 @@ def iterSnapshots(cfg, includeNewSnapshot = False): "'{}' is not a snapshot ID: {}".format(item, str(e))) -def listSnapshots(cfg, includeNewSnapshot = False, reverse = True): +def listSnapshots(cfg, includeNewSnapshot=False, reverse=True): """ List of snapshots in current snapshot path. Args: - cfg (config.Config): current config (config.Config instance) - includeNewSnapshot (bool): include a NewSnapshot instance if - 'new_snapshot' folder is available - reverse (bool): sort reverse + cfg (config.Config): Current config instance. + includeNewSnapshot (bool): Include a NewSnapshot instance if + 'new_snapshot' directory is available (default: False). + reverse (bool): Sort reverse (default: True). Returns: - list: list of :py:class:`SID` objects + list: List of :py:class:`SID` objects. """ ret = list(iterSnapshots(cfg, includeNewSnapshot)) - ret.sort(reverse = reverse) + ret.sort(reverse=reverse) + return ret diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index b9a7500d8..8e9050b96 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -29,7 +29,26 @@ the background story. * `Snapshots.smartRemoveList()` is called by `freeSpace()` and is the entry for _Smart remove_ related rules. -## Weekly +## Ordering and interferance of the rules +1. Remove snapshots older than N years. +2. Smart-remove rules with calling `Snapshots.smartRemoveList`. + 1. Don't if there is only one backup left. + 2. Always keep the latest/youngest backup. + 3. Keep one per day for N days. + 4. Keep one per week for N weeks. + 5. keep one per month for N months. + 6. Keep one per year for all years. +3. Free space: Remove until there is enough. +4. Free inodes: Remove until there are enough. + +## Older than N years +- `self.config.removeOldSnapshotsDate()` +- Backups removed immediatly before executing any other rule. + +## Smart remove: Daily +GUI wording: _Keep all snapshots for the last `N` day(s)._ + +## Smart remove: Weekly GUI wording: _Keep one snapshot per week for the last `N` week(s)._ Current behavior of the algorithm: @@ -45,7 +64,24 @@ Current behavior of the algorithm: * [PR #1944](https://github.com/bit-team/backintime/pull/1944) * [PR #1819](https://github.com/bit-team/backintime/pull/1819) + + +## Smart remove: Monthly +GUI wording: _Keep one snapshot per months for the last `N` month(s)._ + +## Free space +- Remove until enough free disc space (`self.config.minFreeSpaceMib()`). +- Immediatly removed before executing any other rule. + +## Free inodes +- Remove until enough free inodes (`self.config.minFreeInodes()`) +- Immediatly removed before executing any other rule. + # What we don't know A lot! +# Things to discuss and considere +* Is there a need to separate between "Auto" and "Smart" in the wording? I + would prefer just "Auto". + December 2024 From eabfd6fbcfc94c1f9f08a951e9e6d83fd22d1419 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Thu, 28 Nov 2024 09:52:49 +0100 Subject: [PATCH 16/30] [skip ci] --- doc/maintain/5_auto_smart_remove.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index 8e9050b96..3f0e48065 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -32,12 +32,12 @@ the background story. ## Ordering and interferance of the rules 1. Remove snapshots older than N years. 2. Smart-remove rules with calling `Snapshots.smartRemoveList`. - 1. Don't if there is only one backup left. - 2. Always keep the latest/youngest backup. - 3. Keep one per day for N days. - 4. Keep one per week for N weeks. - 5. keep one per month for N months. - 6. Keep one per year for all years. + 1. Don't if there is only one backup left. + 2. Always keep the latest/youngest backup. + 3. Keep one per day for N days. + 4. Keep one per week for N weeks. + 5. keep one per month for N months. + 6. Keep one per year for all years. 3. Free space: Remove until there is enough. 4. Free inodes: Remove until there are enough. From 6eecc156c19aa6c7c108e06b853ea4961fb1d9c2 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Fri, 29 Nov 2024 10:43:58 +0100 Subject: [PATCH 17/30] x --- doc/maintain/5_auto_smart_remove.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index 3f0e48065..96998ea21 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -84,4 +84,16 @@ A lot! * Is there a need to separate between "Auto" and "Smart" in the wording? I would prefer just "Auto". +# How it could be +## Overview +The following does not reflect the real behavior. It is a draft and suggestion +for the auto-/smart-remove related behavior of BIT and how to implement it. + +## Weekly +- Define "week" as calendar element from Monday to Sunday. +- Ignore the current running and incomplete week. +- Keep the latest/newest backup per week. So it would be Sunday if available. +- Maybe as an option: Keep the oldest backup per week. +- Wording: _Keep one weekly backup for the past N weeks._ + December 2024 From e9f4a4e05f6eb0a0e83467f32a977037ca52a6d8 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sat, 30 Nov 2024 10:05:31 +0100 Subject: [PATCH 18/30] x --- doc/maintain/5_auto_smart_remove.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index 96998ea21..8d4ae5798 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -94,6 +94,7 @@ for the auto-/smart-remove related behavior of BIT and how to implement it. - Ignore the current running and incomplete week. - Keep the latest/newest backup per week. So it would be Sunday if available. - Maybe as an option: Keep the oldest backup per week. -- Wording: _Keep one weekly backup for the past N weeks._ +- Wording: + - _Keep one weekly backup for the preceding N weeks._ December 2024 From e292423f5e8ecb7cd056f7424c11468d074b0cbd Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 15 Dec 2024 14:32:55 +0100 Subject: [PATCH 19/30] migrate old keep first tests [skip ci] --- common/snapshots.py | 34 +++++++----- common/test/test_snapshots_autoremove.py | 68 ++++++++++++++++-------- doc/maintain/5_auto_smart_remove.md | 2 +- 3 files changed, 68 insertions(+), 36 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index 5bfdc9729..faf66dd8b 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -1545,46 +1545,52 @@ def smartRemoveKeepFirst(self, snapshots, min_date, max_date, - keep_healthy = False): + keep_healthy=False): """ - Return only the first snapshot between ``min_date`` and ``max_date``. + Return the first snapshot between ``min_date`` and ``max_date``. + + The first snapshot in ``snapshots`` that hit the range between + ``min_date`` and ``max_date`` will be returned. Snapshots outthat that + range are also lost. The list is not ordered by date. Args: - snapshots (list): full list of :py:class:`SID` objects - min_date (datetime.date): minimum date for snapshots to keep - max_date (datetime.date): maximum date for snapshots to keep - keep_healthy (bool): return the first healthy snapshot (not - marked as failed) instead of the first - at all. If all snapshots failed this - will again return the very first - snapshot + snapshots (list): Full list of :py:class:`SID` objects. + min_date (datetime.date): Minimum date for snapshots to keep. + max_date (datetime.date): Maximum date (newer than ``min_date``) + for snapshots to keep + keep_healthy (bool): Return the first healthy snapshot (not marked + as failed) instead of the first at all. If all snapshots failed + this will again return the very first snapshot. Returns: - set: set of snapshots that should be kept + set: Set of one snapshot that should be kept or an empty set. """ # print(f'smartRemoveKeepFirst() :: {min_date=} {max_date=}') # DEBUG min_id = SID(min_date, self.config) max_id = SID(max_date, self.config) - logger.debug("Keep first >= %s and < %s" %(min_id, max_id), self) + logger.debug("Keep first >= %s and < %s" % (min_id, max_id), self) for sid in snapshots: # try to keep the first healthy snapshot if keep_healthy and sid.failed: - logger.debug("Do not keep failed snapshot %s" %sid, self) + logger.debug("Do not keep failed snapshot %s" % sid, self) continue + # DEBUG # print(f'smartRemoveKeepFirst() :: for sid ... sid={str(sid)}') + if sid >= min_id and sid < max_id: # print(f' return {str(sid)}') return set([sid]) + # if all snapshots failed return the first snapshot # no matter if it has errors if keep_healthy: return self.smartRemoveKeepFirst(snapshots, min_date, max_date, - keep_healthy = False) + keep_healthy=False) return set() def incMonth(self, date): diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 34ade79cb..6755fe306 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -134,17 +134,62 @@ def test_one_but_set(self): self.assertIsInstance(sut, set) self.assertTrue(len(sut), 1) - def test_simple(self): + def test_simple_one(self): """First element in a range of SIDs""" sids = create_SIDs( datetime(2022, 3, 5, 7, 42, 31), 20, self.cfg) sut = self.sn.smartRemoveKeepFirst( sids, date(2022, 3, 5), datetime.now().date()) + sut = sut.pop() self.assertTrue(str(sut).startswith('20220305-074231-')) + def test_no_date_ordering(self): + """Hit first in the list and ignoring its date ordering. + + The list of snapshots is not ordered anywhere.""" + sids = [] + # April, 2016... + for timestamp_string in ['20160424-215134-123', # …24th + # This SID will hit because it is the first + # in the range specified. + '20160422-030324-123', # …22th + '20160422-020324-123', # …22th + '20160422-010324-123', # …22th + # This might be the earliest/first SID in the + # date range specified but it is not the first + # in the list. So it won't be hit. + '20160421-013218-123', # …21th + '20160410-134327-123']: # …10th + sids.append(snapshots.SID(timestamp_string, self.cfg)) + + sut = self.sn.smartRemoveKeepFirst(sids, + date(2016, 4, 20), + date(2016, 4, 23)) + + self.assertEqual(str(sut.pop()), '20160422-030324-123') + + def test_keep_first_range_outside(self): + sids = [] + # April, 2016... + for timestamp_string in ['20160424-215134-123', # …24th + '20160422-030324-123', # …22th + '20160422-020324-123', # …22th + '20160422-010324-123', # …22th + '20160421-013218-123', # …21th + '20160410-134327-123']: # …10th + sids.append(snapshots.SID(timestamp_string, self.cfg)) + + # Between 11th and 18th April + sut = self.sn.smartRemoveKeepFirst(sids, + date(2016, 4, 11), + date(2016, 4, 18)) + + # None will hit, because no SID in that range. + self.assertEqual(len(sut), 0) + @mock.patch.object(snapshots.SID, 'failed', new_callable=lambda: True) def test_all_invalid(self, _mock_failed): """All SIDS invalid (not healthy)""" @@ -399,7 +444,7 @@ def test_dec_leap_months(self): self.assertEqual(sut, date(2020, 1, 1)) -class SmartRemove(generic.SnapshotsTestCase): +class OldOrg_SmartRemove(generic.SnapshotsTestCase): """This is the old/original test case using real filesystem and to much dependencies.""" @@ -422,25 +467,6 @@ def test_keep_all(self): date(2016, 4, 18)) self.assertSetEqual(keep, set()) - def test_keep_first(self): - sid1 = snapshots.SID('20160424-215134-123', self.cfg) - sid2 = snapshots.SID('20160422-030324-123', self.cfg) - sid3 = snapshots.SID('20160422-020324-123', self.cfg) - sid4 = snapshots.SID('20160422-010324-123', self.cfg) - sid5 = snapshots.SID('20160421-013218-123', self.cfg) - sid6 = snapshots.SID('20160410-134327-123', self.cfg) - sids = [sid1, sid2, sid3, sid4, sid5, sid6] - - keep = self.sn.smartRemoveKeepFirst(sids, - date(2016, 4, 20), - date(2016, 4, 23)) - self.assertSetEqual(keep, set((sid2,))) - - keep = self.sn.smartRemoveKeepFirst(sids, - date(2016, 4, 11), - date(2016, 4, 18)) - self.assertSetEqual(keep, set()) - def test_keep_first_no_errors(self): sid1 = snapshots.SID('20160424-215134-123', self.cfg) sid2 = snapshots.SID('20160422-030324-123', self.cfg) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index 8d4ae5798..66f03689c 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -57,7 +57,7 @@ Current behavior of the algorithm: completed yet. E.g. today is Wednesday the 27th November, BIT will look for existing backups starting with Sunday the 24th ending and including the Saturday 30th November. -* If there is not backup in the current week found that week is "lost" and +* If there is no backup in the current week found, that week is "lost" and there will only be `N-1` backups in the resulting list of weekly backups. * See * [#1094](https://github.com/bit-team/backintime/issues/1094) From 172d089e5cbd62cf716dfb3067fea6c9c48279c8 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 15 Dec 2024 14:49:50 +0100 Subject: [PATCH 20/30] more test migration [skip ci] --- common/test/test_snapshots_autoremove.py | 50 +++++++++++------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 6755fe306..060ca5b43 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -207,6 +207,28 @@ def test_all_invalid(self, _mock_failed): keep_healthy=True) self.assertTrue(len(sut), 0) + @mock.patch.object(snapshots.SID, 'failed', new_callable=mock.PropertyMock) + def test_ignore_unhealthy(self, mock_failed): + # The second call to failed-property returns True + mock_failed.side_effect = [False, True, False, False, False, False] + sids = [] + for timestamp_string in ['20160424-215134-123', + # could be hit, but is NOT healthy + '20160422-030324-123', + # hit this + '20160422-020324-123', + '20160422-010324-123', + '20160421-013218-123', + '20160410-134327-123']: + sids.append(snapshots.SID(timestamp_string, self.cfg)) + + # keep the first healthy snapshot + sut = self.sn.smartRemoveKeepFirst(sids, + date(2016, 4, 20), + date(2016, 4, 23), + keep_healthy=True) + self.assertEqual(str(sut.pop()), '20160422-020324-123') + class OnePerWeek(pyfakefs_ut.TestCase): """Covering the smart remove setting 'Keep one snapshot per week for the @@ -467,34 +489,6 @@ def test_keep_all(self): date(2016, 4, 18)) self.assertSetEqual(keep, set()) - def test_keep_first_no_errors(self): - sid1 = snapshots.SID('20160424-215134-123', self.cfg) - sid2 = snapshots.SID('20160422-030324-123', self.cfg) - sid2.makeDirs() - sid2.failed = True - sid3 = snapshots.SID('20160422-020324-123', self.cfg) - sid4 = snapshots.SID('20160422-010324-123', self.cfg) - sid5 = snapshots.SID('20160421-013218-123', self.cfg) - sid6 = snapshots.SID('20160410-134327-123', self.cfg) - sids = [sid1, sid2, sid3, sid4, sid5, sid6] - - # keep the first healthy snapshot - keep = self.sn.smartRemoveKeepFirst(sids, - date(2016, 4, 20), - date(2016, 4, 23), - keep_healthy = True) - self.assertSetEqual(keep, set((sid3,))) - - # if all snapshots failed, keep the first at all - for sid in (sid3, sid4, sid5): - sid.makeDirs() - sid.failed = True - keep = self.sn.smartRemoveKeepFirst(sids, - date(2016, 4, 20), - date(2016, 4, 23), - keep_healthy = True) - self.assertSetEqual(keep, set((sid2,))) - def test_smart_remove_list(self): sid1 = snapshots.SID('20160424-215134-123', self.cfg) sid2 = snapshots.SID('20160422-030324-123', self.cfg) From ace44b882d0d35715822de2c34c1adde7c47b174 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 15 Dec 2024 16:19:30 +0100 Subject: [PATCH 21/30] fix bug related to "keep last N days" --- common/snapshots.py | 36 +++-- common/test/test_snapshots_autoremove.py | 168 ++++++++++++++++++++++- doc/maintain/5_auto_smart_remove.md | 10 +- 3 files changed, 199 insertions(+), 15 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index faf66dd8b..d45145b6d 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -10,6 +10,7 @@ # This file is part of the program "Back In Time" which is released under GNU # General Public License v2 (GPLv2). See file/folder LICENSE or go to # . +from __future__ import annotations import os from pathlib import Path import stat @@ -1520,26 +1521,27 @@ def takeSnapshot(self, sid, now, include_folders): return [True, has_errors] def smartRemoveKeepAll(self, - snapshots, - min_date, - max_date): + snapshots: list[SID], + min_date: datetime.date, + max_date: datetime.date) -> set[SID]: """ Return all snapshots between ``min_date`` and ``max_date``. Args: - snapshots (list): full list of :py:class:`SID` objects - min_date (datetime.date): minimum date for snapshots to keep - max_date (datetime.date): maximum date for snapshots to keep + snapshots (list): Full list of :py:class:`SID` objects. + min_date (datetime.date): Minimum date (included in the range). + max_date (datetime.date): Maximum date (excluded from the range). Returns: - set: set of snapshots that should be kept + set: Set of snapshots that should be kept. """ - min_id = SID(min_date, self.config) - max_id = SID(max_date, self.config) + logger.debug(f'Keep all >= {min_date} < {max_date}', self) - logger.debug("Keep all >= %s and < %s" %(min_id, max_id), self) + result = filter(lambda sid: sid.date.date() >= min_date + and sid.date.date() < max_date, + snapshots) - return set([sid for sid in snapshots if sid >= min_id and sid < max_id]) + return set(result) def smartRemoveKeepFirst(self, snapshots, @@ -2599,6 +2601,18 @@ def withoutTag(self): """ return self.sid[0:15] + # @property + # def datetime(self) -> datetime.datetime: + # """Snapshot ID as datetime. + # """ + # return datetime.strptime(self.sid[:15], '%Y%m%d-%H%M%S') + + # @property + # def date(self) -> datetime.date: + # """Snapshot ID as date. + # """ + # return self.datetime.date() + def path(self, *path, use_mode = []): """ Current path of this snapshot automatically altered for diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 060ca5b43..7443a46f3 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -230,6 +230,85 @@ def test_ignore_unhealthy(self, mock_failed): self.assertEqual(str(sut.pop()), '20160422-020324-123') +class KeepAll(pyfakefs_ut.TestCase): + """Test Snapshot.removeKeepAll(). + + PyFakeFS is used here because of Config file dependency.""" + + def setUp(self): + """Setup a fake filesystem.""" + self.setUpPyfakefs(allow_root_user=False) + + # cleanup() happens automatically + # pylint: disable-next=consider-using-with + self._temp_dir = TemporaryDirectory(prefix='bit.') + # Workaround: tempfile and pathlib not compatible yet + self.temp_path = Path(self._temp_dir.name) + + self._config_fp = self._create_config_file(parent_path=self.temp_path) + self.cfg = config.Config(str(self._config_fp)) + + self.sn = snapshots.Snapshots(self.cfg) + + def _create_config_file(self, parent_path): + """Minimal config file""" + # pylint: disable-next=R0801 + cfg_content = inspect.cleandoc(''' + config.version=6 + profile1.snapshots.include.1.type=0 + profile1.snapshots.include.1.value=rootpath/source + profile1.snapshots.include.size=1 + profile1.snapshots.no_on_battery=false + profile1.snapshots.notify.enabled=true + profile1.snapshots.path=rootpath/destination + profile1.snapshots.path.host=test-host + profile1.snapshots.path.profile=1 + profile1.snapshots.path.user=test-user + profile1.snapshots.preserve_acl=false + profile1.snapshots.preserve_xattr=false + profile1.snapshots.remove_old_snapshots.enabled=true + profile1.snapshots.remove_old_snapshots.unit=80 + profile1.snapshots.remove_old_snapshots.value=10 + profile1.snapshots.rsync_options.enabled=false + profile1.snapshots.rsync_options.value= + profiles.version=1 + ''') + + # config file location + config_fp = parent_path / 'config_path' / 'config' + config_fp.parent.mkdir() + config_fp.write_text(cfg_content, 'utf-8') + + return config_fp + + def test_simple(self): + """Simple""" + # 10th to 25th + sids = create_SIDs(datetime(2024, 2, 10), 15, self.cfg) + + # keep... + sut = self.sn.smartRemoveKeepAll( + sids, + # ... from 12th ... + date(2024, 2, 12), + # ... to 19th. + date(2024, 2, 20) + ) + + self.assertEqual(len(sut), 8) + + sut = sorted(sut) + + self.assertEqual(sut[0].date.date(), date(2024, 2, 12)) + self.assertEqual(sut[1].date.date(), date(2024, 2, 13)) + self.assertEqual(sut[2].date.date(), date(2024, 2, 14)) + self.assertEqual(sut[3].date.date(), date(2024, 2, 15)) + self.assertEqual(sut[4].date.date(), date(2024, 2, 16)) + self.assertEqual(sut[5].date.date(), date(2024, 2, 17)) + self.assertEqual(sut[6].date.date(), date(2024, 2, 18)) + self.assertEqual(sut[7].date.date(), date(2024, 2, 19)) + + class OnePerWeek(pyfakefs_ut.TestCase): """Covering the smart remove setting 'Keep one snapshot per week for the last N weeks'. @@ -383,9 +462,92 @@ def test_three_weeks(self): sut = sorted(sut) for s in sut: print(s) - self.assertTrue(sut[0].startswith('20240324-')) - self.assertTrue(sut[1].startswith('20240317-')) - self.assertTrue(sut[2].startswith('20240310-')) + + # self.assertTrue(str(sut[0]).startswith('20240324-')) + # self.assertTrue(str(sut[1]).startswith('20240317-')) + # self.assertTrue(str(sut[2]).startswith('20240310-')) + + +class ForLastNDays(pyfakefs_ut.TestCase): + """Covering the smart remove setting 'Keep one per day for N days.'. + + That logic is implemented in 'Snapshots.smartRemoveList()' but not testable + in isolation. So for a first shot we just duplicate that code in this + tests (see self._org()). + """ + + def setUp(self): + """Setup a fake filesystem.""" + self.setUpPyfakefs(allow_root_user=False) + + # cleanup() happens automatically + # pylint: disable-next=consider-using-with + self._temp_dir = TemporaryDirectory(prefix='bit.') + # Workaround: tempfile and pathlib not compatible yet + self.temp_path = Path(self._temp_dir.name) + + self._config_fp = self._create_config_file(parent_path=self.temp_path) + self.cfg = config.Config(str(self._config_fp)) + + self.sn = snapshots.Snapshots(self.cfg) + + def _create_config_file(self, parent_path): + """Minimal config file""" + # pylint: disable-next=R0801 + cfg_content = inspect.cleandoc(''' + config.version=6 + profile1.snapshots.include.1.type=0 + profile1.snapshots.include.1.value=rootpath/source + profile1.snapshots.include.size=1 + profile1.snapshots.no_on_battery=false + profile1.snapshots.notify.enabled=true + profile1.snapshots.path=rootpath/destination + profile1.snapshots.path.host=test-host + profile1.snapshots.path.profile=1 + profile1.snapshots.path.user=test-user + profile1.snapshots.preserve_acl=false + profile1.snapshots.preserve_xattr=false + profile1.snapshots.remove_old_snapshots.enabled=true + profile1.snapshots.remove_old_snapshots.unit=80 + profile1.snapshots.remove_old_snapshots.value=10 + profile1.snapshots.rsync_options.enabled=false + profile1.snapshots.rsync_options.value= + profiles.version=1 + ''') + + # config file location + config_fp = parent_path / 'config_path' / 'config' + config_fp.parent.mkdir() + config_fp.write_text(cfg_content, 'utf-8') + + return config_fp + + def _org(self, now, n_days, snapshots): + """Copied and slightly refactored from inside + 'Snapshots.smartRemoveList()'. + """ + print(f'\n_org() :: now={dt2str(now)} {n_days=}') + + keep = self.sn.smartRemoveKeepAll( + snapshots, + now - timedelta(days=n_days-1), + now + timedelta(days=1)) + + return keep + + def test_foobar(self): + sids = create_SIDs(datetime(2024, 2, 18), 10, self.cfg) + sut = self._org(now=date(2024, 2, 27), + n_days=3, + snapshots=sids) + + self.assertEqual(len(sut), 3) + + sut = sorted(sut) + + self.assertEqual(sut[0].date.date(), date(2024, 2, 25)) + self.assertEqual(sut[1].date.date(), date(2024, 2, 26)) + self.assertEqual(sut[2].date.date(), date(2024, 2, 27)) class IncDecMonths(pyfakefs_ut.TestCase): diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index 66f03689c..ad16c8a7f 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -42,12 +42,20 @@ the background story. 4. Free inodes: Remove until there are enough. ## Older than N years -- `self.config.removeOldSnapshotsDate()` +- Happens in `Snapshots.freeSpace()` +- Relevant also `self.config.removeOldSnapshotsDate()` - Backups removed immediatly before executing any other rule. +- Named snaphots ignored and kept. ## Smart remove: Daily GUI wording: _Keep all snapshots for the last `N` day(s)._ +Current behavior of the algorithm: +* Bug was that in some cases `N-1` days are kept. + * Reason was that not dates but snapshotIDS (included their tags, the last 3 + digits) are used for comparision. + * The bug is fixed. + ## Smart remove: Weekly GUI wording: _Keep one snapshot per week for the last `N` week(s)._ From ddac5bf6ee94f482e61f8c9e22db8e4e7dab08f3 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Sun, 15 Dec 2024 16:21:55 +0100 Subject: [PATCH 22/30] SID.date TODO comment --- common/snapshots.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index d45145b6d..73e48b435 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -2437,6 +2437,8 @@ def __init__(self, date, cfg): if isinstance(date, datetime.datetime): self.sid = '-'.join((date.strftime('%Y%m%d-%H%M%S'), self.config.tag(self.profileID))) + # TODO: Don't use "date" as attribute name. Btw: It is not a date + # but a datetime. self.date = date elif isinstance(date, datetime.date): @@ -2601,18 +2603,6 @@ def withoutTag(self): """ return self.sid[0:15] - # @property - # def datetime(self) -> datetime.datetime: - # """Snapshot ID as datetime. - # """ - # return datetime.strptime(self.sid[:15], '%Y%m%d-%H%M%S') - - # @property - # def date(self) -> datetime.date: - # """Snapshot ID as date. - # """ - # return self.datetime.date() - def path(self, *path, use_mode = []): """ Current path of this snapshot automatically altered for From 23292fad33ae1ddd77a7510809619682e40f4f7f Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Mon, 16 Dec 2024 15:51:56 +0100 Subject: [PATCH 23/30] improve docstring [skip ci] --- common/snapshots.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index 73e48b435..be5c251ed 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -1525,7 +1525,8 @@ def smartRemoveKeepAll(self, min_date: datetime.date, max_date: datetime.date) -> set[SID]: """ - Return all snapshots between ``min_date`` and ``max_date``. + Return all snapshots in the timedelta beginning with ``min_date`` and + ending before ``max_date``. Args: snapshots (list): Full list of :py:class:`SID` objects. @@ -1548,24 +1549,24 @@ def smartRemoveKeepFirst(self, min_date, max_date, keep_healthy=False): - """ - Return the first snapshot between ``min_date`` and ``max_date``. + """Return the first snapshot between ``min_date`` and ``max_date``. - The first snapshot in ``snapshots`` that hit the range between - ``min_date`` and ``max_date`` will be returned. Snapshots outthat that - range are also lost. The list is not ordered by date. + The first snapshot in ``snapshots`` that hit the timedetla beginning + with ``min_date`` and ending before ``max_date`` will be returned. + Snapshots outthat that range are also lost. The list is not ordered by + date. Args: snapshots (list): Full list of :py:class:`SID` objects. - min_date (datetime.date): Minimum date for snapshots to keep. - max_date (datetime.date): Maximum date (newer than ``min_date``) - for snapshots to keep + min_date (datetime.date): Minimum date (included in the range). + max_date (datetime.date): Maximum date (excluded from the range). keep_healthy (bool): Return the first healthy snapshot (not marked as failed) instead of the first at all. If all snapshots failed this will again return the very first snapshot. Returns: set: Set of one snapshot that should be kept or an empty set. + """ # print(f'smartRemoveKeepFirst() :: {min_date=} {max_date=}') # DEBUG min_id = SID(min_date, self.config) From 5a3c6bf3789719104312e6ace4d64d61c3d0e162 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Mon, 16 Dec 2024 15:53:43 +0100 Subject: [PATCH 24/30] x [skip ci] --- doc/maintain/5_auto_smart_remove.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index ad16c8a7f..e901c32f8 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -41,13 +41,14 @@ the background story. 3. Free space: Remove until there is enough. 4. Free inodes: Remove until there are enough. -## Older than N years +## Details +### Older than N years - Happens in `Snapshots.freeSpace()` - Relevant also `self.config.removeOldSnapshotsDate()` - Backups removed immediatly before executing any other rule. - Named snaphots ignored and kept. -## Smart remove: Daily +### Smart remove: Daily GUI wording: _Keep all snapshots for the last `N` day(s)._ Current behavior of the algorithm: @@ -56,7 +57,7 @@ Current behavior of the algorithm: digits) are used for comparision. * The bug is fixed. -## Smart remove: Weekly +### Smart remove: Weekly GUI wording: _Keep one snapshot per week for the last `N` week(s)._ Current behavior of the algorithm: @@ -74,14 +75,14 @@ Current behavior of the algorithm: -## Smart remove: Monthly +### Smart remove: Monthly GUI wording: _Keep one snapshot per months for the last `N` month(s)._ -## Free space +### Free space - Remove until enough free disc space (`self.config.minFreeSpaceMib()`). - Immediatly removed before executing any other rule. -## Free inodes +### Free inodes - Remove until enough free inodes (`self.config.minFreeInodes()`) - Immediatly removed before executing any other rule. From c6fe687b1ffc16c26be76a65da950314855d7737 Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Mon, 16 Dec 2024 16:01:43 +0100 Subject: [PATCH 25/30] doc [skip ci] --- doc/maintain/5_auto_smart_remove.md | 46 +++++++++++++++++++---------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index e901c32f8..4e525d907 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -11,7 +11,7 @@ General Public License v2 (GPLv2). See LICENSES folder or go to ## Table of contents * [Introduction](#introduction) * [What we know](#what-we-know) -* [What we don't](#what-we-dont-know) +* [How it could be](#how-it-could-be) # Introduction The actual auto- and smart-remove behavior of BIT will be described in this @@ -86,24 +86,40 @@ GUI wording: _Keep one snapshot per months for the last `N` month(s)._ - Remove until enough free inodes (`self.config.minFreeInodes()`) - Immediatly removed before executing any other rule. -# What we don't know -A lot! - -# Things to discuss and considere -* Is there a need to separate between "Auto" and "Smart" in the wording? I - would prefer just "Auto". - # How it could be ## Overview The following does not reflect the real behavior. It is a draft and suggestion for the auto-/smart-remove related behavior of BIT and how to implement it. -## Weekly -- Define "week" as calendar element from Monday to Sunday. -- Ignore the current running and incomplete week. -- Keep the latest/newest backup per week. So it would be Sunday if available. -- Maybe as an option: Keep the oldest backup per week. -- Wording: - - _Keep one weekly backup for the preceding N weeks._ +## General +- Wording: Remove "Smart" and make everyting "Auto remove". + +## Rules in details +1. Remove snapshots older than N years. + - No need for modification. +2. Smart-remove rules with calling `Snapshots.smartRemoveList`. + 1. Don't if there is only one backup left. + - No need for modification. + 2. Always keep the latest/youngest backup. + - No need for modification. + 3. Keep one per day for N days. + - New wording: _Keep one daily backup for the preceding N days._ + - Ignore "today", the current day. + - Keep the latest/newest backup per day. + - Maybe as an option: Keep the oldest/erliest backup a day. + 4. Keep one per week for N weeks. + - New wording: _Keep one weekly backup for the preceding N weeks._ + - Define "week" as calendar element from Monday to Sunday. + - Ignore the current running and incomplete week. + - Keep the latest/newest backup per week. So it would be Sunday in most + cases if available. + - Maybe as an option: Keep the oldest backup per week. + 5. keep one per month for N months. + 6. Keep one per year for all years. +3. Free space: Remove until there is enough. +4. Free inodes: Remove until there are enough. + + + December 2024 From 475de9341e86648b5226bee4019e030d257390ab Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Mon, 16 Dec 2024 16:27:27 +0100 Subject: [PATCH 26/30] x [skip ci] --- common/snapshots.py | 1 + common/test/test_snapshots_autoremove.py | 193 ++++++++++++++++++++++- doc/maintain/5_auto_smart_remove.md | 24 ++- 3 files changed, 207 insertions(+), 11 deletions(-) diff --git a/common/snapshots.py b/common/snapshots.py index be5c251ed..debdeaf9c 100644 --- a/common/snapshots.py +++ b/common/snapshots.py @@ -1567,6 +1567,7 @@ def smartRemoveKeepFirst(self, Returns: set: Set of one snapshot that should be kept or an empty set. + TODO: It should compare datest not SIDs because of their tag. """ # print(f'smartRemoveKeepFirst() :: {min_date=} {max_date=}') # DEBUG min_id = SID(min_date, self.config) diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 7443a46f3..218f179da 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -68,7 +68,7 @@ def create_SIDs(start_date: Union[date, datetime, list[date]], for d in the_dates: sids.append(snapshots.SID(dt2sidstr(d), cfg)) - return sids + return list(reversed(sids)) class KeepFirst(pyfakefs_ut.TestCase): @@ -463,10 +463,6 @@ def test_three_weeks(self): for s in sut: print(s) - # self.assertTrue(str(sut[0]).startswith('20240324-')) - # self.assertTrue(str(sut[1]).startswith('20240317-')) - # self.assertTrue(str(sut[2]).startswith('20240310-')) - class ForLastNDays(pyfakefs_ut.TestCase): """Covering the smart remove setting 'Keep one per day for N days.'. @@ -550,6 +546,193 @@ def test_foobar(self): self.assertEqual(sut[2].date.date(), date(2024, 2, 27)) +class OnePerMonth(pyfakefs_ut.TestCase): + """Covering the smart remove setting 'Keep one snapshot per week for the + last N weeks'. + + That logic is implemented in 'Snapshots.smartRemoveList()' but not testable + in isolation. So for a first shot we just duplicate that code in this + tests (see self._org()). + """ + + def setUp(self): + """Setup a fake filesystem.""" + self.setUpPyfakefs(allow_root_user=False) + + # cleanup() happens automatically + # pylint: disable-next=consider-using-with + self._temp_dir = TemporaryDirectory(prefix='bit.') + # Workaround: tempfile and pathlib not compatible yet + self.temp_path = Path(self._temp_dir.name) + + self._config_fp = self._create_config_file(parent_path=self.temp_path) + self.cfg = config.Config(str(self._config_fp)) + + self.sn = snapshots.Snapshots(self.cfg) + + def _create_config_file(self, parent_path): + """Minimal config file""" + # pylint: disable-next=R0801 + cfg_content = inspect.cleandoc(''' + config.version=6 + profile1.snapshots.include.1.type=0 + profile1.snapshots.include.1.value=rootpath/source + profile1.snapshots.include.size=1 + profile1.snapshots.no_on_battery=false + profile1.snapshots.notify.enabled=true + profile1.snapshots.path=rootpath/destination + profile1.snapshots.path.host=test-host + profile1.snapshots.path.profile=1 + profile1.snapshots.path.user=test-user + profile1.snapshots.preserve_acl=false + profile1.snapshots.preserve_xattr=false + profile1.snapshots.remove_old_snapshots.enabled=true + profile1.snapshots.remove_old_snapshots.unit=80 + profile1.snapshots.remove_old_snapshots.value=10 + profile1.snapshots.rsync_options.enabled=false + profile1.snapshots.rsync_options.value= + profiles.version=1 + ''') + + # config file location + config_fp = parent_path / 'config_path' / 'config' + config_fp.parent.mkdir() + config_fp.write_text(cfg_content, 'utf-8') + + return config_fp + + def _org(self, now, n_months, snapshots, keep_healthy=True): + """Keep one per months for the last n_months weeks. + + Copied and slightly refactored from inside + 'Snapshots.smartRemoveList()'. + """ + print(f'\n_org() :: now={dt2str(now)} {n_months=}') + keep = set() + + d1 = date(now.year, now.month, 1) + d2 = self.sn.incMonth(d1) + + # each months + for i in range(0, n_months): + print(f'{i=} {d1=} {d2}') + keep |= self.sn.smartRemoveKeepFirst( + snapshots, d1, d2, keep_healthy=keep_healthy) + d2 = d1 + d1 = self.sn.decMonth(d1) + + return keep + + def test_foobarm(self): + now = date(2024, 12, 16) + # sids = create_SIDs(start, 9*7+3, self.cfg) + sids = create_SIDs(date(2023, 10, 26), 500, self.cfg) + + months = 3 + sut = self._org( + now=now, + # Keep the last week + n_months=months, + snapshots=sids) + + print(f'\noldest snapshot: {sid2str(sids[0])}') + for s in sorted(sut): + print(f'keep: {sid2str(s)}') + print(f'from/now: {dt2str(now)} {months=}') + print(f'latest snapshot: {sid2str(sids[-1])}') + + +class OnePerYear(pyfakefs_ut.TestCase): + """Covering the smart remove setting 'Keep one snapshot per year for all + years.' + + That logic is implemented in 'Snapshots.smartRemoveList()' but not testable + in isolation. So for a first shot we just duplicate that code in this + tests (see self._org()). + """ + + def setUp(self): + """Setup a fake filesystem.""" + self.setUpPyfakefs(allow_root_user=False) + + # cleanup() happens automatically + # pylint: disable-next=consider-using-with + self._temp_dir = TemporaryDirectory(prefix='bit.') + # Workaround: tempfile and pathlib not compatible yet + self.temp_path = Path(self._temp_dir.name) + + self._config_fp = self._create_config_file(parent_path=self.temp_path) + self.cfg = config.Config(str(self._config_fp)) + + self.sn = snapshots.Snapshots(self.cfg) + + def _create_config_file(self, parent_path): + """Minimal config file""" + # pylint: disable-next=R0801 + cfg_content = inspect.cleandoc(''' + config.version=6 + profile1.snapshots.include.1.type=0 + profile1.snapshots.include.1.value=rootpath/source + profile1.snapshots.include.size=1 + profile1.snapshots.no_on_battery=false + profile1.snapshots.notify.enabled=true + profile1.snapshots.path=rootpath/destination + profile1.snapshots.path.host=test-host + profile1.snapshots.path.profile=1 + profile1.snapshots.path.user=test-user + profile1.snapshots.preserve_acl=false + profile1.snapshots.preserve_xattr=false + profile1.snapshots.remove_old_snapshots.enabled=true + profile1.snapshots.remove_old_snapshots.unit=80 + profile1.snapshots.remove_old_snapshots.value=10 + profile1.snapshots.rsync_options.enabled=false + profile1.snapshots.rsync_options.value= + profiles.version=1 + ''') + + # config file location + config_fp = parent_path / 'config_path' / 'config' + config_fp.parent.mkdir() + config_fp.write_text(cfg_content, 'utf-8') + + return config_fp + + def _org(self, now, snapshots, keep_healthy=True): + """Keep one per year + + Copied and slightly refactored from inside + 'Snapshots.smartRemoveList()'. + """ + first_year = int(snapshots[-1].sid[:4]) + + print(f'\n_org() :: now={dt2str(now)} {first_year=}') + keep = set() + + for i in range(first_year, now.year+1): + keep |= self.sn.smartRemoveKeepFirst( + snapshots, + date(i, 1, 1), + date(i+1, 1, 1), + keep_healthy=keep_healthy) + + return keep + + def test_foobary(self): + now = date(2024, 12, 16) + # sids = create_SIDs(start, 9*7+3, self.cfg) + sids = create_SIDs(date(2019, 10, 26), 365*6, self.cfg) + + sut = self._org( + now=now, + snapshots=sids) + + print(f'\noldest snapshot: {sid2str(sids[0])}') + for s in sorted(sut): + print(f'keep: {sid2str(s)}') + print(f'from/now: {dt2str(now)}') + print(f'latest snapshot: {sid2str(sids[-1])}') + + class IncDecMonths(pyfakefs_ut.TestCase): """PyFakeFS is used here because of Config file dependency.""" diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index 4e525d907..a6f672750 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -42,6 +42,9 @@ the background story. 4. Free inodes: Remove until there are enough. ## Details +- In `smartRemoveList()` the direction of ordering of the initial snapshots + list is of high relevance. + ### Older than N years - Happens in `Snapshots.freeSpace()` - Relevant also `self.config.removeOldSnapshotsDate()` @@ -76,8 +79,12 @@ Current behavior of the algorithm: ### Smart remove: Monthly -GUI wording: _Keep one snapshot per months for the last `N` month(s)._ +- GUI wording: _Keep one snapshot per months for the last `N` month(s)._ +- Seems to use the current month, too. +- Keeps the oldest, so it is the 1th of each months. +### Smart remove: One per year for all years +- s ### Free space - Remove until enough free disc space (`self.config.minFreeSpaceMib()`). - Immediatly removed before executing any other rule. @@ -93,6 +100,9 @@ for the auto-/smart-remove related behavior of BIT and how to implement it. ## General - Wording: Remove "Smart" and make everyting "Auto remove". +- The rules are trying to be consistent in their behavior. + - Always keep the latest/newest element in the list. + - Ignore the current running/incomplete time frame. ## Rules in details 1. Remove snapshots older than N years. @@ -106,20 +116,22 @@ for the auto-/smart-remove related behavior of BIT and how to implement it. - New wording: _Keep one daily backup for the preceding N days._ - Ignore "today", the current day. - Keep the latest/newest backup per day. - - Maybe as an option: Keep the oldest/erliest backup a day. 4. Keep one per week for N weeks. - New wording: _Keep one weekly backup for the preceding N weeks._ - Define "week" as calendar element from Monday to Sunday. - Ignore the current running and incomplete week. - Keep the latest/newest backup per week. So it would be Sunday in most cases if available. - - Maybe as an option: Keep the oldest backup per week. 5. keep one per month for N months. + - New wording: _Keep one monthly backup for the preceding N months._ + - Ignore the current running and incomplete month. + - Keep the latest/newset backup per months (30th/31th day of the months). 6. Keep one per year for all years. + - Use the latest day of year. + - That implicite ignores the current running year. 3. Free space: Remove until there is enough. + - No need for modification. 4. Free inodes: Remove until there are enough. - - - + - No need for modification. December 2024 From 27daa8f9a40829baf4d3f2acec26c51a8a5cab7d Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Tue, 17 Dec 2024 21:59:58 +0100 Subject: [PATCH 27/30] mockup [skip ci] --- doc/maintain/5_auto_smart_remove.md | 19 ++-- doc/maintain/autoremove_mockup.drawio | 144 ++++++++++++++++++++++++++ doc/maintain/autoremove_mockup.png | Bin 0 -> 67557 bytes 3 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 doc/maintain/autoremove_mockup.drawio create mode 100644 doc/maintain/autoremove_mockup.png diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index a6f672750..d801098ad 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -20,6 +20,7 @@ decide how that feature can be revised. See [Meta Issue #1945](https://github.com/bit-team/backintime/issues/1945) about the background story. +This is how it looks like currently: ![Aut-remove tab](https://translate.codeberg.org/media/screenshots/bit_manage_profiles_autoremove.gif) # What we know @@ -30,7 +31,7 @@ the background story. for _Smart remove_ related rules. ## Ordering and interferance of the rules -1. Remove snapshots older than N years. +1. Remove snapshots older than N years/weeks/days. 2. Smart-remove rules with calling `Snapshots.smartRemoveList`. 1. Don't if there is only one backup left. 2. Always keep the latest/youngest backup. @@ -100,11 +101,20 @@ for the auto-/smart-remove related behavior of BIT and how to implement it. ## General - Wording: Remove "Smart" and make everyting "Auto remove". -- The rules are trying to be consistent in their behavior. - - Always keep the latest/newest element in the list. +- The rules should to be consistent in their behavior. + - Always keep the latest/newest element in the list (Sunday for weeks, 31th + for months, ...). - Ignore the current running/incomplete time frame. +- Wording: Use the term "backup" instead of "snapshot". See Issue #1929. + +## Mockup +![Mockup](autoremove_mockup.png) + +[autoremove_mockup.drawio](autoremove_mockup.drawio) ## Rules in details +For new wording see the mockup. + 1. Remove snapshots older than N years. - No need for modification. 2. Smart-remove rules with calling `Snapshots.smartRemoveList`. @@ -113,17 +123,14 @@ for the auto-/smart-remove related behavior of BIT and how to implement it. 2. Always keep the latest/youngest backup. - No need for modification. 3. Keep one per day for N days. - - New wording: _Keep one daily backup for the preceding N days._ - Ignore "today", the current day. - Keep the latest/newest backup per day. 4. Keep one per week for N weeks. - - New wording: _Keep one weekly backup for the preceding N weeks._ - Define "week" as calendar element from Monday to Sunday. - Ignore the current running and incomplete week. - Keep the latest/newest backup per week. So it would be Sunday in most cases if available. 5. keep one per month for N months. - - New wording: _Keep one monthly backup for the preceding N months._ - Ignore the current running and incomplete month. - Keep the latest/newset backup per months (30th/31th day of the months). 6. Keep one per year for all years. diff --git a/doc/maintain/autoremove_mockup.drawio b/doc/maintain/autoremove_mockup.drawio new file mode 100644 index 000000000..ba51572af --- /dev/null +++ b/doc/maintain/autoremove_mockup.drawio @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/maintain/autoremove_mockup.png b/doc/maintain/autoremove_mockup.png new file mode 100644 index 0000000000000000000000000000000000000000..958e431a98727b594d1868ac80581770257a3e6c GIT binary patch literal 67557 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%0AcVMQ2adrlse;?ZZl+npZoEE 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 QDezB8PF?oB^u1^Q2L~K#TmS$7 literal 0 HcmV?d00001 From c6e073f68fa663e6b5ed63a454febc998bd5d81e Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Tue, 17 Dec 2024 22:21:44 +0100 Subject: [PATCH 28/30] mockup with tooltips [skip ci] --- doc/maintain/autoremove_mockup.drawio | 198 +++++++++++++++----------- doc/maintain/autoremove_mockup.png | Bin 67557 -> 113667 bytes 2 files changed, 111 insertions(+), 87 deletions(-) diff --git a/doc/maintain/autoremove_mockup.drawio b/doc/maintain/autoremove_mockup.drawio index ba51572af..d48a8cf0b 100644 --- a/doc/maintain/autoremove_mockup.drawio +++ b/doc/maintain/autoremove_mockup.drawio @@ -1,142 +1,166 @@ - + - + - - + + - - - - - - - - - - - - - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + diff --git a/doc/maintain/autoremove_mockup.png b/doc/maintain/autoremove_mockup.png index 958e431a98727b594d1868ac80581770257a3e6c..bc80436ffa0e56679191d608ed1b182060866b9d 100644 GIT binary patch literal 113667 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�O$l`W{#WHbnEv6*vtJG+Z(* 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%0AbWQ(cT;W%yKkxQ_ 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
    48Ij=IW!_gy0T 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 W?|e93DF|T!f4UcpvqmxAR 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%0AcVMQ2adrlse;?ZZl+npZoEE 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 QDezB8PF?oB^u1^Q2L~K#TmS$7 From ccb9923aa09eed64eb328f6809ace6ffa37a282f Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Tue, 17 Dec 2024 22:46:57 +0100 Subject: [PATCH 29/30] fin --- common/test/test_config_crontab.py | 14 +- common/test/test_lint.py | 5 +- common/test/test_snapshots.py | 1 - common/test/test_snapshots_autoremove.py | 845 +++++++++++------------ doc/maintain/5_auto_smart_remove.md | 16 +- 5 files changed, 438 insertions(+), 443 deletions(-) diff --git a/common/test/test_config_crontab.py b/common/test/test_config_crontab.py index 693a68b72..527ffe210 100644 --- a/common/test/test_config_crontab.py +++ b/common/test/test_config_crontab.py @@ -75,27 +75,27 @@ def setUp(self): def _create_config_file(self, parent_path): """Minimal config file""" - # pylint: disable-next=R0801 + # pylint: disable-next=duplicate-code cfg_content = inspect.cleandoc(''' config.version=6 - profile1.snapshots.include.1.type=0 - profile1.snapshots.include.1.value=rootpath/source - profile1.snapshots.include.size=1 profile1.snapshots.no_on_battery=false profile1.snapshots.notify.enabled=true profile1.snapshots.path=rootpath/destination profile1.snapshots.path.host=test-host profile1.snapshots.path.profile=1 profile1.snapshots.path.user=test-user - profile1.snapshots.preserve_acl=false - profile1.snapshots.preserve_xattr=false profile1.snapshots.remove_old_snapshots.enabled=true profile1.snapshots.remove_old_snapshots.unit=80 profile1.snapshots.remove_old_snapshots.value=10 + profile1.snapshots.include.1.type=0 + profile1.snapshots.include.1.value=rootpath/source + profile1.snapshots.include.size=1 + profile1.snapshots.preserve_acl=false + profile1.snapshots.preserve_xattr=false profile1.snapshots.rsync_options.enabled=false profile1.snapshots.rsync_options.value= profiles.version=1 - ''') + ''') # pylint: disable=R0801 # config file location config_fp = parent_path / 'config_path' / 'config' diff --git a/common/test/test_lint.py b/common/test/test_lint.py index 8794642c4..5c851be72 100644 --- a/common/test/test_lint.py +++ b/common/test/test_lint.py @@ -322,7 +322,10 @@ def test050_pylint_exclusive_ruleset(self): 'W4904', # deprecated-class 'R0202', # no-classmethod-decorator 'R0203', # no-staticmethod-decorator - 'R0801', # duplicate-code + # See PyLint bugs: + # https://github.com/pylint-dev/pylint/issues/214 + # https://github.com/pylint-dev/pylint/issues/7920 + # 'R0801', # duplicate-code # Enable asap. This list is a selection of existing (not all!) # problems currently existing in the BIT code base. Quite easy to diff --git a/common/test/test_snapshots.py b/common/test/test_snapshots.py index 60988f6e2..2f6f2f586 100644 --- a/common/test/test_snapshots.py +++ b/common/test/test_snapshots.py @@ -19,7 +19,6 @@ import string import unittest from unittest.mock import patch -from datetime import date, datetime from tempfile import TemporaryDirectory from test import generic from test.constants import CURRENTUSER, CURRENTGROUP, CURRENTGID, CURRENTUID diff --git a/common/test/test_snapshots_autoremove.py b/common/test/test_snapshots_autoremove.py index 218f179da..00e623dbe 100644 --- a/common/test/test_snapshots_autoremove.py +++ b/common/test/test_snapshots_autoremove.py @@ -81,7 +81,6 @@ def setUp(self): self.setUpPyfakefs(allow_root_user=False) # cleanup() happens automatically - # pylint: disable-next=consider-using-with self._temp_dir = TemporaryDirectory(prefix='bit.') # Workaround: tempfile and pathlib not compatible yet self.temp_path = Path(self._temp_dir.name) @@ -144,7 +143,7 @@ def test_simple_one(self): sut = sut.pop() - self.assertTrue(str(sut).startswith('20220305-074231-')) + self.assertTrue(str(sut).startswith('20220324-074231-')) def test_no_date_ordering(self): """Hit first in the list and ignoring its date ordering. @@ -240,7 +239,6 @@ def setUp(self): self.setUpPyfakefs(allow_root_user=False) # cleanup() happens automatically - # pylint: disable-next=consider-using-with self._temp_dir = TemporaryDirectory(prefix='bit.') # Workaround: tempfile and pathlib not compatible yet self.temp_path = Path(self._temp_dir.name) @@ -309,428 +307,424 @@ def test_simple(self): self.assertEqual(sut[7].date.date(), date(2024, 2, 19)) -class OnePerWeek(pyfakefs_ut.TestCase): - """Covering the smart remove setting 'Keep one snapshot per week for the - last N weeks'. - - That logic is implemented in 'Snapshots.smartRemoveList()' but not testable - in isolation. So for a first shot we just duplicate that code in this - tests (see self._org()). - """ - - def setUp(self): - """Setup a fake filesystem.""" - self.setUpPyfakefs(allow_root_user=False) - - # cleanup() happens automatically - # pylint: disable-next=consider-using-with - self._temp_dir = TemporaryDirectory(prefix='bit.') - # Workaround: tempfile and pathlib not compatible yet - self.temp_path = Path(self._temp_dir.name) - - self._config_fp = self._create_config_file(parent_path=self.temp_path) - self.cfg = config.Config(str(self._config_fp)) - - self.sn = snapshots.Snapshots(self.cfg) - - def _create_config_file(self, parent_path): - """Minimal config file""" - # pylint: disable-next=R0801 - cfg_content = inspect.cleandoc(''' - config.version=6 - profile1.snapshots.include.1.type=0 - profile1.snapshots.include.1.value=rootpath/source - profile1.snapshots.include.size=1 - profile1.snapshots.no_on_battery=false - profile1.snapshots.notify.enabled=true - profile1.snapshots.path=rootpath/destination - profile1.snapshots.path.host=test-host - profile1.snapshots.path.profile=1 - profile1.snapshots.path.user=test-user - profile1.snapshots.preserve_acl=false - profile1.snapshots.preserve_xattr=false - profile1.snapshots.remove_old_snapshots.enabled=true - profile1.snapshots.remove_old_snapshots.unit=80 - profile1.snapshots.remove_old_snapshots.value=10 - profile1.snapshots.rsync_options.enabled=false - profile1.snapshots.rsync_options.value= - profiles.version=1 - ''') - - # config file location - config_fp = parent_path / 'config_path' / 'config' - config_fp.parent.mkdir() - config_fp.write_text(cfg_content, 'utf-8') - - return config_fp - - def _org(self, now, n_weeks, snapshots, keep_healthy=True): - """Keep one per week for the last n_weeks weeks. - - Copied and slightly refactored from inside - 'Snapshots.smartRemoveList()'. - """ - print(f'\n_org() :: now={dt2str(now)} {n_weeks=}') - keep = set() - - # Sunday ??? (Sonntag) of previous week - idx_date = now - timedelta(days=now.weekday() + 1) - - print(f' for-loop... idx_date={dt2str(idx_date)}') - for i in range(0, n_weeks): - - min_date = idx_date - max_date = idx_date + timedelta(days=7) - - print(f' from {dt2str(min_date)} to/before {dt2str(max_date)}') - keep |= self.sn.smartRemoveKeepFirst( - snapshots, - min_date, - max_date, - keep_healthy=keep_healthy) - print(f' {keep=}') - - idx_date -= timedelta(days=7) - print(f' new idx_date={dt2str(idx_date)}') - print(' ...end loop') - - return keep - - def test_foobar(self): - start = date(2022, 1, 15) - now = date(2024, 11, 26) - # sids = create_SIDs(start, 9*7+3, self.cfg) - sids = create_SIDs( - [ - date(2024, 11, 2), - date(2024, 11, 9), - date(2024, 11, 16), - date(2024, 11, 23), - # date(2024, 11, 25) - ], - None, - self.cfg - ) - - weeks = 3 - sut = self._org( - # "Today" is Thursday 28th March - now=now, - # Keep the last week - n_weeks=weeks, - snapshots=sids) - - print(f'\noldest snapshot: {sid2str(sids[0])}') - for s in sorted(sut): - print(f'keep: {sid2str(s)}') - print(f'from/now: {dt2str(now)} {weeks=}') - print(f'latest snapshot: {sid2str(sids[-1])}') - - def test_sunday_last_week(self): - """Keep sunday of the last week.""" - # 9 backups: 18th (Monday) - 26th (Thursday) March 2024 - sids = create_SIDs(date(2024, 3, 18), 9, self.cfg) - - sut = self._org( - # "Today" is Thursday 28th March - now=date(2024, 3, 28), - # Keep the last week - n_weeks=1, - snapshots=sids) - - # only one kept - self.assertTrue(len(sut), 1) - # Sunday March 24th - self.assertTrue(str(sut.pop()).startswith('20240324-')) - - def test_three_weeks(self): - """Keep sunday of the last 3 weeks and throw away the rest.""" - - # 6 Weeks of backups (2024-02-18 - 2024-03-30) - sids = create_SIDs(datetime(2024, 2, 18), 7*6, self.cfg) - print(f'{str(sids[0])=} {str(sids[-1])=}') - - sut = self._org( - # "Today" is Thursday 28th March - now=date(2024, 3, 28), - # Keep the last week - n_weeks=3, - snapshots=sids) - - # only one kept - self.assertTrue(len(sut), 3) - sut = sorted(sut) - for s in sut: - print(s) - - -class ForLastNDays(pyfakefs_ut.TestCase): - """Covering the smart remove setting 'Keep one per day for N days.'. - - That logic is implemented in 'Snapshots.smartRemoveList()' but not testable - in isolation. So for a first shot we just duplicate that code in this - tests (see self._org()). - """ - - def setUp(self): - """Setup a fake filesystem.""" - self.setUpPyfakefs(allow_root_user=False) - - # cleanup() happens automatically - # pylint: disable-next=consider-using-with - self._temp_dir = TemporaryDirectory(prefix='bit.') - # Workaround: tempfile and pathlib not compatible yet - self.temp_path = Path(self._temp_dir.name) - - self._config_fp = self._create_config_file(parent_path=self.temp_path) - self.cfg = config.Config(str(self._config_fp)) - - self.sn = snapshots.Snapshots(self.cfg) - - def _create_config_file(self, parent_path): - """Minimal config file""" - # pylint: disable-next=R0801 - cfg_content = inspect.cleandoc(''' - config.version=6 - profile1.snapshots.include.1.type=0 - profile1.snapshots.include.1.value=rootpath/source - profile1.snapshots.include.size=1 - profile1.snapshots.no_on_battery=false - profile1.snapshots.notify.enabled=true - profile1.snapshots.path=rootpath/destination - profile1.snapshots.path.host=test-host - profile1.snapshots.path.profile=1 - profile1.snapshots.path.user=test-user - profile1.snapshots.preserve_acl=false - profile1.snapshots.preserve_xattr=false - profile1.snapshots.remove_old_snapshots.enabled=true - profile1.snapshots.remove_old_snapshots.unit=80 - profile1.snapshots.remove_old_snapshots.value=10 - profile1.snapshots.rsync_options.enabled=false - profile1.snapshots.rsync_options.value= - profiles.version=1 - ''') - - # config file location - config_fp = parent_path / 'config_path' / 'config' - config_fp.parent.mkdir() - config_fp.write_text(cfg_content, 'utf-8') - - return config_fp - - def _org(self, now, n_days, snapshots): - """Copied and slightly refactored from inside - 'Snapshots.smartRemoveList()'. - """ - print(f'\n_org() :: now={dt2str(now)} {n_days=}') - - keep = self.sn.smartRemoveKeepAll( - snapshots, - now - timedelta(days=n_days-1), - now + timedelta(days=1)) - - return keep - - def test_foobar(self): - sids = create_SIDs(datetime(2024, 2, 18), 10, self.cfg) - sut = self._org(now=date(2024, 2, 27), - n_days=3, - snapshots=sids) - - self.assertEqual(len(sut), 3) - - sut = sorted(sut) - - self.assertEqual(sut[0].date.date(), date(2024, 2, 25)) - self.assertEqual(sut[1].date.date(), date(2024, 2, 26)) - self.assertEqual(sut[2].date.date(), date(2024, 2, 27)) - - -class OnePerMonth(pyfakefs_ut.TestCase): - """Covering the smart remove setting 'Keep one snapshot per week for the - last N weeks'. - - That logic is implemented in 'Snapshots.smartRemoveList()' but not testable - in isolation. So for a first shot we just duplicate that code in this - tests (see self._org()). - """ - - def setUp(self): - """Setup a fake filesystem.""" - self.setUpPyfakefs(allow_root_user=False) - - # cleanup() happens automatically - # pylint: disable-next=consider-using-with - self._temp_dir = TemporaryDirectory(prefix='bit.') - # Workaround: tempfile and pathlib not compatible yet - self.temp_path = Path(self._temp_dir.name) - - self._config_fp = self._create_config_file(parent_path=self.temp_path) - self.cfg = config.Config(str(self._config_fp)) - - self.sn = snapshots.Snapshots(self.cfg) - - def _create_config_file(self, parent_path): - """Minimal config file""" - # pylint: disable-next=R0801 - cfg_content = inspect.cleandoc(''' - config.version=6 - profile1.snapshots.include.1.type=0 - profile1.snapshots.include.1.value=rootpath/source - profile1.snapshots.include.size=1 - profile1.snapshots.no_on_battery=false - profile1.snapshots.notify.enabled=true - profile1.snapshots.path=rootpath/destination - profile1.snapshots.path.host=test-host - profile1.snapshots.path.profile=1 - profile1.snapshots.path.user=test-user - profile1.snapshots.preserve_acl=false - profile1.snapshots.preserve_xattr=false - profile1.snapshots.remove_old_snapshots.enabled=true - profile1.snapshots.remove_old_snapshots.unit=80 - profile1.snapshots.remove_old_snapshots.value=10 - profile1.snapshots.rsync_options.enabled=false - profile1.snapshots.rsync_options.value= - profiles.version=1 - ''') - - # config file location - config_fp = parent_path / 'config_path' / 'config' - config_fp.parent.mkdir() - config_fp.write_text(cfg_content, 'utf-8') - - return config_fp - - def _org(self, now, n_months, snapshots, keep_healthy=True): - """Keep one per months for the last n_months weeks. - - Copied and slightly refactored from inside - 'Snapshots.smartRemoveList()'. - """ - print(f'\n_org() :: now={dt2str(now)} {n_months=}') - keep = set() - - d1 = date(now.year, now.month, 1) - d2 = self.sn.incMonth(d1) - - # each months - for i in range(0, n_months): - print(f'{i=} {d1=} {d2}') - keep |= self.sn.smartRemoveKeepFirst( - snapshots, d1, d2, keep_healthy=keep_healthy) - d2 = d1 - d1 = self.sn.decMonth(d1) - - return keep - - def test_foobarm(self): - now = date(2024, 12, 16) - # sids = create_SIDs(start, 9*7+3, self.cfg) - sids = create_SIDs(date(2023, 10, 26), 500, self.cfg) - - months = 3 - sut = self._org( - now=now, - # Keep the last week - n_months=months, - snapshots=sids) - - print(f'\noldest snapshot: {sid2str(sids[0])}') - for s in sorted(sut): - print(f'keep: {sid2str(s)}') - print(f'from/now: {dt2str(now)} {months=}') - print(f'latest snapshot: {sid2str(sids[-1])}') - - -class OnePerYear(pyfakefs_ut.TestCase): - """Covering the smart remove setting 'Keep one snapshot per year for all - years.' - - That logic is implemented in 'Snapshots.smartRemoveList()' but not testable - in isolation. So for a first shot we just duplicate that code in this - tests (see self._org()). - """ - - def setUp(self): - """Setup a fake filesystem.""" - self.setUpPyfakefs(allow_root_user=False) - - # cleanup() happens automatically - # pylint: disable-next=consider-using-with - self._temp_dir = TemporaryDirectory(prefix='bit.') - # Workaround: tempfile and pathlib not compatible yet - self.temp_path = Path(self._temp_dir.name) - - self._config_fp = self._create_config_file(parent_path=self.temp_path) - self.cfg = config.Config(str(self._config_fp)) - - self.sn = snapshots.Snapshots(self.cfg) - - def _create_config_file(self, parent_path): - """Minimal config file""" - # pylint: disable-next=R0801 - cfg_content = inspect.cleandoc(''' - config.version=6 - profile1.snapshots.include.1.type=0 - profile1.snapshots.include.1.value=rootpath/source - profile1.snapshots.include.size=1 - profile1.snapshots.no_on_battery=false - profile1.snapshots.notify.enabled=true - profile1.snapshots.path=rootpath/destination - profile1.snapshots.path.host=test-host - profile1.snapshots.path.profile=1 - profile1.snapshots.path.user=test-user - profile1.snapshots.preserve_acl=false - profile1.snapshots.preserve_xattr=false - profile1.snapshots.remove_old_snapshots.enabled=true - profile1.snapshots.remove_old_snapshots.unit=80 - profile1.snapshots.remove_old_snapshots.value=10 - profile1.snapshots.rsync_options.enabled=false - profile1.snapshots.rsync_options.value= - profiles.version=1 - ''') - - # config file location - config_fp = parent_path / 'config_path' / 'config' - config_fp.parent.mkdir() - config_fp.write_text(cfg_content, 'utf-8') - - return config_fp - - def _org(self, now, snapshots, keep_healthy=True): - """Keep one per year - - Copied and slightly refactored from inside - 'Snapshots.smartRemoveList()'. - """ - first_year = int(snapshots[-1].sid[:4]) - - print(f'\n_org() :: now={dt2str(now)} {first_year=}') - keep = set() - - for i in range(first_year, now.year+1): - keep |= self.sn.smartRemoveKeepFirst( - snapshots, - date(i, 1, 1), - date(i+1, 1, 1), - keep_healthy=keep_healthy) - - return keep - - def test_foobary(self): - now = date(2024, 12, 16) - # sids = create_SIDs(start, 9*7+3, self.cfg) - sids = create_SIDs(date(2019, 10, 26), 365*6, self.cfg) - - sut = self._org( - now=now, - snapshots=sids) - - print(f'\noldest snapshot: {sid2str(sids[0])}') - for s in sorted(sut): - print(f'keep: {sid2str(s)}') - print(f'from/now: {dt2str(now)}') - print(f'latest snapshot: {sid2str(sids[-1])}') +# class OnePerWeek(pyfakefs_ut.TestCase): +# """Covering the smart remove setting 'Keep one snapshot per week for the +# last N weeks'. + +# That logic is implemented in 'Snapshots.smartRemoveList()' but not testable +# in isolation. So for a first shot we just duplicate that code in this +# tests (see self._org()). +# """ + +# def setUp(self): +# """Setup a fake filesystem.""" +# self.setUpPyfakefs(allow_root_user=False) + +# # cleanup() happens automatically +# self._temp_dir = TemporaryDirectory(prefix='bit.') +# # Workaround: tempfile and pathlib not compatible yet +# self.temp_path = Path(self._temp_dir.name) + +# self._config_fp = self._create_config_file(parent_path=self.temp_path) +# self.cfg = config.Config(str(self._config_fp)) + +# self.sn = snapshots.Snapshots(self.cfg) + +# def _create_config_file(self, parent_path): +# """Minimal config file""" +# # pylint: disable-next=R0801 +# cfg_content = inspect.cleandoc(''' +# config.version=6 +# profile1.snapshots.include.1.type=0 +# profile1.snapshots.include.1.value=rootpath/source +# profile1.snapshots.include.size=1 +# profile1.snapshots.no_on_battery=false +# profile1.snapshots.notify.enabled=true +# profile1.snapshots.path=rootpath/destination +# profile1.snapshots.path.host=test-host +# profile1.snapshots.path.profile=1 +# profile1.snapshots.path.user=test-user +# profile1.snapshots.preserve_acl=false +# profile1.snapshots.preserve_xattr=false +# profile1.snapshots.remove_old_snapshots.enabled=true +# profile1.snapshots.remove_old_snapshots.unit=80 +# profile1.snapshots.remove_old_snapshots.value=10 +# profile1.snapshots.rsync_options.enabled=false +# profile1.snapshots.rsync_options.value= +# profiles.version=1 +# ''') + +# # config file location +# config_fp = parent_path / 'config_path' / 'config' +# config_fp.parent.mkdir() +# config_fp.write_text(cfg_content, 'utf-8') + +# return config_fp + +# def _org(self, now, n_weeks, snapshots, keep_healthy=True): +# """Keep one per week for the last n_weeks weeks. + +# Copied and slightly refactored from inside +# 'Snapshots.smartRemoveList()'. +# """ +# print(f'\n_org() :: now={dt2str(now)} {n_weeks=}') +# keep = set() + +# # Sunday ??? (Sonntag) of previous week +# idx_date = now - timedelta(days=now.weekday() + 1) + +# print(f' for-loop... idx_date={dt2str(idx_date)}') +# for _ in range(0, n_weeks): + +# min_date = idx_date +# max_date = idx_date + timedelta(days=7) + +# print(f' from {dt2str(min_date)} to/before {dt2str(max_date)}') +# keep |= self.sn.smartRemoveKeepFirst( +# snapshots, +# min_date, +# max_date, +# keep_healthy=keep_healthy) +# print(f' {keep=}') + +# idx_date -= timedelta(days=7) +# print(f' new idx_date={dt2str(idx_date)}') +# print(' ...end loop') + +# return keep + +# def test_foobar(self): +# # start = date(2022, 1, 15) +# now = date(2024, 11, 26) +# # sids = create_SIDs(start, 9*7+3, self.cfg) +# sids = create_SIDs( +# [ +# date(2024, 11, 2), +# date(2024, 11, 9), +# date(2024, 11, 16), +# date(2024, 11, 23), +# # date(2024, 11, 25) +# ], +# None, +# self.cfg +# ) + +# weeks = 3 +# sut = self._org( +# # "Today" is Thursday 28th March +# now=now, +# # Keep the last week +# n_weeks=weeks, +# snapshots=sids) + +# print(f'\noldest snapshot: {sid2str(sids[0])}') +# for s in sorted(sut): +# print(f'keep: {sid2str(s)}') +# print(f'from/now: {dt2str(now)} {weeks=}') +# print(f'latest snapshot: {sid2str(sids[-1])}') + +# def test_sunday_last_week(self): +# """Keep sunday of the last week.""" +# # 9 backups: 18th (Monday) - 26th (Thursday) March 2024 +# sids = create_SIDs(date(2024, 3, 18), 9, self.cfg) + +# sut = self._org( +# # "Today" is Thursday 28th March +# now=date(2024, 3, 28), +# # Keep the last week +# n_weeks=1, +# snapshots=sids) + +# # only one kept +# self.assertTrue(len(sut), 1) +# # Sunday March 24th +# self.assertTrue(str(sut.pop()).startswith('20240324-')) + +# def test_three_weeks(self): +# """Keep sunday of the last 3 weeks and throw away the rest.""" + +# # 6 Weeks of backups (2024-02-18 - 2024-03-30) +# sids = create_SIDs(datetime(2024, 2, 18), 7*6, self.cfg) +# print(f'{str(sids[0])=} {str(sids[-1])=}') + +# sut = self._org( +# # "Today" is Thursday 28th March +# now=date(2024, 3, 28), +# # Keep the last week +# n_weeks=3, +# snapshots=sids) + +# # only one kept +# self.assertTrue(len(sut), 3) +# sut = sorted(sut) +# for s in sut: +# print(s) + + +# class ForLastNDays(pyfakefs_ut.TestCase): +# """Covering the smart remove setting 'Keep one per day for N days.'. + +# That logic is implemented in 'Snapshots.smartRemoveList()' but not testable +# in isolation. So for a first shot we just duplicate that code in this +# tests (see self._org()). +# """ + +# def setUp(self): +# """Setup a fake filesystem.""" +# self.setUpPyfakefs(allow_root_user=False) + +# # cleanup() happens automatically +# self._temp_dir = TemporaryDirectory(prefix='bit.') +# # Workaround: tempfile and pathlib not compatible yet +# self.temp_path = Path(self._temp_dir.name) + +# self._config_fp = self._create_config_file(parent_path=self.temp_path) +# self.cfg = config.Config(str(self._config_fp)) + +# self.sn = snapshots.Snapshots(self.cfg) + +# def _create_config_file(self, parent_path): +# """Minimal config file""" +# # pylint: disable-next=R0801 +# cfg_content = inspect.cleandoc(''' +# config.version=6 +# profile1.snapshots.include.1.type=0 +# profile1.snapshots.include.1.value=rootpath/source +# profile1.snapshots.include.size=1 +# profile1.snapshots.no_on_battery=false +# profile1.snapshots.notify.enabled=true +# profile1.snapshots.path=rootpath/destination +# profile1.snapshots.path.host=test-host +# profile1.snapshots.path.profile=1 +# profile1.snapshots.path.user=test-user +# profile1.snapshots.preserve_acl=false +# profile1.snapshots.preserve_xattr=false +# profile1.snapshots.remove_old_snapshots.enabled=true +# profile1.snapshots.remove_old_snapshots.unit=80 +# profile1.snapshots.remove_old_snapshots.value=10 +# profile1.snapshots.rsync_options.enabled=false +# profile1.snapshots.rsync_options.value= +# profiles.version=1 +# ''') + +# # config file location +# config_fp = parent_path / 'config_path' / 'config' +# config_fp.parent.mkdir() +# config_fp.write_text(cfg_content, 'utf-8') + +# return config_fp + +# def _org(self, now, n_days, snapshots): +# """Copied and slightly refactored from inside +# 'Snapshots.smartRemoveList()'. +# """ +# print(f'\n_org() :: now={dt2str(now)} {n_days=}') + +# keep = self.sn.smartRemoveKeepAll( +# snapshots, +# now - timedelta(days=n_days-1), +# now + timedelta(days=1)) + +# return keep + +# def test_foobar(self): +# sids = create_SIDs(datetime(2024, 2, 18), 10, self.cfg) +# sut = self._org(now=date(2024, 2, 27), +# n_days=3, +# snapshots=sids) + +# self.assertEqual(len(sut), 3) + +# sut = sorted(sut) + +# self.assertEqual(sut[0].date.date(), date(2024, 2, 25)) +# self.assertEqual(sut[1].date.date(), date(2024, 2, 26)) +# self.assertEqual(sut[2].date.date(), date(2024, 2, 27)) + + +# class OnePerMonth(pyfakefs_ut.TestCase): +# """Covering the smart remove setting 'Keep one snapshot per week for the +# last N weeks'. + +# That logic is implemented in 'Snapshots.smartRemoveList()' but not testable +# in isolation. So for a first shot we just duplicate that code in this +# tests (see self._org()). +# """ + +# def setUp(self): +# """Setup a fake filesystem.""" +# self.setUpPyfakefs(allow_root_user=False) + +# # cleanup() happens automatically +# self._temp_dir = TemporaryDirectory(prefix='bit.') +# # Workaround: tempfile and pathlib not compatible yet +# self.temp_path = Path(self._temp_dir.name) + +# self._config_fp = self._create_config_file(parent_path=self.temp_path) +# self.cfg = config.Config(str(self._config_fp)) + +# self.sn = snapshots.Snapshots(self.cfg) + +# def _create_config_file(self, parent_path): +# """Minimal config file""" +# # pylint: disable-next=R0801 +# cfg_content = inspect.cleandoc(''' +# config.version=6 +# profile1.snapshots.include.1.type=0 +# profile1.snapshots.include.1.value=rootpath/source +# profile1.snapshots.include.size=1 +# profile1.snapshots.no_on_battery=false +# profile1.snapshots.notify.enabled=true +# profile1.snapshots.path=rootpath/destination +# profile1.snapshots.path.host=test-host +# profile1.snapshots.path.profile=1 +# profile1.snapshots.path.user=test-user +# profile1.snapshots.preserve_acl=false +# profile1.snapshots.preserve_xattr=false +# profile1.snapshots.remove_old_snapshots.enabled=true +# profile1.snapshots.remove_old_snapshots.unit=80 +# profile1.snapshots.remove_old_snapshots.value=10 +# profile1.snapshots.rsync_options.enabled=false +# profile1.snapshots.rsync_options.value= +# profiles.version=1 +# ''') + +# # config file location +# config_fp = parent_path / 'config_path' / 'config' +# config_fp.parent.mkdir() +# config_fp.write_text(cfg_content, 'utf-8') + +# return config_fp + +# def _org(self, now, n_months, snapshots, keep_healthy=True): +# """Keep one per months for the last n_months weeks. + +# Copied and slightly refactored from inside +# 'Snapshots.smartRemoveList()'. +# """ +# print(f'\n_org() :: now={dt2str(now)} {n_months=}') +# keep = set() + +# d1 = date(now.year, now.month, 1) +# d2 = self.sn.incMonth(d1) + +# # each months +# for i in range(0, n_months): +# print(f'{i=} {d1=} {d2}') +# keep |= self.sn.smartRemoveKeepFirst( +# snapshots, d1, d2, keep_healthy=keep_healthy) +# d2 = d1 +# d1 = self.sn.decMonth(d1) + +# return keep + +# def test_foobarm(self): +# now = date(2024, 12, 16) +# # sids = create_SIDs(start, 9*7+3, self.cfg) +# sids = create_SIDs(date(2023, 10, 26), 500, self.cfg) + +# months = 3 +# sut = self._org( +# now=now, +# # Keep the last week +# n_months=months, +# snapshots=sids) + +# print(f'\noldest snapshot: {sid2str(sids[0])}') +# for s in sorted(sut): +# print(f'keep: {sid2str(s)}') +# print(f'from/now: {dt2str(now)} {months=}') +# print(f'latest snapshot: {sid2str(sids[-1])}') + + +# class OnePerYear(pyfakefs_ut.TestCase): +# """Covering the smart remove setting 'Keep one snapshot per year for all +# years.' + +# That logic is implemented in 'Snapshots.smartRemoveList()' but not testable +# in isolation. So for a first shot we just duplicate that code in this +# tests (see self._org()). +# """ + +# def setUp(self): +# """Setup a fake filesystem.""" +# self.setUpPyfakefs(allow_root_user=False) + +# # cleanup() happens automatically +# self._temp_dir = TemporaryDirectory(prefix='bit.') +# # Workaround: tempfile and pathlib not compatible yet +# self.temp_path = Path(self._temp_dir.name) + +# self._config_fp = self._create_config_file(parent_path=self.temp_path) +# self.cfg = config.Config(str(self._config_fp)) + +# self.sn = snapshots.Snapshots(self.cfg) + +# def _create_config_file(self, parent_path): +# """Minimal config file""" +# # pylint: disable-next=R0801 +# cfg_content = inspect.cleandoc(''' +# config.version=6 +# profile1.snapshots.include.1.type=0 +# profile1.snapshots.include.1.value=rootpath/source +# profile1.snapshots.include.size=1 +# profile1.snapshots.no_on_battery=false +# profile1.snapshots.notify.enabled=true +# profile1.snapshots.path=rootpath/destination +# profile1.snapshots.path.host=test-host +# profile1.snapshots.path.profile=1 +# profile1.snapshots.path.user=test-user +# profile1.snapshots.preserve_acl=false +# profile1.snapshots.preserve_xattr=false +# profile1.snapshots.remove_old_snapshots.enabled=true +# profile1.snapshots.remove_old_snapshots.unit=80 +# profile1.snapshots.remove_old_snapshots.value=10 +# profile1.snapshots.rsync_options.enabled=false +# profile1.snapshots.rsync_options.value= +# profiles.version=1 +# ''') + +# # config file location +# config_fp = parent_path / 'config_path' / 'config' +# config_fp.parent.mkdir() +# config_fp.write_text(cfg_content, 'utf-8') + +# return config_fp + +# def _org(self, now, snapshots, keep_healthy=True): +# """Keep one per year + +# Copied and slightly refactored from inside +# 'Snapshots.smartRemoveList()'. +# """ +# first_year = int(snapshots[-1].sid[:4]) + +# print(f'\n_org() :: now={dt2str(now)} {first_year=}') +# keep = set() + +# for i in range(first_year, now.year+1): +# keep |= self.sn.smartRemoveKeepFirst( +# snapshots, +# date(i, 1, 1), +# date(i+1, 1, 1), +# keep_healthy=keep_healthy) + +# return keep + +# def test_foobary(self): +# now = date(2024, 12, 16) +# # sids = create_SIDs(start, 9*7+3, self.cfg) +# sids = create_SIDs(date(2019, 10, 26), 365*6, self.cfg) + +# sut = self._org( +# now=now, +# snapshots=sids) + +# print(f'\noldest snapshot: {sid2str(sids[0])}') +# for s in sorted(sut): +# print(f'keep: {sid2str(s)}') +# print(f'from/now: {dt2str(now)}') +# print(f'latest snapshot: {sid2str(sids[-1])}') class IncDecMonths(pyfakefs_ut.TestCase): @@ -741,7 +735,6 @@ def setUp(self): self.setUpPyfakefs(allow_root_user=False) # cleanup() happens automatically - # pylint: disable-next=consider-using-with self._temp_dir = TemporaryDirectory(prefix='bit.') # Workaround: tempfile and pathlib not compatible yet self.temp_path = Path(self._temp_dir.name) diff --git a/doc/maintain/5_auto_smart_remove.md b/doc/maintain/5_auto_smart_remove.md index d801098ad..1e53d6adf 100644 --- a/doc/maintain/5_auto_smart_remove.md +++ b/doc/maintain/5_auto_smart_remove.md @@ -30,7 +30,7 @@ This is how it looks like currently: * `Snapshots.smartRemoveList()` is called by `freeSpace()` and is the entry for _Smart remove_ related rules. -## Ordering and interferance of the rules +## Ordering and interference of the rules 1. Remove snapshots older than N years/weeks/days. 2. Smart-remove rules with calling `Snapshots.smartRemoveList`. 1. Don't if there is only one backup left. @@ -49,8 +49,8 @@ This is how it looks like currently: ### Older than N years - Happens in `Snapshots.freeSpace()` - Relevant also `self.config.removeOldSnapshotsDate()` -- Backups removed immediatly before executing any other rule. -- Named snaphots ignored and kept. +- Backups removed immediately before executing any other rule. +- Named snapshots ignored and kept. ### Smart remove: Daily GUI wording: _Keep all snapshots for the last `N` day(s)._ @@ -58,7 +58,7 @@ GUI wording: _Keep all snapshots for the last `N` day(s)._ Current behavior of the algorithm: * Bug was that in some cases `N-1` days are kept. * Reason was that not dates but snapshotIDS (included their tags, the last 3 - digits) are used for comparision. + digits) are used for comparison. * The bug is fixed. ### Smart remove: Weekly @@ -88,11 +88,11 @@ Current behavior of the algorithm: - s ### Free space - Remove until enough free disc space (`self.config.minFreeSpaceMib()`). -- Immediatly removed before executing any other rule. +- Immediately removed before executing any other rule. ### Free inodes - Remove until enough free inodes (`self.config.minFreeInodes()`) -- Immediatly removed before executing any other rule. +- Immediately removed before executing any other rule. # How it could be ## Overview @@ -100,7 +100,7 @@ The following does not reflect the real behavior. It is a draft and suggestion for the auto-/smart-remove related behavior of BIT and how to implement it. ## General -- Wording: Remove "Smart" and make everyting "Auto remove". +- Wording: Remove "Smart" and make everything "Auto remove". - The rules should to be consistent in their behavior. - Always keep the latest/newest element in the list (Sunday for weeks, 31th for months, ...). @@ -135,7 +135,7 @@ For new wording see the mockup. - Keep the latest/newset backup per months (30th/31th day of the months). 6. Keep one per year for all years. - Use the latest day of year. - - That implicite ignores the current running year. + - That implicit ignores the current running year. 3. Free space: Remove until there is enough. - No need for modification. 4. Free inodes: Remove until there are enough. From 1c567f6b8aad77e25d61cb1c03d5274e65ea059a Mon Sep 17 00:00:00 2001 From: Christian Buhtz Date: Wed, 18 Dec 2024 19:51:36 +0100 Subject: [PATCH 30/30] modified mockup [skip ci] --- doc/maintain/autoremove_mockup.drawio | 200 ++++++++++++++------------ doc/maintain/autoremove_mockup.png | Bin 113667 -> 134060 bytes 2 files changed, 109 insertions(+), 91 deletions(-) diff --git a/doc/maintain/autoremove_mockup.drawio b/doc/maintain/autoremove_mockup.drawio index d48a8cf0b..53fc491ae 100644 --- a/doc/maintain/autoremove_mockup.drawio +++ b/doc/maintain/autoremove_mockup.drawio @@ -1,11 +1,11 @@ - + - + @@ -28,140 +28,158 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + - - + + - + + + + - - + + - + + + + - - + + - + - - + + - - - - - - - - - - - - - - - - + - - + + - - - - - - diff --git a/doc/maintain/autoremove_mockup.png b/doc/maintain/autoremove_mockup.png index bc80436ffa0e56679191d608ed1b182060866b9d..c9f3766cd83af141a8342b5c6aee0feea21750f9 100644 GIT binary patch literal 134060 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
    kMbxf>=a1uZ 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�O$l`W{#WHbnEv6*vtJG+Z(* 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%0AbWQ(cT;W%yKkxQ_ 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
      48Ij=IW!_gy0T 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 W?|e93DF|T!f4Ucpv