feat(PROJ-56): Last-Entzerrung für OCR und IMAP-Sync
OCR-Worker pausieren optional in konfigurierbarem Zeitfenster (paused_hours), Jobs bleiben pending statt verworfen zu werden. IMAP-Scheduler verteilt Sync-Starts via deterministischem Pro-Account-Jitter, um Lastspitzen bei vielen Postfächern mit gleichem Intervall zu vermeiden. Beides per Config opt-out, Default-Verhalten unverändert. Build + Smoke-Test auf 132 verifiziert.
This commit is contained in:
@@ -190,10 +190,15 @@ func main() {
|
||||
// into the storage-dir which is guaranteed-RW.
|
||||
ocr.SetTempDir(cfg.Storage.StorePath + "/ocr-tmp")
|
||||
ocrWorker := ocr.NewWorker(mailStore, idxMgr, ocr.Options{
|
||||
Workers: 2,
|
||||
QueueSize: 1000,
|
||||
Logger: logger,
|
||||
Workers: 2,
|
||||
QueueSize: 1000,
|
||||
Logger: logger,
|
||||
PausedHours: cfg.OCR.PausedHours, // PROJ-56: optional local-time pause window
|
||||
})
|
||||
if cfg.OCR.PausedHours != nil {
|
||||
logger.Info("ocr worker: pause window configured",
|
||||
"from_hour", cfg.OCR.PausedHours[0], "to_hour", cfg.OCR.PausedHours[1])
|
||||
}
|
||||
ocrWorker.Start(context.Background())
|
||||
defer ocrWorker.Stop()
|
||||
if !ocr.IsAvailable() {
|
||||
@@ -433,6 +438,7 @@ func main() {
|
||||
})
|
||||
}
|
||||
imapSched := imapstore.NewScheduler(imapSt, imapImp, logger)
|
||||
imapSched.SetJitterSeconds(cfg.IMAPScheduler.ResolvedJitterSeconds()) // PROJ-56: deterministic per-account sync spread
|
||||
imapSched.SetAuditLogger(audlog) // PROJ-45: tenant-visible UIDVALIDITY-reset audit entries
|
||||
imapSched.Start()
|
||||
defer imapSched.Stop()
|
||||
|
||||
Reference in New Issue
Block a user