From ccff57103ae250ad8187926e3740f28c1e23a815 Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Fri, 22 Sep 2017 14:30:56 -0700 Subject: [PATCH] Automatically regenerate indexer for incompatible versions (#2524) --- modules/indexer/issue.go | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/modules/indexer/issue.go b/modules/indexer/issue.go index 2503a7882..050a623ce 100644 --- a/modules/indexer/issue.go +++ b/modules/indexer/issue.go @@ -15,6 +15,7 @@ import ( "github.com/blevesearch/bleve/analysis/token/lowercase" "github.com/blevesearch/bleve/analysis/token/unicodenorm" "github.com/blevesearch/bleve/analysis/tokenizer/unicode" + "github.com/blevesearch/bleve/index/upsidedown" ) // issueIndexer (thread-safe) index for searching issues @@ -39,27 +40,25 @@ const issueIndexerAnalyzer = "issueIndexer" // InitIssueIndexer initialize issue indexer func InitIssueIndexer(populateIndexer func() error) { _, err := os.Stat(setting.Indexer.IssuePath) - if err != nil { - if os.IsNotExist(err) { - if err = createIssueIndexer(); err != nil { - log.Fatal(4, "CreateIssuesIndexer: %v", err) - } - if err = populateIndexer(); err != nil { - log.Fatal(4, "PopulateIssuesIndex: %v", err) - } - } else { - log.Fatal(4, "InitIssuesIndexer: %v", err) - } - } else { + if err != nil && !os.IsNotExist(err) { + log.Fatal(4, "InitIssueIndexer: %v", err) + } else if err == nil { issueIndexer, err = bleve.Open(setting.Indexer.IssuePath) - if err != nil { - log.Error(4, "Unable to open issues indexer (%s)."+ - " If the error is due to incompatible versions, try deleting the indexer files;"+ - " gitea will recreate them with the appropriate version the next time it runs."+ - " Deleting the indexer files will not result in loss of data.", - setting.Indexer.IssuePath) - log.Fatal(4, "InitIssuesIndexer, open index: %v", err) + if err == nil { + return + } else if err != upsidedown.IncompatibleVersion { + log.Fatal(4, "InitIssueIndexer, open index: %v", err) } + log.Warn("Incompatible bleve version, deleting and recreating issue indexer") + if err = os.RemoveAll(setting.Indexer.IssuePath); err != nil { + log.Fatal(4, "InitIssueIndexer: remove index, %v", err) + } + } + if err = createIssueIndexer(); err != nil { + log.Fatal(4, "InitIssuesIndexer: create index, %v", err) + } + if err = populateIndexer(); err != nil { + log.Fatal(4, "InitIssueIndexer: populate index, %v", err) } }