feat: force-recreate index when schema version updated
4 files changed, 27 insertions(+), 27 deletions(-)
M internal/importer/job.go → internal/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.go → internal/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.go → internal/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.go → internal/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 {