Declare every module's data; the backup holder measures it (hq ADR 0233)
Backup lines are derived from each module's data section instead of written by hand; the holder measures declared items, reads the array under them, and deletes a retired item only after a last restore point; the Go providers say each held consumer's size so an empty replacement is seen.
This commit is contained in:
@@ -144,6 +144,89 @@
|
||||
"why": "the admin API, which this module's own code reaches on loopback from the node's runtime now that it runs outside the mailu network"
|
||||
}
|
||||
],
|
||||
"data": {
|
||||
"own": [
|
||||
{
|
||||
"id": "mail",
|
||||
"path": "${dir:data-mail}",
|
||||
"class": "valuable",
|
||||
"why": "every mailbox"
|
||||
},
|
||||
{
|
||||
"id": "dkim",
|
||||
"path": "${dir:data-dkim}",
|
||||
"class": "valuable",
|
||||
"why": "the domain's signing keys; a new one means a new DNS record"
|
||||
},
|
||||
{
|
||||
"id": "data",
|
||||
"path": "${dir:data-data}",
|
||||
"class": "valuable",
|
||||
"why": "the server's own data"
|
||||
},
|
||||
{
|
||||
"id": "dav",
|
||||
"path": "${dir:data-dav}",
|
||||
"class": "valuable",
|
||||
"why": "calendars and contacts"
|
||||
},
|
||||
{
|
||||
"id": "webmail",
|
||||
"path": "${dir:data-webmail}",
|
||||
"class": "valuable",
|
||||
"why": "the webmail's own data: its users' settings and address books"
|
||||
},
|
||||
{
|
||||
"id": "queue",
|
||||
"path": "${dir:data-mailqueue}",
|
||||
"class": "valuable",
|
||||
"why": "mail accepted and not yet delivered, kept nowhere else"
|
||||
},
|
||||
{
|
||||
"id": "filter",
|
||||
"path": "${dir:data-filter}",
|
||||
"class": "rebuildable",
|
||||
"why": "the spam filter's learned statistics; it learns again"
|
||||
},
|
||||
{
|
||||
"id": "certs",
|
||||
"path": "${dir:data-certs}",
|
||||
"class": "rebuildable",
|
||||
"why": "certificates, issued again"
|
||||
},
|
||||
{
|
||||
"id": "automx",
|
||||
"path": "${dir:data-automx}",
|
||||
"class": "rebuildable",
|
||||
"why": "client autoconfiguration, written again"
|
||||
},
|
||||
{
|
||||
"id": "fetchmail",
|
||||
"path": "${dir:data-fetchmail}",
|
||||
"class": "rebuildable",
|
||||
"why": "which remote messages were fetched; lost, some are fetched twice"
|
||||
},
|
||||
{
|
||||
"id": "clamav",
|
||||
"path": "${dir:data-clamav}",
|
||||
"class": "cache",
|
||||
"why": "virus signatures, downloaded again"
|
||||
},
|
||||
{
|
||||
"id": "redis",
|
||||
"path": "${dir:data-redis}",
|
||||
"class": "cache",
|
||||
"why": "the filter's working set"
|
||||
}
|
||||
],
|
||||
"consumers": {
|
||||
"smtp": {
|
||||
"class": "valuable",
|
||||
"in": "mail",
|
||||
"why": "a consumer's mailbox holds the only copy of its mail"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"id": "mesh-state",
|
||||
@@ -562,12 +645,5 @@
|
||||
"failregex": "^.*(?:imap|pop3|submission|managesieve)-login: .*\\(auth failed, \\d+ attempts(?: in \\d+ secs)?\\):.*rip=<HOST>(?:,|$)",
|
||||
"jail": "backend = systemd\njournalmatch = CONTAINER_NAME=mailu-front\nport = smtp,submission,submissions,imap,imaps,pop3,pop3s\nmaxretry = 3\nfindtime = 1d\nbantime = 1d"
|
||||
}
|
||||
],
|
||||
"contributions": [
|
||||
{
|
||||
"seat": "node-backup",
|
||||
"kind": "backup",
|
||||
"content": "path ${dir:data-mail}\npath ${dir:data-dkim}\npath ${dir:data-data}\npath ${dir:data-dav}\npath ${dir:data-webmail}\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user