Replicating to an empty dataset works, but the next try failes.
Here the log.
[2025/09/05 12:11:46] DEBUG [IoThread_17] [zettarepl.transport.local] [shell:21] [async_exec:21] Running [‘zfs’, ‘list’, ‘-t’, ‘snapshot’, ‘-H’, ‘-o’, ‘name’, ‘-s’, ‘name’, ‘-d’, ‘1’, ‘SSD’]
[2025/09/05 12:11:46] DEBUG [IoThread_17] [zettarepl.transport.local] [shell:21] [async_exec:21] Success: ‘SSD@auto-2025-09-05_11-15\n’
[2025/09/05 12:11:46] DEBUG [IoThread_0] [zettarepl.transport.local] [shell:22] [async_exec:22] Running [‘zfs’, ‘list’, ‘-t’, ‘snapshot’, ‘-H’, ‘-o’, ‘name’, ‘-s’, ‘name’, ‘-d’, ‘1’, ‘SSD’]
[2025/09/05 12:11:46] DEBUG [IoThread_0] [zettarepl.transport.local] [shell:22] [async_exec:22] Success: ‘SSD@auto-2025-09-05_11-15\n’
[2025/09/05 12:12:05] INFO [MainThread] [zettarepl.scheduler.clock] Interrupted
[2025/09/05 12:12:05] INFO [MainThread] [zettarepl.zettarepl] Scheduled tasks: [<Replication Task ‘task_2’>]
[2025/09/05 12:12:05] ERROR [retention] [zettarepl.zettarepl] Unhandled exception while running retention @cee:{“TNLOG”: {“exception”: “Traceback (most recent call last):\n File "/usr/lib/python3/dist-packages/zettarepl/zettarepl.py", line 328, in _run_retention\n self._run_local_retention(retention_datetime, pending_running_tasks)\n File "/usr/lib/python3/dist-packages/zettarepl/zettarepl.py", line 434, in _run_local_retention\n snapshots_to_destroy = calculate_snapshots_to_remove(owners, local_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 22, in calculate_snapshots_to_remove\n for snapshot in calculate_dataset_snapshots_to_remove(dataset_owners, dataset, dataset_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 58, in calculate_dataset_snapshots_to_remove\n snapshot_owners = [\n ^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 64, in \n owner.owns_snapshot(dataset, parsed_snapshot_name)\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/snapshot_owner.py", line 54, in owns_snapshot\n return replication_task_should_replicate_parsed_snapshot(self.replication_task, parsed_snapshot_name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/should_replicate.py", line 37, in replication_task_should_replicate_parsed_snapshot\n replication_task.restrict_schedule.should_run(parsed_snapshot.datetime)\n File "/usr/lib/python3/dist-packages/zettarepl/scheduler/cron.py", line 38, in should_run\n idealized = idealized_datetime(d)\n ^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/utils/datetime.py", line 11, in idealized_datetime\n return d.replace(second=0, microsecond=0, tzinfo=None)\n ^^^^^^^^^\nAttributeError: ‘NoneType’ object has no attribute ‘replace’”, “type”: “PYTHON_EXCEPTION”, “time”: “2025-09-05 10:12:05.506806”}}
[2025/09/05 12:12:06] INFO [replication_task__task_2] [zettarepl.replication.run] Encrypted destination dataset ‘Storage/Rep-Test3’ does not have matching snapshots or data, destroying it
[2025/09/05 12:12:06] INFO [replication_task__task_2] [zettarepl.replication.pre_retention] Pre-retention destroying snapshots:
[2025/09/05 12:12:06] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD’ to ‘Storage/Rep-Test3’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:07] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt’ to ‘Storage/Rep-Test3/.ix-virt’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:08] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/buckets’ to ‘Storage/Rep-Test3/.ix-virt/buckets’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:08] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/containers’ to ‘Storage/Rep-Test3/.ix-virt/containers’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:09] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/containers/pbsbw’ to ‘Storage/Rep-Test3/.ix-virt/containers/pbsbw’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:13] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/custom’ to ‘Storage/Rep-Test3/.ix-virt/custom’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:14] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/custom/default_proxmox-backup-server_3.3-1_1742829103494.iso.iso’ to ‘Storage/Rep-Test3/.ix-virt/custom/default_proxmox-backup-server_3.3-1_1742829103494.iso.iso’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:18] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/custom/default_testvolume’ to ‘Storage/Rep-Test3/.ix-virt/custom/default_testvolume’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:25] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/deleted’ to ‘Storage/Rep-Test3/.ix-virt/deleted’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:25] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/deleted/buckets’ to ‘Storage/Rep-Test3/.ix-virt/deleted/buckets’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:26] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/deleted/containers’ to ‘Storage/Rep-Test3/.ix-virt/deleted/containers’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:27] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/deleted/custom’ to ‘Storage/Rep-Test3/.ix-virt/deleted/custom’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:27] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/deleted/images’ to ‘Storage/Rep-Test3/.ix-virt/deleted/images’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:28] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/deleted/images/2a3f3a1c3c3b56cac8b8c4bd0fb4d0f429050240d3c618220346bf7a71153a2d’ to ‘Storage/Rep-Test3/.ix-virt/deleted/images/2a3f3a1c3c3b56cac8b8c4bd0fb4d0f429050240d3c618220346bf7a71153a2d’ of snapshot=‘readonly’ incremental_base=None include_intermediate=True receive_resume_token=None encryption=False
[2025/09/05 12:12:31] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/deleted/images/2a3f3a1c3c3b56cac8b8c4bd0fb4d0f429050240d3c618220346bf7a71153a2d’ to ‘Storage/Rep-Test3/.ix-virt/deleted/images/2a3f3a1c3c3b56cac8b8c4bd0fb4d0f429050240d3c618220346bf7a71153a2d’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=‘readonly’ include_intermediate=True receive_resume_token=None encryption=False
[2025/09/05 12:12:31] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/deleted/virtual-machines’ to ‘Storage/Rep-Test3/.ix-virt/deleted/virtual-machines’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:32] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/images’ to ‘Storage/Rep-Test3/.ix-virt/images’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:33] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/images/7c657dcda58a73c9083c2d38baedc6532385c457abdf8f257dc8e4c2703d0919’ to ‘Storage/Rep-Test3/.ix-virt/images/7c657dcda58a73c9083c2d38baedc6532385c457abdf8f257dc8e4c2703d0919’ of snapshot=‘readonly’ incremental_base=None include_intermediate=True receive_resume_token=None encryption=False
[2025/09/05 12:12:36] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/images/7c657dcda58a73c9083c2d38baedc6532385c457abdf8f257dc8e4c2703d0919’ to ‘Storage/Rep-Test3/.ix-virt/images/7c657dcda58a73c9083c2d38baedc6532385c457abdf8f257dc8e4c2703d0919’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=‘readonly’ include_intermediate=True receive_resume_token=None encryption=False
[2025/09/05 12:12:36] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/virtual-machines’ to ‘Storage/Rep-Test3/.ix-virt/virtual-machines’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:37] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/virtual-machines/sadfagdfgsfd’ to ‘Storage/Rep-Test3/.ix-virt/virtual-machines/sadfagdfgsfd’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:38] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/.ix-virt/virtual-machines/sadfagdfgsfd.block’ to ‘Storage/Rep-Test3/.ix-virt/virtual-machines/sadfagdfgsfd.block’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:39] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/ISO’ to ‘Storage/Rep-Test3/ISO’ of snapshot=‘auto-2025-09-04_01-39’ incremental_base=None include_intermediate=True receive_resume_token=None encryption=False
[2025/09/05 12:12:43] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/ISO’ to ‘Storage/Rep-Test3/ISO’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=‘auto-2025-09-04_01-39’ include_intermediate=True receive_resume_token=None encryption=False
[2025/09/05 12:12:44] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/VMS’ to ‘Storage/Rep-Test3/VMS’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:44] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/VM_DATA’ to ‘Storage/Rep-Test3/VM_DATA’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:45] INFO [replication_task__task_2] [zettarepl.replication.run] For replication task ‘task_2’: doing push from ‘SSD/VM_DATA/test001’ to ‘Storage/Rep-Test3/VM_DATA/test001’ of snapshot=‘auto-2025-09-05_11-15’ incremental_base=None include_intermediate=False receive_resume_token=None encryption=False
[2025/09/05 12:12:51] INFO [retention] [zettarepl.zettarepl] Retention destroying local snapshots:
[2025/09/05 12:12:51] ERROR [retention] [zettarepl.zettarepl] Unhandled exception while running retention @cee:{“TNLOG”: {“exception”: “Traceback (most recent call last):\n File "/usr/lib/python3/dist-packages/zettarepl/zettarepl.py", line 329, in _run_retention\n self._run_remote_retention(retention_datetime, pending_running_tasks)\n File "/usr/lib/python3/dist-packages/zettarepl/zettarepl.py", line 468, in _run_remote_retention\n snapshots_to_destroy = calculate_snapshots_to_remove(owners, remote_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 22, in calculate_snapshots_to_remove\n for snapshot in calculate_dataset_snapshots_to_remove(dataset_owners, dataset, dataset_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 58, in calculate_dataset_snapshots_to_remove\n snapshot_owners = [\n ^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 64, in \n owner.owns_snapshot(dataset, parsed_snapshot_name)\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/snapshot_owner.py", line 54, in owns_snapshot\n return replication_task_should_replicate_parsed_snapshot(self.replication_task, parsed_snapshot_name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/should_replicate.py", line 37, in replication_task_should_replicate_parsed_snapshot\n replication_task.restrict_schedule.should_run(parsed_snapshot.datetime)\n File "/usr/lib/python3/dist-packages/zettarepl/scheduler/cron.py", line 38, in should_run\n idealized = idealized_datetime(d)\n ^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/utils/datetime.py", line 11, in idealized_datetime\n return d.replace(second=0, microsecond=0, tzinfo=None)\n ^^^^^^^^^\nAttributeError: ‘NoneType’ object has no attribute ‘replace’”, “type”: “PYTHON_EXCEPTION”, “time”: “2025-09-05 10:12:51.425062”}}
So far so good, now the error.
[2025/09/05 12:15:08] INFO [MainThread] [zettarepl.scheduler.clock] Interrupted
[2025/09/05 12:15:08] INFO [MainThread] [zettarepl.zettarepl] Scheduled tasks: [<Replication Task ‘task_2’>]
[2025/09/05 12:15:08] ERROR [retention] [zettarepl.zettarepl] Unhandled exception while running retention @cee:{“TNLOG”: {“exception”: “Traceback (most recent call last):\n File "/usr/lib/python3/dist-packages/zettarepl/zettarepl.py", line 328, in _run_retention\n self._run_local_retention(retention_datetime, pending_running_tasks)\n File "/usr/lib/python3/dist-packages/zettarepl/zettarepl.py", line 434, in _run_local_retention\n snapshots_to_destroy = calculate_snapshots_to_remove(owners, local_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 22, in calculate_snapshots_to_remove\n for snapshot in calculate_dataset_snapshots_to_remove(dataset_owners, dataset, dataset_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 58, in calculate_dataset_snapshots_to_remove\n snapshot_owners = [\n ^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 64, in \n owner.owns_snapshot(dataset, parsed_snapshot_name)\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/snapshot_owner.py", line 54, in owns_snapshot\n return replication_task_should_replicate_parsed_snapshot(self.replication_task, parsed_snapshot_name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/should_replicate.py", line 37, in replication_task_should_replicate_parsed_snapshot\n replication_task.restrict_schedule.should_run(parsed_snapshot.datetime)\n File "/usr/lib/python3/dist-packages/zettarepl/scheduler/cron.py", line 38, in should_run\n idealized = idealized_datetime(d)\n ^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/utils/datetime.py", line 11, in idealized_datetime\n return d.replace(second=0, microsecond=0, tzinfo=None)\n ^^^^^^^^^\nAttributeError: ‘NoneType’ object has no attribute ‘replace’”, “type”: “PYTHON_EXCEPTION”, “time”: “2025-09-05 10:15:08.544911”}}
[2025/09/05 12:15:10] ERROR [replication_task__task_2] [zettarepl.replication.run] For task ‘task_2’ unhandled replication error AttributeError(“‘NoneType’ object has no attribute ‘replace’”) @cee:{“TNLOG”: {“exception”: “Traceback (most recent call last):\n File "/usr/lib/python3/dist-packages/zettarepl/replication/run.py", line 181, in run_replication_tasks\n retry_contains_partially_complete_state(\n File "/usr/lib/python3/dist-packages/zettarepl/replication/partially_complete_state.py", line 16, in retry_contains_partially_complete_state\n return func()\n ^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/replication/run.py", line 182, in \n lambda: run_replication_task_part(replication_task, source_dataset, src_context, dst_context,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/replication/run.py", line 263, in run_replication_task_part\n pre_retention(src_context.context.now.replace(tzinfo=None), replication_task, src_context.datasets,\n File "/usr/lib/python3/dist-packages/zettarepl/replication/pre_retention.py", line 61, in pre_retention\n snapshots_to_destroy = calculate_snapshots_to_remove(owners, remote_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 22, in calculate_snapshots_to_remove\n for snapshot in calculate_dataset_snapshots_to_remove(dataset_owners, dataset, dataset_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 58, in calculate_dataset_snapshots_to_remove\n snapshot_owners = [\n ^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 64, in \n owner.owns_snapshot(dataset, parsed_snapshot_name)\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/snapshot_owner.py", line 54, in owns_snapshot\n return replication_task_should_replicate_parsed_snapshot(self.replication_task, parsed_snapshot_name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/should_replicate.py", line 37, in replication_task_should_replicate_parsed_snapshot\n replication_task.restrict_schedule.should_run(parsed_snapshot.datetime)\n File "/usr/lib/python3/dist-packages/zettarepl/scheduler/cron.py", line 38, in should_run\n idealized = idealized_datetime(d)\n ^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/utils/datetime.py", line 11, in idealized_datetime\n return d.replace(second=0, microsecond=0, tzinfo=None)\n ^^^^^^^^^\nAttributeError: ‘NoneType’ object has no attribute ‘replace’”, “type”: “PYTHON_EXCEPTION”, “time”: “2025-09-05 10:15:10.254250”}}
[2025/09/05 12:15:10] INFO [retention] [zettarepl.zettarepl] Retention destroying local snapshots:
[2025/09/05 12:15:10] ERROR [retention] [zettarepl.zettarepl] Unhandled exception while running retention @cee:{“TNLOG”: {“exception”: “Traceback (most recent call last):\n File "/usr/lib/python3/dist-packages/zettarepl/zettarepl.py", line 329, in _run_retention\n self._run_remote_retention(retention_datetime, pending_running_tasks)\n File "/usr/lib/python3/dist-packages/zettarepl/zettarepl.py", line 468, in _run_remote_retention\n snapshots_to_destroy = calculate_snapshots_to_remove(owners, remote_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 22, in calculate_snapshots_to_remove\n for snapshot in calculate_dataset_snapshots_to_remove(dataset_owners, dataset, dataset_snapshots)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 58, in calculate_dataset_snapshots_to_remove\n snapshot_owners = [\n ^\n File "/usr/lib/python3/dist-packages/zettarepl/retention/calculate.py", line 64, in \n owner.owns_snapshot(dataset, parsed_snapshot_name)\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/snapshot_owner.py", line 54, in owns_snapshot\n return replication_task_should_replicate_parsed_snapshot(self.replication_task, parsed_snapshot_name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/replication/task/should_replicate.py", line 37, in replication_task_should_replicate_parsed_snapshot\n replication_task.restrict_schedule.should_run(parsed_snapshot.datetime)\n File "/usr/lib/python3/dist-packages/zettarepl/scheduler/cron.py", line 38, in should_run\n idealized = idealized_datetime(d)\n ^^^^^^^^^^^^^^^^^^^^^\n File "/usr/lib/python3/dist-packages/zettarepl/utils/datetime.py", line 11, in idealized_datetime\n return d.replace(second=0, microsecond=0, tzinfo=None)\n ^^^^^^^^^\nAttributeError: ‘NoneType’ object has no attribute ‘replace’”, “type”: “PYTHON_EXCEPTION”, “time”: “2025-09-05 10:15:10.543000”}}
…