src/transfer/BackupOwnerPolicy.bend

mylsm-lsm-store@0.6.0.1 · 50 lines · 2 definitions

1import Base
2import mylsm-lsm-store@0.6.0.1/src/transfer/Backup.bend as Backup
3
4# Identifies a remote owner failure without importing socket effects.
5type OwnerError is Data:
6  ConnectHost{code: U32, message: String}
7  ConnectUnsupported{}
8  ReadHost{code: U32, message: String}
9  ReadUnsupported{}
10  ReadFailure{}
11  CommitHost{code: U32, message: String}
12  CommitFailure{}
13  FrameTooLarge{}
14  StaleOwner{}
15  CorrelationMismatch{}
16  MalformedResponse{}
17  RequestIdsExhausted{}
18  OwnerRejected{}
19  UnsupportedPlatform{}
20
21# Maps every remote cursor failure into the backup source error domain.
22def source.error(error: OwnerError) -> Backup.Error:
23  match error:
24    case ConnectHost{code, message}:
25      Backup.SourceFailure{code, message}
26    case ConnectUnsupported{}:
27      Backup.UnsupportedPlatform{}
28    case ReadHost{code, message}:
29      Backup.SourceFailure{code, message}
30    case ReadUnsupported{}:
31      Backup.UnsupportedPlatform{}
32    case ReadFailure{}:
33      Backup.SourceFailure{5, "owner snapshot cursor read failed"}
34    case CommitHost{code, message}:
35      Backup.SourceFailure{code, message}
36    case CommitFailure{}:
37      Backup.SourceFailure{5, "owner snapshot cursor state is uncertain"}
38    case FrameTooLarge{}:
39      Backup.SourceFailure{75, "owner cursor frame exceeded limit"}
40    case StaleOwner{}:
41      Backup.SourceFailure{116, "owner cursor generation is stale"}
42    case CorrelationMismatch{}:
43      Backup.SourceFailure{71, "owner cursor correlation mismatch"}
44    case MalformedResponse{}:
45      Backup.SourceFailure{71, "owner cursor response is malformed"}
46    case RequestIdsExhausted{}:
47      Backup.SourceFailure{75, "owner cursor request ids exhausted"}
48    case OwnerRejected{}:
49      Backup.SourceFailure{5, "owner rejected snapshot cursor read"}
50    case UnsupportedPlatform{}: Backup.UnsupportedPlatform{}