2.1.0.122 Canary ngclient stop uploads a short dlist file

I originally found this on my production backup, where some source files change.
This is a little hard to describe a repro for, so I tried a simple one with no change.

I have a big tree of empty files with multiple folder levels, so I can pick start point.

  • Did a run, got a dlist
  • Did a run, with elevated-auto-VSS on. Interrupted while counting. Got a dlist.
  • default snapshot-policy=Off, did a run, interrupted while counting. Got a dlist.
  • Did a run, got a dlist.

In FilesetEntry, all FileID follow the same pattern of 1 to N. Interrupted N end earlier.

In old ngax UI:

In new ngclient UI:

EDIT 1:

Fifth run did not make a fifth dlist, as I don’t have upload-unchanged-backups on.

I did get several warnings which are hard to spot in ngclient, but spring up in ngax.
Two “Cancellation was requested by user.” seem to match my Stops, so seem OK.

In jobs logs, four list got warning like this, but I’m not sure what I did at the time:

2025-07-07 16:44:45 -04 - [Warning-Duplicati.Library.Main.Backend.BackendManager-BackendManagerShutdown]: Backend manager queue runner did not stop

EDIT 2:

Using ngax and clicking Restore at 5:36:30 gets this series. Different issue I suppose:

If I understand correctly, the issue is that ngclient does not show if a backup is partial or not?

If so, I have created an issue for it.

I’m also asking what should happen in the different ways that ngclient and ngax can “stop”.

You talked about this lightly in another topic. If short dlist is correct for ngclient, then it’s just the issue you filed. If it’s not, then there’s more. I didn’t try a test where a dindex and dblock file had already uploaded before I did the stop. Maybe it would do the short dlist after those.

EDIT 1:

Release: 2.1.0.120 (Canary) 2025-06-24 is the other topic, so I replied to points there there.

I don’t fully understand this part. Both ngclient and ngax call the same endpoint, and from there the code performs exactly the same. Are you seeing a difference between stop from ngax and ngclient?

“Stop after current file” in ngax corresponds to “Stop” in ngclient.
“Terminate” in ngax corresponds to the skull-icon “Stop” in ngclient.
Is this the part that is creating the difference?

In 2.1.0.124 at least, ngclient has only one stop button. It flashes skull icon by itself.

ngclient stop button + skull flash:

api/v1/task/32/stop

api/v1/notifications
[Warning-Duplicati.Library.Main.Operation.BackupHandler-CancellationRequested]: Cancellation was requested by user.
ngax stop button + Terminate:

api/v1/task/34/abort

api/v1/notifications
"Message": "A task was canceled."

Release: 2.1.0.120 (Canary) 2025-06-24 has some screenshots and replies to replies.
Since this topic is dedicated to the issue, it’s probably good to do the followups here…

EDIT 1:

On an ngclient backup that takes longer, the Stop button sends “stop” as before, but the skull icon hangs around long enough for me to click it, at which point it sends an “abort”.

EDIT 2:

I was wondering whether “abort” would message as ngax does, but in the end it got the

[Warning-Duplicati.Library.Main.Operation.BackupHandler-CancellationRequested]: Cancellation was requested by user."