From 7e81768abc3b90ecedaf9e6a9c6e373aa4dbcbd6 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 26 Oct 2016 14:25:32 +0200 Subject: [PATCH] adds exception checking to ExamineExtensions --- .../Search/LuceneIndexerExtensions.cs | 52 ++++++++++++++++--- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web/Search/LuceneIndexerExtensions.cs b/src/Umbraco.Web/Search/LuceneIndexerExtensions.cs index 3cc7908dfd..34ad71d2f9 100644 --- a/src/Umbraco.Web/Search/LuceneIndexerExtensions.cs +++ b/src/Umbraco.Web/Search/LuceneIndexerExtensions.cs @@ -5,6 +5,8 @@ using Examine.LuceneEngine.Providers; using Examine.Providers; using Lucene.Net.Index; using Lucene.Net.Search; +using Lucene.Net.Store; +using Umbraco.Core.Logging; namespace Umbraco.Web.Search { @@ -21,9 +23,17 @@ namespace Umbraco.Web.Search /// public static int GetIndexDocumentCount(this LuceneIndexer indexer) { - using (var reader = indexer.GetIndexWriter().GetReader()) + try { - return reader.NumDocs(); + using (var reader = indexer.GetIndexWriter().GetReader()) + { + return reader.NumDocs(); + } + } + catch (AlreadyClosedException) + { + LogHelper.Warn(typeof(ExamineExtensions), "Cannot get GetIndexDocumentCount, the writer is already closed"); + return 0; } } @@ -34,9 +44,19 @@ namespace Umbraco.Web.Search /// public static int GetIndexFieldCount(this LuceneIndexer indexer) { - using (var reader = indexer.GetIndexWriter().GetReader()) + //TODO: check for closing! and AlreadyClosedException + + try { - return reader.GetFieldNames(IndexReader.FieldOption.ALL).Count; + using (var reader = indexer.GetIndexWriter().GetReader()) + { + return reader.GetFieldNames(IndexReader.FieldOption.ALL).Count; + } + } + catch (AlreadyClosedException) + { + LogHelper.Warn(typeof(ExamineExtensions), "Cannot get GetIndexFieldCount, the writer is already closed"); + return 0; } } @@ -47,9 +67,17 @@ namespace Umbraco.Web.Search /// public static bool IsIndexOptimized(this LuceneIndexer indexer) { - using (var reader = indexer.GetIndexWriter().GetReader()) + try { - return reader.IsOptimized(); + using (var reader = indexer.GetIndexWriter().GetReader()) + { + return reader.IsOptimized(); + } + } + catch (AlreadyClosedException) + { + LogHelper.Warn(typeof(ExamineExtensions), "Cannot get IsIndexOptimized, the writer is already closed"); + return false; } } @@ -74,9 +102,17 @@ namespace Umbraco.Web.Search /// public static int GetDeletedDocumentsCount(this LuceneIndexer indexer) { - using (var reader = indexer.GetIndexWriter().GetReader()) + try { - return reader.NumDeletedDocs(); + using (var reader = indexer.GetIndexWriter().GetReader()) + { + return reader.NumDeletedDocs(); + } + } + catch (AlreadyClosedException) + { + LogHelper.Warn(typeof(ExamineExtensions), "Cannot get GetDeletedDocumentsCount, the writer is already closed"); + return 0; } } }