feat(PROJ-30): Xapian → Manticore Search Migration
- internal/index/manticore.go: ManticoreTenantManager + manticoreIndex (RT-Indizes, CGO-frei) - internal/index/index.go: TenantIndexer Interface (Xapian + Manticore) - internal/index/tenant_worker.go: mgr-Typ auf TenantIndexer Interface - internal/api/server.go: idxMgr auf TenantIndexer Interface - config/config.go: IndexConfig.ManticoreDSN Feld - cmd/archivmail/cmd_reindex.go: reindex Subkommando - cmd/archivmail/main.go: Manticore-Branch + reindex Case - go.mod: github.com/go-sql-driver/mysql v1.8.1 - update.sh: Manticore auto-install, CGO_ENABLED=0, config.yml migration, auto-reindex fix(IMAP): TCP-Deadline-Wrapper für steckengebliebene Imports fix(auth): Email-Claim in JWT für User-Isolation fix(search): User-Isolation via sess.Email (fail-safe) fix(ui): Admin-Login Auth-Cache, Logout-Redirect, IMAP-Polling-Resilienz Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -207,7 +207,7 @@ func (s *Scheduler) doSync(ctx context.Context, accountID int64) (int, uint32, e
|
||||
return 0, 0, fmt.Errorf("imap scheduler: login: %w", err)
|
||||
}
|
||||
|
||||
folders, err := ListFolders(c)
|
||||
folders, err := ListFolders(c.Client)
|
||||
if err != nil {
|
||||
return 0, 0, fmt.Errorf("imap scheduler: list folders: %w", err)
|
||||
}
|
||||
@@ -247,7 +247,7 @@ func (s *Scheduler) doSync(ctx context.Context, accountID int64) (int, uint32, e
|
||||
// syncFolder syncs new messages from a single IMAP folder.
|
||||
func (s *Scheduler) syncFolder(
|
||||
ctx context.Context,
|
||||
c *imapclient.Client,
|
||||
c *Conn,
|
||||
acc *Account,
|
||||
folder string,
|
||||
log *slog.Logger,
|
||||
@@ -298,7 +298,9 @@ func (s *Scheduler) syncFolder(
|
||||
}
|
||||
batch := uids[i:end]
|
||||
|
||||
count, batchMaxUID, err := s.fetchSyncBatch(c, batch, log)
|
||||
c.SetFetchDeadline()
|
||||
count, batchMaxUID, err := s.fetchSyncBatch(c.Client, batch, acc.TenantID, log)
|
||||
c.ClearDeadline()
|
||||
if err != nil {
|
||||
log.Warn("imap scheduler: batch error, continuing",
|
||||
"folder", folder, "offset", i, "err", err)
|
||||
@@ -320,6 +322,7 @@ func (s *Scheduler) syncFolder(
|
||||
func (s *Scheduler) fetchSyncBatch(
|
||||
c *imapclient.Client,
|
||||
uids []imapv2.UID,
|
||||
tenantID *int64,
|
||||
log *slog.Logger,
|
||||
) (int, uint32, error) {
|
||||
if len(uids) == 0 {
|
||||
@@ -367,7 +370,7 @@ func (s *Scheduler) fetchSyncBatch(
|
||||
}
|
||||
|
||||
if len(raw) > 0 {
|
||||
if err := s.importer.storeAndIndex(raw, log); err != nil {
|
||||
if err := s.importer.storeAndIndex(raw, tenantID, log); err != nil {
|
||||
log.Warn("imap scheduler: store/index failed", "err", err)
|
||||
} else {
|
||||
imported++
|
||||
|
||||
Reference in New Issue
Block a user