diff --git a/src/Umbraco.Examine/Umbraco.Examine.csproj b/src/Umbraco.Examine/Umbraco.Examine.csproj index 3b77b20d42..ca2a9cec22 100644 --- a/src/Umbraco.Examine/Umbraco.Examine.csproj +++ b/src/Umbraco.Examine/Umbraco.Examine.csproj @@ -116,4 +116,4 @@ - + \ No newline at end of file diff --git a/src/Umbraco.Examine/UmbracoContentIndex.cs b/src/Umbraco.Examine/UmbracoContentIndex.cs index f160e56a41..33fd2d0ee7 100644 --- a/src/Umbraco.Examine/UmbracoContentIndex.cs +++ b/src/Umbraco.Examine/UmbracoContentIndex.cs @@ -34,6 +34,7 @@ namespace Umbraco.Examine /// /// /// + /// /// /// /// @@ -44,10 +45,11 @@ namespace Umbraco.Examine Analyzer defaultAnalyzer, IProfilingLogger profilingLogger, IIOHelper ioHelper, + IRuntimeState runtimeState, ILocalizationService languageService, IContentValueSetValidator validator, IReadOnlyDictionary indexValueTypes = null) - : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, profilingLogger, ioHelper, validator, indexValueTypes) + : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, profilingLogger, ioHelper, runtimeState, validator, indexValueTypes) { if (validator == null) throw new ArgumentNullException(nameof(validator)); LanguageService = languageService ?? throw new ArgumentNullException(nameof(languageService)); diff --git a/src/Umbraco.Examine/UmbracoExamineIndex.cs b/src/Umbraco.Examine/UmbracoExamineIndex.cs index bfc6189a13..f7dfcf6375 100644 --- a/src/Umbraco.Examine/UmbracoExamineIndex.cs +++ b/src/Umbraco.Examine/UmbracoExamineIndex.cs @@ -9,7 +9,6 @@ using Umbraco.Core; using Examine; using Examine.LuceneEngine; using Lucene.Net.Store; -using Umbraco.Core.Composing; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Directory = Lucene.Net.Store.Directory; @@ -22,6 +21,7 @@ namespace Umbraco.Examine /// public abstract class UmbracoExamineIndex : LuceneIndex, IUmbracoIndex, IIndexDiagnostics { + private readonly IRuntimeState _runtimeState; // note // wrapping all operations that end up calling base.SafelyProcessQueueItems in a safe call // context because they will fork a thread/task/whatever which should *not* capture our @@ -50,6 +50,8 @@ namespace Umbraco.Examine /// /// /// + /// + /// /// /// protected UmbracoExamineIndex( @@ -59,10 +61,12 @@ namespace Umbraco.Examine Analyzer defaultAnalyzer, IProfilingLogger profilingLogger, IIOHelper ioHelper, + IRuntimeState runtimeState, IValueSetValidator validator = null, IReadOnlyDictionary indexValueTypes = null) : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, validator, indexValueTypes) { + _runtimeState = runtimeState; ProfilingLogger = profilingLogger ?? throw new ArgumentNullException(nameof(profilingLogger)); //try to set the value of `LuceneIndexFolder` for diagnostic reasons @@ -116,7 +120,7 @@ namespace Umbraco.Examine { // only affects indexers that are config file based, if an index was created via code then // this has no effect, it is assumed the index would not be created if it could not be initialized - return _configBased == false || Current.RuntimeState.Level == RuntimeLevel.Run; + return _configBased == false || _runtimeState.Level == RuntimeLevel.Run; } /// diff --git a/src/Umbraco.Examine/UmbracoIndexConfig.cs b/src/Umbraco.Examine/UmbracoIndexConfig.cs index 7ad9c638d3..a840c730ea 100644 --- a/src/Umbraco.Examine/UmbracoIndexConfig.cs +++ b/src/Umbraco.Examine/UmbracoIndexConfig.cs @@ -1,6 +1,5 @@ using Examine; using Umbraco.Core.Services; -using Umbraco.Core.Services.Implement; namespace Umbraco.Examine { diff --git a/src/Umbraco.Examine/UmbracoMemberIndex.cs b/src/Umbraco.Examine/UmbracoMemberIndex.cs index 69071855e3..494c661062 100644 --- a/src/Umbraco.Examine/UmbracoMemberIndex.cs +++ b/src/Umbraco.Examine/UmbracoMemberIndex.cs @@ -2,6 +2,7 @@ using Examine; using Examine.LuceneEngine; using Lucene.Net.Analysis; +using Umbraco.Core; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Directory = Lucene.Net.Store.Directory; @@ -31,8 +32,9 @@ namespace Umbraco.Examine Analyzer analyzer, IProfilingLogger profilingLogger, IIOHelper ioHelper, + IRuntimeState runtimeState, IValueSetValidator validator = null) : - base(name, luceneDirectory, fieldDefinitions, analyzer, profilingLogger, ioHelper, validator) + base(name, luceneDirectory, fieldDefinitions, analyzer, profilingLogger, ioHelper, runtimeState, validator) { } diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs index f2959c7e31..8122113516 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs @@ -120,7 +120,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -149,7 +149,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, //include unpublished content since this uses the 'internal' indexer, it's up to the media cache to filter validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) @@ -197,7 +197,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -225,7 +225,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -253,7 +253,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -282,7 +282,7 @@ namespace Umbraco.Tests.PublishedContent using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -307,7 +307,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { diff --git a/src/Umbraco.Tests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests/TestHelpers/TestHelper.cs index 9bcbf687d4..64794fcea9 100644 --- a/src/Umbraco.Tests/TestHelpers/TestHelper.cs +++ b/src/Umbraco.Tests/TestHelpers/TestHelper.cs @@ -12,12 +12,14 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; +using Umbraco.Core.Sync; using File = System.IO.File; namespace Umbraco.Tests.TestHelpers @@ -37,6 +39,16 @@ namespace Umbraco.Tests.TestHelpers { return GetConfigsFactory().Create(); } + public static IRuntimeState GetRuntimeState() + { + return new RuntimeState( + Mock.Of(), + Mock.Of(), + Mock.Of(), + new Lazy(), + new Lazy(), + TestHelper.GetUmbracoVersion()); + } public static IConfigsFactory GetConfigsFactory() { diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index 85e57df451..44f19f4540 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -115,6 +115,7 @@ namespace Umbraco.Tests.Testing protected IMapperCollection Mappers => Factory.GetInstance(); protected UmbracoMapper Mapper => Factory.GetInstance(); + protected IRuntimeState RuntimeState => ComponentTests.MockRuntimeState(RuntimeLevel.Run); #endregion diff --git a/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs b/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs index 2f4208ab2b..20e774c78a 100644 --- a/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs @@ -19,7 +19,7 @@ namespace Umbraco.Tests.UmbracoExamine public void Events_Ignoring_Node() { using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, //make parent id 999 so all are ignored validator: new ContentValueSetValidator(false, 999))) using (indexer.ProcessNonAsync()) diff --git a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs index 5be3fe2e7e..ce3e45c23f 100644 --- a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs @@ -1,9 +1,12 @@ using System.IO; using NUnit.Framework; +using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Logging; using Umbraco.Core.Logging.Serilog; using Umbraco.Core.Strings; +using Umbraco.Tests.Components; using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.UmbracoExamine @@ -21,6 +24,8 @@ namespace Umbraco.Tests.UmbracoExamine private IProfilingLogger _profilingLogger; protected override IProfilingLogger ProfilingLogger => _profilingLogger; + + /// /// sets up resolvers before resolution is frozen /// diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs index 03178f85ac..6dc96da007 100644 --- a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs +++ b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs @@ -155,6 +155,7 @@ namespace Umbraco.Tests.UmbracoExamine public static UmbracoContentIndex GetUmbracoIndexer( IProfilingLogger profilingLogger, IIOHelper ioHelper, + IRuntimeState runtimeState, Directory luceneDir, Analyzer analyzer = null, ILocalizationService languageService = null, @@ -176,6 +177,7 @@ namespace Umbraco.Tests.UmbracoExamine analyzer, profilingLogger, ioHelper, + runtimeState, languageService, validator); diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs index e0a4f84486..f2d9ff626d 100644 --- a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs @@ -32,7 +32,7 @@ namespace Umbraco.Tests.UmbracoExamine var contentValueSetBuilder = IndexInitializer.GetContentValueSetBuilder(Factory.GetInstance(), false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -125,7 +125,7 @@ namespace Umbraco.Tests.UmbracoExamine var mediaRebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -153,7 +153,7 @@ namespace Umbraco.Tests.UmbracoExamine using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) using (var searcher = ((LuceneSearcher)indexer.GetSearcher()).GetLuceneSearcher()) { @@ -190,7 +190,7 @@ namespace Umbraco.Tests.UmbracoExamine var validator = new ContentValueSetValidator(false, 1116); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: validator)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: validator)) using (indexer.ProcessNonAsync()) { var searcher = indexer.GetSearcher(); @@ -233,7 +233,7 @@ namespace Umbraco.Tests.UmbracoExamine var validator = new ContentValueSetValidator(false, 2222); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer1 = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, validator: validator)) + using (var indexer1 = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: validator)) using (indexer1.ProcessNonAsync()) { var searcher = indexer1.GetSearcher(); @@ -276,7 +276,7 @@ namespace Umbraco.Tests.UmbracoExamine { var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -318,7 +318,7 @@ namespace Umbraco.Tests.UmbracoExamine var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) { var searcher = indexer.GetSearcher(); diff --git a/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs b/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs index 91a7eb9799..fb6fa4c0c1 100644 --- a/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs +++ b/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs @@ -58,7 +58,7 @@ namespace Umbraco.Tests.UmbracoExamine var rebuilder = IndexInitializer.GetContentIndexRebuilder(propertyEditors, contentService, ScopeProvider.SqlContext, true); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) { indexer.CreateIndex(); diff --git a/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs b/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs index feeea2a12e..aad8303f40 100644 --- a/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs +++ b/src/Umbraco.Web/Search/UmbracoIndexesCreator.cs @@ -9,6 +9,7 @@ using Examine; using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.IO; +using Umbraco.Web.PublishedCache.NuCache; namespace Umbraco.Web.Search { @@ -26,18 +27,21 @@ namespace Umbraco.Web.Search IPublicAccessService publicAccessService, IMemberService memberService, IUmbracoIndexConfig umbracoIndexConfig, - IIOHelper ioHelper) : base(typeFinder, ioHelper) + IIOHelper ioHelper, + IRuntimeState runtimeState) : base(typeFinder, ioHelper) { - IOHelper = ioHelper; ProfilingLogger = profilingLogger ?? throw new System.ArgumentNullException(nameof(profilingLogger)); LanguageService = languageService ?? throw new System.ArgumentNullException(nameof(languageService)); PublicAccessService = publicAccessService ?? throw new System.ArgumentNullException(nameof(publicAccessService)); MemberService = memberService ?? throw new System.ArgumentNullException(nameof(memberService)); UmbracoIndexConfig = umbracoIndexConfig; + IOHelper = ioHelper ?? throw new System.ArgumentNullException(nameof(ioHelper)); + RuntimeState = runtimeState ?? throw new System.ArgumentNullException(nameof(runtimeState)); } protected IProfilingLogger ProfilingLogger { get; } protected IIOHelper IOHelper { get; } + protected IRuntimeState RuntimeState { get; } protected ILocalizationService LanguageService { get; } protected IPublicAccessService PublicAccessService { get; } protected IMemberService MemberService { get; } @@ -66,6 +70,7 @@ namespace Umbraco.Web.Search new CultureInvariantWhitespaceAnalyzer(), ProfilingLogger, IOHelper, + RuntimeState, LanguageService, GetContentValueSetValidator() ); @@ -81,6 +86,7 @@ namespace Umbraco.Web.Search new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), ProfilingLogger, IOHelper, + RuntimeState, LanguageService, GetPublishedContentValueSetValidator()); return index; @@ -95,6 +101,7 @@ namespace Umbraco.Web.Search new CultureInvariantWhitespaceAnalyzer(), ProfilingLogger, IOHelper, + RuntimeState, GetMemberValueSetValidator() ); return index;