mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-04 16:56:59 +01:00
fix(core,fuse): back failed uploads off properly and spread their retries
A reconnect made every failed op due at once, quota and access refusals included, and ops that failed together retried in the same second. The doubling also stopped at 128 s, short of the 300 s maximum. Reconnects now move up only unrefused ops, and the backoff reaches its maximum with a per-op spread of up to a fifth (B237).
This commit is contained in:
1 parent
8aca7836f9
commit
fcbb15cb4b
5 files changed
+110
-12
No files matched your search
@@ -7531,6 +7531,32 @@ fn a_refused_change_names_its_node_by_local_id() {
|
||||
);
|
||||
}
|
||||
|
||||
/// A reconnect moves up the ops that failed for want of a link. One Drive
|
||||
/// refused, for quota or access, keeps its backoff: the link coming back
|
||||
/// changes nothing about it. "Retry all" still moves both.
|
||||
#[test]
|
||||
fn a_reconnect_leaves_refused_ops_to_their_backoff() {
|
||||
let db = Db::open_in_memory().unwrap();
|
||||
let offline = queued_op(&db, "vol~a", 2, 90_000);
|
||||
let refused = queued_op(&db, "vol~b", 2, 90_000);
|
||||
db.set_op_issue(refused, Some("quota")).unwrap();
|
||||
|
||||
assert_eq!(db.retry_unrefused_ops_now(5_000).unwrap(), 1);
|
||||
let due = |id: i64| {
|
||||
db.pending_ops()
|
||||
.unwrap()
|
||||
.into_iter()
|
||||
.find(|op| op.id == id)
|
||||
.unwrap()
|
||||
.next_attempt_at
|
||||
};
|
||||
assert_eq!(due(offline), 5_000);
|
||||
assert_eq!(due(refused), 90_000);
|
||||
|
||||
assert_eq!(db.retry_failed_ops_now(5_000).unwrap(), 1);
|
||||
assert_eq!(due(refused), 5_000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn retry_all_touches_only_ops_that_have_failed() {
|
||||
let db = Db::open_in_memory().unwrap();
|
||||
|
||||
Reference in new issue
Block a user