Release: 2.1.0.103 (Canary) 2024-12-21

2.1.0.103_canary_2024-12-21

This release is a canary release intended to be used for testing.

Note that this build is using .NET8, unlike the 2.0.8.1 build

Note that this build has a redesigned restore flow
Should issues arise, the previous restore engine can be enabled with --restore-legacy=true.

Detailed list of changes:

  • Updated MacOS LaunchAgents to run as current user
  • Updated preloader logic to search additional paths
  • Fixed a few potential issues in JS
  • Disabled openid probing on the server
  • Fixed problem with FTP backend not unescaping special characters
  • Reduced amount of logging output from Server
  • Fixed bugreport download
  • Fixed pause/stop/resume/abort and throttle control
  • Fixed issues with timeouts in Microsoft Graph-based backends
  • Fixed a potential exit crash
  • Renamed some strings from “OneDrive v2” to “OneDrive”
  • Removed --use-http-client from Microsoft Graph-based backends
  • Logging on Windows moved to separate Windows Log
1 Like

Upgraded all my .102 to .103, so far so good with two Windows servers no longer getting the tray icon crash so that’s sorted :+1:

2 Likes

there is a typo in the date for macos arm 12 → 21
the updater is linking to
https://updates.duplicati.com/canary/duplicati-2.1.0.103_canary_2024-12-12-osx-arm64-gui.dmg

One guess is confusion from an accidental broken .103 12-12 release, as described here.
For awhile, I think updater was giving popup notifications for a non-existent 12-12 release.

Just now, on 102, I ran About → Check for updates, getting 103 and a reasonable URL for installation that I use. I wonder if you just had the old bad URL, or it’s platform-dependent?

i have to check other machines, i already updated this one manually

Arh yes, makes sense. It is (likely) a cached response for the non-existing .103 that got advertised due to faulty builds. All update servers should return the correct version and link now.

TrayIcon disconnected from its hosted server 15 minutes after start. Wireshark traffic is below:

POST /api/v1/auth/signin HTTP/1.1
Host: localhost:8200
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103
Content-Type: application/json; charset=utf-8
Content-Length: 265

{"SigninToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJTaWduaW5Ub2tlbiIsInNpZCI6InRyYXlpY29uIiwibmJmIjoxNzM1MzMzMjQxLCJleHAiOjE3MzUzMzM1NDEsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.ZkO0rhbeKBoaubXmtYCDxTDwl4CGe6qDunxjcg07kBU"}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:00:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

121
{"AccessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg"}
0


GET /api/v1/serverstate HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:00:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

197
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":3,"LastDataUpdateID":2,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/notifications HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:00:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

2
[]
0


GET /api/v1/serversettings HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:00:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

2c0
{"startup-delay":"","max-download-speed":"","max-upload-speed":"","last-webserver-port":"8200","is-first-run":"False","server-port-changed":"True","last-update-check":"638709277198701282","update-check-interval":"","update-check-latest":"","unacked-error":"","unacked-warning":"","server-listen-interface":"any","server-disable-https":"False","has-fixed-invalid-backup-id":"True","update-channel":"","usage-reporter-level":"","disable-tray-icon-login":"False","allowed-hostnames":"hp4","remote-control-enabled":"","autogenerated-passphrase":"False","disable-visual-captcha":"","disable-signin-tokens":"","encrypted-fields":"","server-timezone":"","paused-until":"","has-asked-for-password-change":"true"}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=3&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:00:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

197
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":4,"LastDataUpdateID":3,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/serversettings HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:00:43 GMT
Server: Kestrel
Transfer-Encoding: chunked

2c1
{"startup-delay":"","max-download-speed":"","max-upload-speed":"","last-webserver-port":"8200","is-first-run":"False","server-port-changed":"False","last-update-check":"638709277198701282","update-check-interval":"","update-check-latest":"","unacked-error":"","unacked-warning":"","server-listen-interface":"any","server-disable-https":"False","has-fixed-invalid-backup-id":"True","update-channel":"","usage-reporter-level":"","disable-tray-icon-login":"False","allowed-hostnames":"hp4","remote-control-enabled":"","autogenerated-passphrase":"False","disable-visual-captcha":"","disable-signin-tokens":"","encrypted-fields":"","server-timezone":"","paused-until":"","has-asked-for-password-change":"true"}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=4&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:00:43 GMT
Server: Kestrel
Transfer-Encoding: chunked

