rclone/cmd/bisync
nielash e9cd3e5986 bisync: allow lock file expiration/renewal with --max-lock - #7470
Background: Bisync uses lock files as a safety feature to prevent
interference from other bisync runs while it is running. Bisync normally
removes these lock files at the end of a run, but if bisync is abruptly
interrupted, these files will be left behind. By default, they will lock out
all future runs, until the user has a chance to manually check things out and
remove the lock.

Before this change, lock files blocked future runs indefinitely, so a single
interrupted run would lock out all future runs forever (absent user
intervention), and there was no way to change this behavior.

After this change, a new --max-lock flag can be used to make lock files
automatically expire after a certain period of time, so that future runs are
not locked out forever, and auto-recovery is possible. --max-lock can be any
duration 2m or greater (or 0 to disable). If set, lock files older than this
will be considered "expired", and future runs will be allowed to disregard them
and proceed. (Note that the --max-lock duration must be set by the process that
left the lock file -- not the later one interpreting it.)

If set, bisync will also "renew" these lock files every
--max-lock_minus_one_minute throughout a run, for extra safety. (For example,
with --max-lock 5m, bisync would renew the lock file (for another 5 minutes)
every 4 minutes until the run has completed.) In other words, it should not be
possible for a lock file to pass its expiration time while the process that
created it is still running -- and you can therefore be reasonably sure that
any _expired_ lock file you may find was left there by an interrupted run, not
one that is still running and just taking awhile.

If --max-lock is 0 or not set, the default is that lock files will never
expire, and will block future runs (of these same two bisync paths)
indefinitely.

For maximum resilience from disruptions, consider setting a relatively short
duration like --max-lock 2m along with --resilient and --recover, and a
relatively frequent cron schedule. The result will be a very robust
"set-it-and-forget-it" bisync run that can automatically bounce back from
almost any interruption it might encounter, without requiring the user to get
involved and run a --resync.
2024-01-20 16:31:28 -05:00
..
bilib bisync: normalize session name to non-canonical - fixes #7423 2024-01-20 15:38:26 -05:00
testdata bisync: full support for comparing checksum, size, modtime - fixes #5679 fixes #5683 fixes #5684 fixes #5675 2024-01-20 16:08:06 -05:00
bisync_test.go bisync: full support for comparing checksum, size, modtime - fixes #5679 fixes #5683 fixes #5684 fixes #5675 2024-01-20 16:08:06 -05:00
checkfn.go bisync: full support for comparing checksum, size, modtime - fixes #5679 fixes #5683 fixes #5684 fixes #5675 2024-01-20 16:08:06 -05:00
cmd.go bisync: allow lock file expiration/renewal with --max-lock - #7470 2024-01-20 16:31:28 -05:00
compare.go bisync: full support for comparing checksum, size, modtime - fixes #5679 fixes #5683 fixes #5684 fixes #5675 2024-01-20 16:08:06 -05:00
deltas.go bisync: Graceful Shutdown, --recover from interruptions without --resync - fixes #7470 2024-01-20 16:31:28 -05:00
help.go bisync: document beta status more clearly - fixes #6082 2024-01-20 15:38:26 -05:00
LICENSE.cjnaz bisync: implementation #5164 2021-11-01 21:00:27 +03:00
listing.go bisync: Graceful Shutdown, --recover from interruptions without --resync - fixes #7470 2024-01-20 16:31:28 -05:00
lockfile.go bisync: allow lock file expiration/renewal with --max-lock - #7470 2024-01-20 16:31:28 -05:00
log.go bisync: full support for comparing checksum, size, modtime - fixes #5679 fixes #5683 fixes #5684 fixes #5675 2024-01-20 16:08:06 -05:00
march.go bisync: Graceful Shutdown, --recover from interruptions without --resync - fixes #7470 2024-01-20 16:31:28 -05:00
operations.go bisync: allow lock file expiration/renewal with --max-lock - #7470 2024-01-20 16:31:28 -05:00
queue.go bisync: Graceful Shutdown, --recover from interruptions without --resync - fixes #7470 2024-01-20 16:31:28 -05:00
rc.go bisync: support two --backup-dir paths on different remotes 2024-01-20 14:50:08 -05:00