fix(imap): IMAP/POP3-Import in korrekten Tenant-Index schreiben
IMAP- und POP3-Importer haben Mails immer nur in emails_global indexiert (TenantID nie gesetzt, idxMgr.Global() statt ForTenant(tenantID)). Dadurch fehlten neue Mails ab dem letzten Server-Neustart im Tenant-Index (Suche zeigte veraltete Ergebnisse). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -412,7 +412,7 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
defer imapSt.Close()
|
||||
imapImp := imapstore.NewImporter(imapSt, mailStore, idx, logger)
|
||||
imapImp := imapstore.NewImporter(imapSt, mailStore, idxMgr, logger)
|
||||
// PROJ-44: trigger OCR for IMAP-imported mails — without this every
|
||||
// IMAP delivery would remain in ocr_status='pending' forever.
|
||||
if ocrWorker != nil {
|
||||
@@ -433,7 +433,7 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
defer pop3St.Close()
|
||||
pop3Imp := pop3store.NewImporter(pop3St, mailStore, idx, logger)
|
||||
pop3Imp := pop3store.NewImporter(pop3St, mailStore, idxMgr, logger)
|
||||
// PROJ-44: same OCR hook as the IMAP importer above.
|
||||
if ocrWorker != nil {
|
||||
pop3Imp.SetOCRSubmit(func(mailID string, tenantID *int64) {
|
||||
|
||||
@@ -21,7 +21,7 @@ const batchSize = 50
|
||||
type Importer struct {
|
||||
store *Store
|
||||
mailStore *storage.Store
|
||||
idx index.Indexer
|
||||
idxMgr index.TenantIndexer
|
||||
logger *slog.Logger
|
||||
// PROJ-44: optional hook into the async OCR worker. Wired in main.go
|
||||
// via SetOCRSubmit so the imap package does not import internal/ocr.
|
||||
@@ -29,11 +29,11 @@ type Importer struct {
|
||||
}
|
||||
|
||||
// NewImporter creates a new Importer wired to the storage and index backends.
|
||||
func NewImporter(store *Store, mailStore *storage.Store, idx index.Indexer, logger *slog.Logger) *Importer {
|
||||
func NewImporter(store *Store, mailStore *storage.Store, idxMgr index.TenantIndexer, logger *slog.Logger) *Importer {
|
||||
return &Importer{
|
||||
store: store,
|
||||
mailStore: mailStore,
|
||||
idx: idx,
|
||||
idxMgr: idxMgr,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
@@ -274,9 +274,10 @@ func (imp *Importer) storeAndIndex(raw []byte, tenantID *int64, log *slog.Logger
|
||||
HasAttachment: len(pm.Attachments) > 0,
|
||||
Date: pm.Date,
|
||||
Size: int64(len(raw)),
|
||||
TenantID: tenantID,
|
||||
}
|
||||
|
||||
if err := imp.idx.IndexSync(doc); err != nil {
|
||||
if err := imp.idxMgr.ForTenant(tenantID).IndexSync(doc); err != nil {
|
||||
log.Warn("failed to index mail", "id", id, "err", err)
|
||||
// Non-fatal: mail is stored, just not searchable yet
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
type Importer struct {
|
||||
store *Store
|
||||
mailStore *storage.Store
|
||||
idx index.Indexer
|
||||
idxMgr index.TenantIndexer
|
||||
logger *slog.Logger
|
||||
TenantID *int64 // optional tenant assignment for stored mails
|
||||
// PROJ-44: optional OCR enqueue hook, wired from main.go.
|
||||
@@ -24,11 +24,11 @@ type Importer struct {
|
||||
}
|
||||
|
||||
// NewImporter creates a new Importer wired to the storage and index backends.
|
||||
func NewImporter(store *Store, mailStore *storage.Store, idx index.Indexer, logger *slog.Logger) *Importer {
|
||||
func NewImporter(store *Store, mailStore *storage.Store, idxMgr index.TenantIndexer, logger *slog.Logger) *Importer {
|
||||
return &Importer{
|
||||
store: store,
|
||||
mailStore: mailStore,
|
||||
idx: idx,
|
||||
idxMgr: idxMgr,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
@@ -167,9 +167,10 @@ func (imp *Importer) storeAndIndex(raw []byte, log *slog.Logger) error {
|
||||
HasAttachment: len(pm.Attachments) > 0,
|
||||
Date: pm.Date,
|
||||
Size: int64(len(raw)),
|
||||
TenantID: imp.TenantID,
|
||||
}
|
||||
|
||||
if err := imp.idx.IndexSync(doc); err != nil {
|
||||
if err := imp.idxMgr.ForTenant(imp.TenantID).IndexSync(doc); err != nil {
|
||||
log.Warn("failed to index mail", "id", id, "err", err)
|
||||
// Non-fatal: mail is stored, just not searchable yet
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user