Injecting RuntimeState instead of using Current

This commit is contained in:
Bjarke Berg
2019-11-19 11:44:34 +01:00
parent a49b313080
commit 9ab6c5fe7b
14 changed files with 58 additions and 24 deletions

View File

@@ -116,4 +116,4 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
</Project>

View File

@@ -34,6 +34,7 @@ namespace Umbraco.Examine
/// <param name="defaultAnalyzer"></param>
/// <param name="profilingLogger"></param>
/// <param name="ioHelper"></param>
/// <param name="runtimeState"></param>
/// <param name="languageService"></param>
/// <param name="validator"></param>
/// <param name="indexValueTypes"></param>
@@ -44,10 +45,11 @@ namespace Umbraco.Examine
Analyzer defaultAnalyzer,
IProfilingLogger profilingLogger,
IIOHelper ioHelper,
IRuntimeState runtimeState,
ILocalizationService languageService,
IContentValueSetValidator validator,
IReadOnlyDictionary<string, IFieldValueTypeFactory> 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));

View File

@@ -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
/// </summary>
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
/// <param name="luceneDirectory"></param>
/// <param name="defaultAnalyzer"></param>
/// <param name="profilingLogger"></param>
/// <param name="ioHelper"></param>
/// <param name="runtimeState"></param>
/// <param name="validator"></param>
/// <param name="indexValueTypes"></param>
protected UmbracoExamineIndex(
@@ -59,10 +61,12 @@ namespace Umbraco.Examine
Analyzer defaultAnalyzer,
IProfilingLogger profilingLogger,
IIOHelper ioHelper,
IRuntimeState runtimeState,
IValueSetValidator validator = null,
IReadOnlyDictionary<string, IFieldValueTypeFactory> 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;
}
/// <summary>

View File

@@ -1,6 +1,5 @@
using Examine;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
namespace Umbraco.Examine
{

View File

@@ -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)
{
}

View File

@@ -120,7 +120,7 @@ namespace Umbraco.Tests.PublishedContent
var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance<PropertyEditorCollection>(), 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<PropertyEditorCollection>(), 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<PropertyEditorCollection>(), 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<PropertyEditorCollection>(), 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<PropertyEditorCollection>(), 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<PropertyEditorCollection>(), 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())
{

View File

@@ -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<ILogger>(),
Mock.Of<IUmbracoSettingsSection>(),
Mock.Of<IGlobalSettings>(),
new Lazy<IMainDom>(),
new Lazy<IServerRegistrar>(),
TestHelper.GetUmbracoVersion());
}
public static IConfigsFactory GetConfigsFactory()
{

View File

@@ -115,6 +115,7 @@ namespace Umbraco.Tests.Testing
protected IMapperCollection Mappers => Factory.GetInstance<IMapperCollection>();
protected UmbracoMapper Mapper => Factory.GetInstance<UmbracoMapper>();
protected IRuntimeState RuntimeState => ComponentTests.MockRuntimeState(RuntimeLevel.Run);
#endregion

View File

@@ -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())

View File

@@ -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;
/// <summary>
/// sets up resolvers before resolution is frozen
/// </summary>

View File

@@ -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);

View File

@@ -32,7 +32,7 @@ namespace Umbraco.Tests.UmbracoExamine
var contentValueSetBuilder = IndexInitializer.GetContentValueSetBuilder(Factory.GetInstance<PropertyEditorCollection>(), 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<PropertyEditorCollection>(), 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<PropertyEditorCollection>(), 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<PropertyEditorCollection>(), 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();

View File

@@ -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();

View File

@@ -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;