TrueNAS compatibility: the patch's assumptions no longer hold #3

Closed
opened 2026-07-13 15:03:18 -04:00 by gitea-actions · 1 comment

tools/compat.py found that the patch's assumptions about middlewared no longer hold.

TrueNAS B2/S3 providers Nested snapshots Hardware-verified
24.10.2.4 ok ok —
25.04.2.6 ok ok —
25.10.4 ok ok nested + providers; 252-snapshot recursive backup of /mnt/Tap, 18m
26.0.0-BETA.3 (unreleased) ok BROKEN —
master (unreleased) BROKEN BROKEN —
verdict meaning
ok Every assumption the patch makes about middleware still holds.
BROKEN middleware changed underneath the patch. apply.sh refuses to apply that module on this version and leaves TrueNAS stock, so backups keep working — without the module's feature.
native TrueNAS does this itself now. The module retires; it is not a failure.

"ok" means the patch's assumptions hold, checked automatically against iX's
source. It does not mean a human ran a backup on it — that is the
Hardware-verified column, which is filled in by hand and only by doing it.

release/26.0.0-BETA.3

nested — the patch will not apply:

  • call-zfs-dataset-query: plugins/zfs_/dataset.py no longer exists, so zfs.dataset.query is gone
    • why it matters: SNAPSHOT_BLOCK enumerates FILESYSTEM datasets to build the staging plan
  • call-zfs-snapshot-delete: plugins/zfs_/snapshot.py no longer exists, so zfs.snapshot.delete is gone
    • why it matters: delete_snapshot_tree() sweeps the recursive snapshot. Without it every run orphans one snapshot per descendant dataset (250 on a real pool)
  • call-zfs-snapshot-query: plugins/zfs_/snapshot.py no longer exists, so zfs.snapshot.query is gone
    • why it matters: delete_snapshot_tree()'s fallback sweep enumerates the tree by name

master

nested — the patch will not apply:

  • restic-backup: restic_backup('context', 'job', 'entry', 'credentials', 'dry_run', 'rate_limit') — positional parameters changed; the patch calls it as (middleware, job, cloud_backup)
    • why it matters: SYNC_BLOCK wraps it to tear down bind mounts in a finally
  • call-zfs-dataset-query: plugins/zfs_/dataset.py no longer exists, so zfs.dataset.query is gone
    • why it matters: SNAPSHOT_BLOCK enumerates FILESYSTEM datasets to build the staging plan
  • call-zfs-snapshot-delete: plugins/zfs_/snapshot.py no longer exists, so zfs.snapshot.delete is gone
    • why it matters: delete_snapshot_tree() sweeps the recursive snapshot. Without it every run orphans one snapshot per descendant dataset (250 on a real pool)
  • call-zfs-snapshot-query: plugins/zfs_/snapshot.py no longer exists, so zfs.snapshot.query is gone
    • why it matters: delete_snapshot_tree()'s fallback sweep enumerates the tree by name

providers — the patch will not apply:

  • restic-config-fn: get_restic_config('entry', 'credentials') — positional parameters changed; the patch calls it as (cloud_backup)
    • why it matters: RESTIC_BLOCK wraps it to rewrite the repo URL; it calls the original WITHOUT await, so it must stay synchronous

Filed automatically by .github/workflows/compat.yml.

`tools/compat.py` found that the patch's assumptions about middlewared no longer hold. | TrueNAS | B2/S3 providers | Nested snapshots | Hardware-verified | | --- | --- | --- | --- | | 24.10.2.4 | ok | ok | — | | 25.04.2.6 | ok | ok | — | | 25.10.4 | ok | ok | nested + providers; 252-snapshot recursive backup of /mnt/Tap, 18m | | 26.0.0-BETA.3 _(unreleased)_ | ok | **BROKEN** | — | | master _(unreleased)_ | **BROKEN** | **BROKEN** | — | | verdict | meaning | | --- | --- | | **ok** | Every assumption the patch makes about middleware still holds. | | **BROKEN** | middleware changed underneath the patch. `apply.sh` **refuses to apply that module** on this version and leaves TrueNAS stock, so backups keep working — without the module's feature. | | **native** | TrueNAS does this itself now. The module retires; it is not a failure. | "ok" means *the patch's assumptions hold*, checked automatically against iX's source. It does not mean a human ran a backup on it — that is the **Hardware-verified** column, which is filled in by hand and only by doing it. ### release/26.0.0-BETA.3 **nested** — the patch will not apply: - `call-zfs-dataset-query`: plugins/zfs_/dataset.py no longer exists, so `zfs.dataset.query` is gone - why it matters: SNAPSHOT_BLOCK enumerates FILESYSTEM datasets to build the staging plan - `call-zfs-snapshot-delete`: plugins/zfs_/snapshot.py no longer exists, so `zfs.snapshot.delete` is gone - why it matters: delete_snapshot_tree() sweeps the recursive snapshot. Without it every run orphans one snapshot per descendant dataset (250 on a real pool) - `call-zfs-snapshot-query`: plugins/zfs_/snapshot.py no longer exists, so `zfs.snapshot.query` is gone - why it matters: delete_snapshot_tree()'s fallback sweep enumerates the tree by name ### master **nested** — the patch will not apply: - `restic-backup`: restic_backup('context', 'job', 'entry', 'credentials', 'dry_run', 'rate_limit') — positional parameters changed; the patch calls it as (middleware, job, cloud_backup) - why it matters: SYNC_BLOCK wraps it to tear down bind mounts in a finally - `call-zfs-dataset-query`: plugins/zfs_/dataset.py no longer exists, so `zfs.dataset.query` is gone - why it matters: SNAPSHOT_BLOCK enumerates FILESYSTEM datasets to build the staging plan - `call-zfs-snapshot-delete`: plugins/zfs_/snapshot.py no longer exists, so `zfs.snapshot.delete` is gone - why it matters: delete_snapshot_tree() sweeps the recursive snapshot. Without it every run orphans one snapshot per descendant dataset (250 on a real pool) - `call-zfs-snapshot-query`: plugins/zfs_/snapshot.py no longer exists, so `zfs.snapshot.query` is gone - why it matters: delete_snapshot_tree()'s fallback sweep enumerates the tree by name **providers** — the patch will not apply: - `restic-config-fn`: get_restic_config('entry', 'credentials') — positional parameters changed; the patch calls it as (cloud_backup) - why it matters: RESTIC_BLOCK wraps it to rewrite the repo URL; it calls the original WITHOUT await, so it must stay synchronous _Filed automatically by `.github/workflows/compat.yml`._
Owner

Duplicate of #1 — closing.

Filed by the compat run that landed between the title change and #1 being retitled. The bot now converges on the lowest-numbered matching issue, so this cannot recur.

Duplicate of #1 — closing. Filed by the compat run that landed between the title change and #1 being retitled. The bot now converges on the lowest-numbered matching issue, so this cannot recur.
flan closed this issue 2026-07-13 15:08:27 -04:00
Sign in to join this conversation.
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: flan/truenas-truecloud-patch#3