chore(docker): size the site-a oplog caps from the phase 2 soak
MaxBatchSize 500 -> 16. The default is a ROW count, not a byte budget, so the batch size in bytes is set by the widest replicated column — config_json, which Task 1 measured at up to ~60-70 KB in production. 70 KB x 500 is ~35 MB against gRPC's 4 MB default receive limit; 16 keeps a worst-case batch near 1.1 MB. MaxOplogRows 1,000,000 -> 250,000 and MaxOplogAge 7d -> 2d, sized from the soak's 0.80 sf_messages rows/sec (~69k rows/day). Tighter than default is correct here because exceeding a cap is not data loss: the oplog prunes to the ceiling and sets needs_snapshot, so the peer catches up by snapshot resync instead of incrementally. That trades a rare full resync for a bounded file. site-b and site-c stay unreplicated, so the default-OFF posture is still proven side by side on one rig. Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
This commit is contained in:
@@ -87,7 +87,24 @@
|
|||||||
// pre-host secret expander.
|
// pre-host secret expander.
|
||||||
"Replication": {
|
"Replication": {
|
||||||
"PeerAddress": "http://scadabridge-site-a-b:8083",
|
"PeerAddress": "http://scadabridge-site-a-b:8083",
|
||||||
"ApiKey": "dev-site-a-localdb-sync-key"
|
"ApiKey": "dev-site-a-localdb-sync-key",
|
||||||
|
// ---- Phase 2 sizing, from the Task 1 rig soak (not from the defaults) ----
|
||||||
|
//
|
||||||
|
// MaxBatchSize (default 500) is a ROW count, not a byte budget, so the batch
|
||||||
|
// size in bytes is set by the widest replicated column. That is
|
||||||
|
// deployed_configurations.config_json: ~721 B on this rig, but up to ~60-70 KB
|
||||||
|
// in production (measured, Task 1) - and 70 KB x 500 is ~35 MB against gRPC's
|
||||||
|
// 4 MB default receive limit. 16 keeps a worst-case batch near 1.1 MB.
|
||||||
|
"MaxBatchSize": 16,
|
||||||
|
// Backlog caps bound the oplog while the peer is offline. Exceeding them is
|
||||||
|
// NOT data loss: the oplog is pruned to the ceiling and needs_snapshot is set,
|
||||||
|
// so the peer catches up by snapshot resync instead of incrementally. That
|
||||||
|
// makes tighter-than-default correct here - it trades a rare full resync for a
|
||||||
|
// bounded file. Sized from the soak's 0.80 sf_messages rows/sec (the only
|
||||||
|
// non-zero writer measured): ~69k rows/day, so 2 days is ~138k. 250,000 leaves
|
||||||
|
// room for burst without approaching the 1,000,000 default.
|
||||||
|
"MaxOplogRows": 250000,
|
||||||
|
"MaxOplogAge": "2.00:00:00"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,24 @@
|
|||||||
// fail-closed, so a typo here does not degrade to unauthenticated replication;
|
// fail-closed, so a typo here does not degrade to unauthenticated replication;
|
||||||
// it rejects every stream and the pair silently stops converging.
|
// it rejects every stream and the pair silently stops converging.
|
||||||
"Replication": {
|
"Replication": {
|
||||||
"ApiKey": "dev-site-a-localdb-sync-key"
|
"ApiKey": "dev-site-a-localdb-sync-key",
|
||||||
|
// ---- Phase 2 sizing, from the Task 1 rig soak (not from the defaults) ----
|
||||||
|
//
|
||||||
|
// MaxBatchSize (default 500) is a ROW count, not a byte budget, so the batch
|
||||||
|
// size in bytes is set by the widest replicated column. That is
|
||||||
|
// deployed_configurations.config_json: ~721 B on this rig, but up to ~60-70 KB
|
||||||
|
// in production (measured, Task 1) - and 70 KB x 500 is ~35 MB against gRPC's
|
||||||
|
// 4 MB default receive limit. 16 keeps a worst-case batch near 1.1 MB.
|
||||||
|
"MaxBatchSize": 16,
|
||||||
|
// Backlog caps bound the oplog while the peer is offline. Exceeding them is
|
||||||
|
// NOT data loss: the oplog is pruned to the ceiling and needs_snapshot is set,
|
||||||
|
// so the peer catches up by snapshot resync instead of incrementally. That
|
||||||
|
// makes tighter-than-default correct here - it trades a rare full resync for a
|
||||||
|
// bounded file. Sized from the soak's 0.80 sf_messages rows/sec (the only
|
||||||
|
// non-zero writer measured): ~69k rows/day, so 2 days is ~138k. 250,000 leaves
|
||||||
|
// room for burst without approaching the 1,000,000 default.
|
||||||
|
"MaxOplogRows": 250000,
|
||||||
|
"MaxOplogAge": "2.00:00:00"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user