restic/internal
Michael Eischer d92957dd78 lock: Implement strict lock expiry monitoring
Restic continued e.g. a backup task even when it failed to renew the
lock or failed to do so in time. For example if a backup client enters
standby during the backup this can allow other operations like `prune`
to run in the meantime (after calling `unlock`). After leaving standby
the backup client will continue its backup and upload indexes which
refer pack files that were removed in the meantime.

This commit introduces a goroutine explicitly monitoring for locks that
are not refreshed in time. To simplify the implementation there's now a
separate goroutine to refresh the lock and monitor for timeouts for each
lock. The monitoring goroutine would now cause the backup to fail as the
client has lost it's lock in the meantime.

The lock refresh goroutines are bound to the context used to lock the
repository initially. The context returned by `lockRepo` is also
cancelled when any of the goroutines exits. This ensures that the
context is cancelled whenever for any reason the lock is no longer
refreshed.
2022-10-03 00:19:46 +02:00
..
archiver backup: rework read concurrency 2022-10-02 22:55:14 +02:00
backend Merge pull request #3521 from MichaelEischer/redownload-broken-files 2022-10-02 22:50:03 +02:00
bloblru bloblru: Fix comment for New function 2022-03-28 22:25:25 +02:00
cache cache: Fix file descriptor leak in TestBackendRemoveBroken 2022-10-03 00:06:44 +02:00
checker repository: optimize MasterIndex.Each 2022-09-24 12:21:59 +02:00
crypto crypto: move crypto buffer helpers 2022-07-17 13:42:23 +02:00
debug debug: support roundtripper logging also for release builds 2022-08-05 23:49:39 +02:00
dump repository: extract LoadTree/SaveTree 2022-07-17 13:11:28 +02:00
errors all: Move away from pkg/errors, easy cases 2022-06-14 08:36:38 +02:00
filter filter: deduplicate error handling for pattern validation 2022-09-09 23:12:41 +02:00
fs Add simple test for fs.TempFile on windows 2022-04-09 23:37:58 +02:00
fuse fuse: remove unused context parameter 2022-08-26 20:48:48 +02:00
hashing hashing: Fix up comments 2022-05-11 21:36:10 +02:00
migrations migrate: Report why an migration cannot be applied 2022-09-03 11:49:31 +02:00
options Don't crash if SecretString is uninitialized 2022-07-02 19:44:28 +02:00
pack repository: optimize MasterIndex.Each 2022-09-24 12:21:59 +02:00
repository retry index, lock and snapshot loading on hash mismatch 2022-09-25 11:35:35 +02:00
restic lock: Implement strict lock expiry monitoring 2022-10-03 00:19:46 +02:00
restorer restore: support sparse restores also on windows 2022-09-24 21:39:39 +02:00
selfupdate Refactor file handing for self-update. 2022-04-09 21:40:33 +02:00
test all: Move away from pkg/errors, easy cases 2022-06-14 08:36:38 +02:00
textfile Add more error handling 2021-01-30 20:19:47 +01:00
ui archiver: remove unused fileInfo from progress callback 2022-07-23 14:16:23 +02:00
walker repository: extract LoadTree/SaveTree 2022-07-17 13:11:28 +02:00