197
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":7,"LastDataUpdateID":4,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/serversettings HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:00:43 GMT
Server: Kestrel
Transfer-Encoding: chunked

2c1
{"startup-delay":"","max-download-speed":"","max-upload-speed":"","last-webserver-port":"8200","is-first-run":"False","server-port-changed":"False","last-update-check":"638709277198701282","update-check-interval":"","update-check-latest":"","unacked-error":"","unacked-warning":"","server-listen-interface":"any","server-disable-https":"False","has-fixed-invalid-backup-id":"True","update-channel":"","usage-reporter-level":"","disable-tray-icon-login":"False","allowed-hostnames":"hp4","remote-control-enabled":"","autogenerated-passphrase":"False","disable-visual-captcha":"","disable-signin-tokens":"","encrypted-fields":"","server-timezone":"","paused-until":"","has-asked-for-password-change":"true"}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=7&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:05:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

197
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":8,"LastDataUpdateID":4,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=8&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:10:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

197
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":8,"LastDataUpdateID":4,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=8&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:10:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

197
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":9,"LastDataUpdateID":4,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=9&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:15:43 GMT
Server: Kestrel
Transfer-Encoding: chunked

197
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":9,"LastDataUpdateID":4,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=9&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:15:43 GMT
Server: Kestrel
Transfer-Encoding: chunked

198
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":10,"LastDataUpdateID":4,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=10&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 27 Dec 2024 21:20:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

198
{"ActiveTask":null,"ProgramState":"Running","SchedulerQueueIds":[],"ProposedSchedule":[{"Item1":"1","Item2":"2024-12-28T12:20:00Z"}],"HasWarning":false,"HasError":false,"SuggestedStatusIcon":"Ready","EstimatedPauseEnd":"0001-01-01T00:00:00","LastEventID":10,"LastDataUpdateID":4,"LastNotificationUpdateID":0,"UpdatedVersion":null,"UpdaterState":"Waiting","UpdateDownloadLink":null,"UpdateDownloadProgress":0}
0


GET /api/v1/serverstate?longpoll=true&lastEventId=10&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 401 Unauthorized
Content-Length: 0
Date: Fri, 27 Dec 2024 21:20:42 GMT
Server: Kestrel
WWW-Authenticate: Bearer error="invalid_token", error_description="The token expired at '12/27/2024 21:15:42'"


GET /api/v1/serverstate?longpoll=true&lastEventId=10&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 401 Unauthorized
Content-Length: 0
Date: Fri, 27 Dec 2024 21:20:44 GMT
Server: Kestrel
WWW-Authenticate: Bearer error="invalid_token", error_description="The token expired at '12/27/2024 21:15:42'"


GET /api/v1/serverstate?longpoll=true&lastEventId=10&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 401 Unauthorized
Content-Length: 0
Date: Fri, 27 Dec 2024 21:20:48 GMT
Server: Kestrel
WWW-Authenticate: Bearer error="invalid_token", error_description="The token expired at '12/27/2024 21:15:42'"


GET /api/v1/serverstate?longpoll=true&lastEventId=10&duration=5m HTTP/1.1
Host: localhost:8200
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBY2Nlc3NUb2tlbiIsInNpZCI6InRyYXlpY29uIiwiZmFtIjoidGVtcG9yYXJ5IiwibmJmIjoxNzM1MzMzMjQyLCJleHAiOjE3MzUzMzQxNDIsImlzcyI6Imh0dHBzOi8vZHVwbGljYXRpIiwiYXVkIjoiaHR0cHM6Ly9kdXBsaWNhdGkifQ.qcu2FAmZiOTXyGcuRf7qN0agKTewf0P_y36BmXwBTQg
User-Agent: Duplicati-TrayIcon-Monitor/2.1.0.103


HTTP/1.1 401 Unauthorized
Content-Length: 0
Date: Fri, 27 Dec 2024 21:20:54 GMT
Server: Kestrel
WWW-Authenticate: Bearer error="invalid_token", error_description="The token expired at '12/27/2024 21:15:42'"

