all repos — searchix @ 5f74928b831c3a82cf343d397929a08374d3beeb

Search engine for NixOS, nix-darwin, home-manager and NUR users

feat: force-recreate index when schema version updated

Alan Pearce
commit

5f74928b831c3a82cf343d397929a08374d3beeb

parent

2fcbebf4ce05c2c02b0c39cfa2236ef0ea0f9870

M internal/importer/job.gointernal/importer/job.go
@@ -45,11 +45,6 @@ imp.options.Logger.Info(
"indexing last ran more than 24 hours ago, scheduling immediate update", ) nextRun = time.Now() - case imp.options.WriteIndex.Meta.IsSchemaOutdated(): - imp.options.Logger.Info( - "indexing schema version is out of date, scheduling immediate update", - ) - nextRun = time.Now() default: nextRun = nextUTCOccurrenceOfTime(imp.config.Importer.UpdateAt) }
M internal/index/indexer.gointernal/index/indexer.go
@@ -45,7 +45,6 @@ type WriteIndex struct {
batchSize int index bleve.Index log *log.Logger - exists bool Meta *meta.Meta }
@@ -245,9 +244,21 @@ }
} var idx bleve.Index - var m *meta.Meta - if !exists || options.Force { - if options.Force { + m, err := meta.OpenOrCreate(root, options.Logger) + if err != nil { + return nil, nil, fault.Wrap(err, fmsg.With("could not open index metadata file")) + } + + if !exists || options.Force || m.IsSchemaOutdated() { + if exists { + options.Logger.Warn( + "deleting existing index", + "force_flag", + options.Force, + "schema_outdated", + m.IsSchemaOutdated(), + ) + err = deleteIndex(root) if err != nil { return nil, nil, err
@@ -258,11 +269,6 @@ if err != nil {
return nil, nil, err } - m, err = meta.Create(root, options.Logger) - if err != nil { - return nil, nil, fault.Wrap(err, fmsg.With("could not create index metadata file")) - } - } else { var baseErr error //nolint:forbidigo // external package
@@ -271,11 +277,6 @@ idx, baseErr = bleve.OpenUsing(indexPath, kvconfig)
if baseErr != nil { return nil, nil, fault.Wrap(baseErr, fmsg.Withf("could not open index at path %s", indexPath)) } - - m, err = meta.Open(root, options.Logger) - if err != nil { - return nil, nil, fault.Wrap(err, fmsg.With("could not open index metadata file")) - } } if options.BatchSize == 0 {
@@ -289,12 +290,10 @@
return &ReadIndex{ config: options.Config, log: options.Logger, - exists: exists, index: idx, meta: m, }, &WriteIndex{ - exists: exists, index: idx, batchSize: options.BatchSize, log: options.Logger,
@@ -304,7 +303,7 @@ nil
} func (i *WriteIndex) Exists() bool { - return i.exists + return i.Meta.Exists() } func (i *WriteIndex) SaveMeta() error {
M internal/index/meta/meta.gointernal/index/meta/meta.go
@@ -34,8 +34,9 @@ Sources map[string]*SourceMeta
} type Meta struct { - root *file.Root - log *log.Logger + root *file.Root + log *log.Logger + exists bool data }
@@ -43,6 +44,10 @@ func (i *Meta) IsSchemaOutdated() bool {
return i.SchemaVersion < CurrentSchemaVersion } +func (i *Meta) Exists() bool { + return i.exists +} + func (i *Meta) Save() error { i.SchemaVersion = CurrentSchemaVersion j, err := json.MarshalIndent(i.data, "", " ")
@@ -54,6 +59,8 @@ err = i.root.WriteFile(BaseName, j, 0o600)
if err != nil { return fault.Wrap(err, fmsg.With("could not save index metadata")) } + + i.exists = true return nil }
@@ -112,7 +119,7 @@ },
}, nil } -func Open(root *file.Root, log *log.Logger) (*Meta, error) { +func OpenOrCreate(root *file.Root, log *log.Logger) (*Meta, error) { exists, err := root.Exists(BaseName) if err != nil { return nil, fault.Wrap(err, fmsg.With("could not check for existence of index metadata"))
M internal/index/search.gointernal/index/search.go
@@ -39,7 +39,6 @@ type ReadIndex struct {
index bleve.Index config *config.Config log *log.Logger - exists bool meta *meta.Meta }
@@ -52,7 +51,7 @@ Keyword string
} func (index *ReadIndex) Exists() bool { - return index.exists + return index.meta.Exists() } func (index *ReadIndex) LastUpdated() time.Time {