]> source.dussan.org Git - gitea.git/commitdiff
Automatically regenerate indexer for incompatible versions (#2524)
authorEthan Koenig <ethantkoenig@gmail.com>
Fri, 22 Sep 2017 21:30:56 +0000 (14:30 -0700)
committerLauris BH <lauris@nix.lv>
Fri, 22 Sep 2017 21:30:56 +0000 (00:30 +0300)
modules/indexer/issue.go

index 2503a788258b531f0de62fd4d6568593b897ed7c..050a623ce2a7e33b664c99954bb03ebf30f57a13 100644 (file)
@@ -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)
        }
 }