From c32f3da33c38e18a7ed4a8c49de27898c2aa07f8 Mon Sep 17 00:00:00 2001 From: zeripath Date: Fri, 28 Feb 2020 22:00:09 +0000 Subject: [PATCH] Handle panic in indexer initialisation better (#10534) * Handle panic in indexer initialisation better * as per @guillep2k --- modules/indexer/code/indexer.go | 11 +++++++++++ modules/indexer/issues/indexer.go | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/modules/indexer/code/indexer.go b/modules/indexer/code/indexer.go index 6cbda1491b..3e90f769df 100644 --- a/modules/indexer/code/indexer.go +++ b/modules/indexer/code/indexer.go @@ -64,6 +64,17 @@ func Init() { go func() { start := time.Now() log.Info("PID: %d Initializing Repository Indexer at: %s", os.Getpid(), setting.Indexer.RepoPath) + defer func() { + if err := recover(); err != nil { + log.Error("PANIC whilst initializing repository indexer: %v\nStacktrace: %s", err, log.Stack(2)) + log.Error("The indexer files are likely corrupted and may need to be deleted") + log.Error("You can completely remove the \"%s\" directory to make Gitea recreate the indexes", setting.Indexer.RepoPath) + cancel() + indexer.Close() + close(waitChannel) + log.Fatal("PID: %d Unable to initialize the Repository Indexer at path: %s Error: %v", os.Getpid(), setting.Indexer.RepoPath, err) + } + }() bleveIndexer, created, err := NewBleveIndexer(setting.Indexer.RepoPath) if err != nil { if bleveIndexer != nil { diff --git a/modules/indexer/issues/indexer.go b/modules/indexer/issues/indexer.go index d2233ac6a8..d2079e9dbf 100644 --- a/modules/indexer/issues/indexer.go +++ b/modules/indexer/issues/indexer.go @@ -143,6 +143,14 @@ func InitIssueIndexer(syncReindex bool) { var populate bool switch setting.Indexer.IssueType { case "bleve": + defer func() { + if err := recover(); err != nil { + log.Error("PANIC whilst initializing issue indexer: %v\nStacktrace: %s", err, log.Stack(2)) + log.Error("The indexer files are likely corrupted and may need to be deleted") + holder.cancel() + log.Fatal("PID: %d Unable to initialize the Bleve Issue Indexer at path: %s Error: %v", os.Getpid(), setting.Indexer.IssuePath, err) + } + }() issueIndexer := NewBleveIndexer(setting.Indexer.IssuePath) exist, err := issueIndexer.Init() if err != nil {