Commit Graph
14284 Commits
Author SHA1 Message Date
JamBalaya56562andClaude Opus 4.8 68dedaa320 Use effective dbpath for show-log and delete-db endpoints (fixes #1698)
A backup can have two notions of its local database path: the stored
Backup.DBPath field and a --dbpath advanced option in its settings. The runner
computes an effective path that lets --dbpath override Backup.DBPath, so most
operations honor it. But the "Show log", "Show remote log" and "Delete database"
endpoints read Backup.DBPath directly, so when --dbpath differs they open/delete
the wrong database - "Show log" then fails with "no such table: LogData".

Add a shared Runner.GetEffectiveDBPath(IBackup) helper (same precedence as
Runner.ApplyOptions) and use it in ExecuteGetLog, ExecuteGetRemotelog and
ExecuteDeleteDb so all operations agree on the database file. Adds a unit test
for the precedence.

The database move/update endpoints are intentionally left unchanged, as they
manage the DBPath field itself.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 22:28:27 +09:00
Kenneth SkovhedeandGitHub 0a31490d15 Merge pull request #7027 from JamBalaya56562/fix/restore-reset-rendezvous-barriers
Reset restore rendezvous barriers per operation (fixes flaky folder-metadata restore)
2026-07-10 13:08:30 +02:00
Kenneth SkovhedeandGitHub 95d381c833 Merge pull request #7018 from JamBalaya56562/fix/run-script-status
Report script execution in operation status
2026-07-10 13:01:52 +02:00
Kenneth SkovhedeandGitHub 599ad11959 Merge pull request #7004 from duplicati/feature/add-reporting-module
Add reporting module
2026-07-10 12:59:40 +02:00
Kenneth SkovhedeandGitHub d29ee43957 Merge pull request #7025 from JamBalaya56562/fix/macos-diskimage-eject-flake
Harden macOS disk-image eject to fix flaky DiskImage tests
2026-07-10 12:59:14 +02:00
JamBalaya56562andClaude Opus 4.8 c267edaf89 Reset restore rendezvous barriers per operation
The new restore engine uses two process-wide static TaskCompletionSources as
synchronization barriers in Restore/FileProcessor.cs: file_processor_continue
(the folder-metadata rendezvous) and priority_files_completed. Their counters
are reset at the start of each restore, but the TaskCompletionSources were only
created once at field initialization and were never reset.

After the first restore in a process completes the folder-metadata rendezvous,
its TaskCompletionSource stays completed, so on the second and later restores in
the same process the rendezvous "await" returns immediately and no longer waits
for all file content to be restored before folder metadata (including Windows
ACLs) is applied. This lost ordering guarantee (introduced by #6079) causes
intermittent folder metadata/permission restore failures, observed as the flaky
Issue6068FileAndFolderAttributesAndPermissions unit test on the Windows CI runner.

Reset both TaskCompletionSources in RestoreHandler before the FileLister/
FileProcessor tasks are started (so there is no race), alongside the existing
counter reset. file_processor_continue is the demonstrated root cause;
priority_files_completed has the identical never-reset pattern and is reset
defensively.

Verified locally on .NET 10: before the reset, file_processor_continue is already
completed on the 2nd+ restore in a process; the Issue6068 suite passes repeatedly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 07:40:47 +09:00
JamBalaya56562 e08c36851c Report script execution in operation status 2026-07-09 22:50:36 +09:00
JamBalaya56562andClaude Opus 4.8 819a03c09c Harden macOS disk-image eject to fix flaky DiskImage tests
The macOS DiskImage unit tests intermittently failed in CI with:
  System.InvalidOperationException : Process diskutil with arguments
  eject /dev/rdiskN exited with code 1: Volume failed to eject

ReAttach() and CleanupDisk() called `diskutil eject` directly while a
volume could still be busy right after writing, so the eject transiently
failed (e.g. Test_GPT_FAT32_FAT32_FAT32_Async). This is test-infrastructure
only; no product code is affected.

Add a shared EjectDisk() helper that flushes buffers (sync), force-unmounts
all volumes first, then ejects with exponential backoff (reusing
Utility.GetRetryDelay), falling back to a forced `hdiutil detach` of the
image-backed device. Also make Unmount() force-unmount and return on success.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 22:48:40 +09:00
Kenneth Skovhede 0328209525 Fixed dispose not attempting to await null 2026-07-09 15:44:48 +02:00
Kenneth SkovhedeandGitHub c358658204 Merge pull request #7023 from duplicati/feature/guard-compact-against-race
Guard compact against race
2026-07-09 15:36:37 +02:00
Kenneth SkovhedeandGitHub 97f7f61499 Merge pull request #7016 from JamBalaya56562/fix/ssl-certificate-validator-obsolete-warning
Fix obsolete certificate loading in SSL validator tests
2026-07-09 14:08:13 +02:00
Kenneth SkovhedeandGitHub 607bda8bb9 Merge pull request #7015 from JamBalaya56562/fix/sqlitepclraw-lib-esqlite3-warning
Update SQLitePCLRaw.lib.e_sqlite3 to 3.53.3
2026-07-09 14:07:54 +02:00
Kenneth Skovhede 17423979cb Guard compact against race
This ensures all in-flight backend requests are completed before the compact handler continues.
Prior to this, particular situations could cause the compact to throw an exception before actually removing files.
2026-07-09 14:07:16 +02:00
JamBalaya56562 2e4ba15415 Fix obsolete certificate loading in tests 2026-07-09 18:43:09 +09:00
JamBalaya56562 ac825697b7 Update SQLitePCLRaw lib e_sqlite3 2026-07-09 18:42:38 +09:00
Kenneth SkovhedeandGitHub bd1bd88c96 Merge pull request #7022 from duplicati/feature/fallback-to-os-validator
Use OS-default cert validator
2026-07-09 08:51:51 +02:00
Kenneth SkovhedeandGitHub 5e785a927c Merge pull request #7019 from duplicati/feature/fix-windows-restore-permission-error
Attempt to fix Windows restore error
2026-07-08 17:48:44 +02:00
Kenneth Skovhede 2ca0d13177 Use OS-default cert validator
If the user has not specified any overrides, use the OS default validator.

Prior to this PR all certs were validated by the .NET default chain validator, which is more strict with regards to revocation checks. With this PR, the OS default is now used to validate certificates.
2026-07-08 17:46:41 +02:00
Kenneth Skovhede 27d2050970 Added support for server-provided activity url 2026-07-08 16:06:46 +02:00
Kenneth Skovhede c7f6a93bcc Fixed stable shutdown sequence for the reporting module 2026-07-07 15:28:53 +02:00
Kenneth Skovhede c787a09ee7 Fix compile error 2026-07-07 14:42:36 +02:00
Kenneth Skovhede 5a4bdc5f08 Attempt to fix Windows restore error
A failing test reveals that in some cases, files may be read-only which causes failures when attempting to set metadata. This PR updates the logic to ensure we clear the read-only attributes before attempting to apply metadata.
2026-07-07 14:40:39 +02:00
Kenneth Skovhede a3b2c3ae50 Merge branch 'feature/add-reporting-module' of github.com:duplicati/duplicati into feature/add-reporting-module 2026-07-07 13:30:54 +02:00
Kenneth SkovhedeandGitHub a368fa473d Merge branch 'master' into feature/add-reporting-module 2026-07-07 13:29:17 +02:00
Kenneth Skovhede 67e52614dd Added support for multiple activity targets 2026-07-07 13:05:38 +02:00
Kenneth SkovhedeandGitHub fa2083193c Merge pull request #7014 from duplicati/feature/add-ui-for-removal
Add endpoints for removal
2026-07-07 12:55:24 +02:00
Kenneth SkovhedeandGitHub 6e2681f14c Merge branch 'master' into feature/add-ui-for-removal 2026-07-07 10:41:39 +02:00
Kenneth SkovhedeandGitHub 1ed50af95e Merge branch 'master' into feature/add-reporting-module 2026-07-07 10:41:15 +02:00
Kenneth SkovhedeandGitHub 9dd69083c4 Merge pull request #7011 from JamBalaya56562/codex/windows-commandline-percent-escape
Escape Windows commandline percent expansion
2026-07-07 10:40:59 +02:00
Kenneth SkovhedeandGitHub 65709b8d33 Merge pull request #7010 from JamBalaya56562/codex/ngax-commandline-target-url-done
Add commandline target URL done action
2026-07-07 10:37:44 +02:00
Kenneth SkovhedeandGitHub 8baf07fea3 Merge pull request #7006 from duplicati/feature/compute-completion-estimate
Estimated remaining time
2026-07-07 10:36:43 +02:00
Kenneth SkovhedeandGitHub aae71a1eb7 Merge pull request #7007 from duplicati/feature/count-number-of-zero-length-metaentries
Report number of zero length metadata entries
2026-07-07 10:36:11 +02:00
Kenneth SkovhedeandGitHub f20a699eef Merge pull request #7009 from JamBalaya56562/codex/serverutil-run-exit-code
Return non-zero exit code from server-util run --wait on backup failures
2026-07-07 10:35:30 +02:00
Kenneth SkovhedeandGitHub 11b2af0a42 Merge pull request #7013 from JamBalaya56562/codex/update-swashbuckle-openapi
Update Swashbuckle to patched OpenApi
2026-07-07 10:34:32 +02:00
Kenneth SkovhedeandGitHub 725f290eb2 Merge pull request #7012 from JamBalaya56562/codex/windows-acl-test-stability
Stabilize Windows ACL restore test
2026-07-07 10:33:17 +02:00
Kenneth Skovhede 1c50542b46 Add endpoints for removal
This PR adds new endpoints to support the removal of versions and the purge-broken-files flow.

Prior to this PR a UI-user had to resort to the commandline UI and figure out how to configure the commandline tool to perform the operations.

With this update, the user can now pick "Delete versions" and will be presented with a list of versions. Any versions that are checked will then be deleted.

For the purge-broken-files, this will first run "list-broken-files" and present any broken files to the user, and then allow the user to proceed with purging the broken files.
2026-07-07 10:31:18 +02:00
JamBalaya56562 e4f4956cb1 Update Swashbuckle to patched OpenApi 2026-07-07 02:17:30 +00:00
JamBalaya56562 ede8adf4a7 Stabilize Windows ACL restore test 2026-07-07 02:04:59 +00:00
JamBalaya56562 b5f6fcf39f Escape Windows commandline percent expansion 2026-07-07 01:45:37 +00:00
JamBalaya56562 60324b7762 Add commandline target URL done action 2026-07-07 01:23:02 +00:00
JamBalaya56562andClaude Opus 4.8 7da681ddee Return non-zero exit code from server-util run --wait on backup failures
`server-util run --wait` always exited 0 even when the backup finished
with warnings or errors, so scripts and CI could not detect a degraded or
failed backup. Map the parsed backup result to the process exit code,
mirroring the main Duplicati CLI (warnings = 2, errors = 3, fatal = 4),
and propagate a non-zero result from the command handler through to the
process exit code (previously only exceptions set it). Fixes #5870.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 00:42:28 +00:00
Kenneth Skovhede b3adeafc7f Fixed failing test 2026-07-06 14:47:54 +02:00
Kenneth SkovhedeandGitHub 9b4afb4384 Merge pull request #7003 from JamBalaya56562/codex/dfsrprivate-default-exclude
Add DfsrPrivate to default excludes
2026-07-06 14:34:09 +02:00
Kenneth Skovhede 66f8881388 Report number of zero length metadata entries 2026-07-06 14:33:32 +02:00
Kenneth Skovhede 268e0f1845 Estimated remaining time
This PR adds the estimated remaning time as part of the progress, so the FE can show how much time is left.
2026-07-06 14:32:48 +02:00
Kenneth Skovhede db36f5bbae Added metadata to activity report 2026-07-05 17:02:48 +02:00
Kenneth Skovhede 4faaa182f4 Add reporting module
This PR adds a live-reporting module that sends the current progress of backups to a user specified url.

The intention is that this can be used for dashboards that want to show the current progress for backups.

By default, the module is not configured and has no impact.
2026-07-05 11:33:09 +02:00
JamBalaya56562 bdabca17c2 Add DfsrPrivate to default excludes 2026-07-05 13:42:28 +09:00
Kenneth SkovhedeandGitHub 80be1b372d Merge pull request #7002 from duplicati/release/canary-2.3.0.106
Version bump to v2.3.0.106-2.3.0.106_canary_2026-07-03
2026-07-03 15:16:02 +02:00
Kenneth Skovhede 8eb777936d Version bump to v2.3.0.106-2.3.0.106_canary_2026-07-03
You can download this build from:

Binaries: https://updates.duplicati.com/canary/?version=2.3.0.106

Signature file: https://updates.duplicati.com/canary/duplicati-2.3.0.106_canary_2026-07-03.signatures.zip
v2.3.0.106-2.3.0.106_canary_2026-07-03 v2.3.0.106_canary_2026-07-03
2026-07-03 15:15:16 +02:00