From da998e9285417ecb8d0922990a44f832b6896127 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 14 Jul 2020 13:10:19 +1000 Subject: [PATCH] missing file --- .../ErrorLoggingConcurrentMergeScheduler.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/Examine/LuceneEngine/Providers/ErrorLoggingConcurrentMergeScheduler.cs diff --git a/src/Examine/LuceneEngine/Providers/ErrorLoggingConcurrentMergeScheduler.cs b/src/Examine/LuceneEngine/Providers/ErrorLoggingConcurrentMergeScheduler.cs new file mode 100644 index 000000000..99738bf1a --- /dev/null +++ b/src/Examine/LuceneEngine/Providers/ErrorLoggingConcurrentMergeScheduler.cs @@ -0,0 +1,39 @@ +using System; +using System.Security; +using Lucene.Net.Index; + + +namespace Examine.LuceneEngine.Providers +{ + /// + /// Used to prevent the appdomain from crashing when lucene runs into a concurrent merge scheduler failure + /// + [SecurityCritical] + internal class ErrorLoggingConcurrentMergeScheduler : ConcurrentMergeScheduler + { + private readonly Action _logger; + + [SecurityCritical] + public ErrorLoggingConcurrentMergeScheduler(string indexName, Action logger) + { + IndexName = indexName; + _logger = logger; + } + + public string IndexName { get; } + + [SecurityCritical] + protected override void HandleMergeException(System.Exception exc) + { + try + { + base.HandleMergeException(exc); + } + catch (Exception e) + { + _logger($"Concurrent merge failed for index: {IndexName} if this error is persistent then index rebuilding is necessary", e); + } + } + } +} +