| @@ -15,6 +15,7 @@ import ( | |||||
| "github.com/blevesearch/bleve/analysis/token/lowercase" | "github.com/blevesearch/bleve/analysis/token/lowercase" | ||||
| "github.com/blevesearch/bleve/analysis/token/unicodenorm" | "github.com/blevesearch/bleve/analysis/token/unicodenorm" | ||||
| "github.com/blevesearch/bleve/analysis/tokenizer/unicode" | "github.com/blevesearch/bleve/analysis/tokenizer/unicode" | ||||
| "github.com/blevesearch/bleve/index/upsidedown" | |||||
| ) | ) | ||||
| // issueIndexer (thread-safe) index for searching issues | // issueIndexer (thread-safe) index for searching issues | ||||
| @@ -39,27 +40,25 @@ const issueIndexerAnalyzer = "issueIndexer" | |||||
| // InitIssueIndexer initialize issue indexer | // InitIssueIndexer initialize issue indexer | ||||
| func InitIssueIndexer(populateIndexer func() error) { | func InitIssueIndexer(populateIndexer func() error) { | ||||
| _, err := os.Stat(setting.Indexer.IssuePath) | _, 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) | 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) | |||||
| } | } | ||||
| } | } | ||||