Although this sort of thing has been seen before (for example, see cases in 2.1.0.102, etc.), perhaps it’s worse now, or I got less lucky. This time, I started TrayIcon and just let it sit idle.

To make situation as simple as possible, I also closed all browser tabs, letting it talk to itself:

C:\Program Files\Duplicati 2>netstat -ano | findstr 8200
  TCP    0.0.0.0:8200           0.0.0.0:0              LISTENING       8484
  TCP    [::]:8200              [::]:0                 LISTENING       8484
  TCP    [::1]:8200             [::1]:56215            ESTABLISHED     8484
  TCP    [::1]:56215            [::1]:8200             ESTABLISHED     8484

EDIT 1:

Terminal is nice and quiet, probably because I closed all the tabs that might be tossing stuff in:

C:\Duplicati\duplicati-2.1.0.103_canary_2024-12-21-win-x64-gui\RUN>echo Fri 12/27/2024 16:00:39.80
Fri 12/27/2024 16:00:39.80

C:\Duplicati\duplicati-2.1.0.103_canary_2024-12-21-win-x64-gui\RUN>start /b ..\Duplicati.GUI.TrayIcon.exe --server-datafolder="C:\Duplicati\duplicati-2.1.0.103_canary_2024-12-21-win-x64-gui\RUN" --disable-db-encryption --log-file="server.2.1.0.103_canary_2024-12-21-win-x64-gui.log" --log-level=profiling --webservice-interface=any --webservice-allowed-hostnames="hp4" --webservice-port=8200

C:\Duplicati\duplicati-2.1.0.103_canary_2024-12-21-win-x64-gui\RUN>pause
Press any key to continue . . . Server has started and is listening on port 8200

EDIT 2:

Also fails without options. 2.1.0.100 works: gets 401, gets SigninToken, AccessToken, continues.
2.1.0.101 seems to be where the problem came in. It gets longpoll response each minute until access token expires, then it just keeps on sendng the expired one every (variable) few seconds.

EDIT 3:

Opened issue:

1 Like

I did run full restore tests, and NONE of the backups were corrupted. That’s finally awesome!

Only a very minor notice, “missing directory creation” still triggers Error Code: 2. I know it doesn’t matter, but it’s still funny that creating missing directory causes error. If that would not be the case, it would be awesome. Then restore test would have ended with all clear status. (Now I got a few code 2s for this specific reason.)

1 Like

Any warnings to go with that? Exit codes are often too vague. Got a test case post?

There’s at least one case where the old restore code does better, and the new fails:

Could not find a part of the path

You can see that I was considering using CLI backup to contrive cases GUI can’t do.
IIRC you’re a CLI user (and maybe still backup-interrupt-heavy?). If so, you can help.

Any warnings to go with that? Exit codes are often too vague. Got a test case post?

I don’t have the log anymore available easily. But it’s the same I’ve mentioned several times.

I backup path like c:\stuff and then I just add a single file to backup like c:\random\config.ini and when I restore it, I’ll get error about missing path for the config.ini and code 2. If this should be considered as configuration error then it should alert already during the backup. But now I get the error only on restore. - Yet it of course restores everything ok (so it’s not serious), but still triggers error / warning and prevents “clean exit”.

I have been debating this a bit, but the warning is there because there are two scenarios:

  1. You pick a number of files and restore them
    You get the files, and some folders are created to organize the results. You don’t care about the folders.
  2. You restore a subset of the backup
    You get the data back but some folders are created and are not restored, so they lack metadata (ACLs etc). You care about the folders.

I have been defensive about correctness, so I used the logic for “2”, but maybe this is a bit too strict for regular usage.

Is it a similar ending to what I linked to in the post you quoted me from, just above yours?

I found one test case of that, but maybe you found another. Regardless, an issue is open:

Restore with folder missing causes the file to not be restored #5826

If your “several times” predates 2.1.0.102_canary_2024-12-12 it might something different.

Rewrote the restore process to be multithreaded and target optimal disk I/O write performance

I’m also curious if your restore testing found a different performance in these new releases.