-
Notifications
You must be signed in to change notification settings - Fork 382
/
maintenance_safety.go
66 lines (54 loc) · 2.68 KB
/
maintenance_safety.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package maintenance
import "time"
// SafetyParameters specifies timing parameters that affect safety of maintenance.
type SafetyParameters struct {
// Do not rewrite contents younger than this age.
RewriteMinAge time.Duration
// Snapshot GC: MinContentAgeSubjectToGC is the minimum age of content to be subject to garbage collection.
MinContentAgeSubjectToGC time.Duration
// MarginBetweenSnapshotGC is the minimal amount of time that must pass between snapshot
// GC cycles to allow all in-flight snapshots during earlier GC to be flushed and
// visible to a following GC. The uploader will automatically create a checkpoint every 45 minutes,
// so ~1 hour should be enough but we're setting this to a higher conservative value for extra safety.
MarginBetweenSnapshotGC time.Duration
// RequireTwoGCCycles indicates that two GC cycles are required.
RequireTwoGCCycles bool
// DisableEventualConsistencySafety disables wait time to allow settling of eventually-consistent writes in blob stores.
DisableEventualConsistencySafety bool
// DropContentFromIndexExtraMargin is the amount of margin time before dropping deleted contents from indices.
DropContentFromIndexExtraMargin time.Duration
// Blob GC: Delete unused blobs above this age.
BlobDeleteMinAge time.Duration
// Blob GC: Drop incomplete session blobs above this age.
SessionExpirationAge time.Duration
// Minimum time that must pass after content rewrite before we delete orphaned blobs.
MinRewriteToOrphanDeletionDelay time.Duration
}
// Supported safety levels.
var (
// SafetyNone has safety parameters which allow full garbage collection without unnecessary
// delays, but it is safe only if no other kopia clients are running and storage backend is
// strongly consistent.
SafetyNone = SafetyParameters{
BlobDeleteMinAge: 0,
DropContentFromIndexExtraMargin: 0,
MarginBetweenSnapshotGC: 0,
MinContentAgeSubjectToGC: 0,
RewriteMinAge: 0,
SessionExpirationAge: 0,
RequireTwoGCCycles: false,
DisableEventualConsistencySafety: true,
}
// SafetyFull has default safety parameters which allow safe GC concurrent with snapshotting
// by other Kopia clients.
SafetyFull = SafetyParameters{
BlobDeleteMinAge: 2 * time.Hour, //nolint:gomnd
DropContentFromIndexExtraMargin: time.Hour,
MarginBetweenSnapshotGC: 4 * time.Hour, //nolint:gomnd
MinContentAgeSubjectToGC: 24 * time.Hour, //nolint:gomnd
RewriteMinAge: 2 * time.Hour, //nolint:gomnd
SessionExpirationAge: 96 * time.Hour, //nolint:gomnd
RequireTwoGCCycles: true,
MinRewriteToOrphanDeletionDelay: time.Hour,
}
)