Fix exception when replacing IServerRegistrar
This commit is contained in:
@@ -73,16 +73,20 @@ namespace Umbraco.Core.Runtime
|
||||
// register a server registrar, by default it's the db registrar
|
||||
composition.RegisterUnique<IServerRegistrar>(f =>
|
||||
{
|
||||
if ("true".InvariantEquals(ConfigurationManager.AppSettings["umbracoDisableElectionForSingleServer"]))
|
||||
return new SingleServerRegistrar(f.GetInstance<IRuntimeState>());
|
||||
return new DatabaseServerRegistrar(
|
||||
new Lazy<IServerRegistrationService>(f.GetInstance<IServerRegistrationService>),
|
||||
new DatabaseServerRegistrarOptions());
|
||||
// TODO this is a hack, use proper configuration!
|
||||
// also: we still register the full IServerMessenger because
|
||||
// even on 1 single server we can have 2 concurrent app domains
|
||||
var singleServer = "true".InvariantEquals(ConfigurationManager.AppSettings["umbracoDisableElectionForSingleServer"]);
|
||||
return singleServer
|
||||
? (IServerRegistrar) new SingleServerRegistrar(f.GetInstance<IRuntimeState>())
|
||||
: new DatabaseServerRegistrar(
|
||||
new Lazy<IServerRegistrationService>(f.GetInstance<IServerRegistrationService>),
|
||||
new DatabaseServerRegistrarOptions());
|
||||
});
|
||||
|
||||
// by default we'll use the database server messenger with default options (no callbacks),
|
||||
// this will be overridden by either the legacy thing or the db thing in the corresponding
|
||||
// components in the web project - todo - should obsolete the legacy thing
|
||||
// this will be overridden by the db thing in the corresponding components in the web
|
||||
// project
|
||||
composition.RegisterUnique<IServerMessenger>(factory
|
||||
=> new DatabaseServerMessenger(
|
||||
factory.GetInstance<IRuntimeState>(),
|
||||
|
||||
@@ -106,30 +106,36 @@ namespace Umbraco.Web.Components
|
||||
|
||||
public DatabaseServerRegistrarAndMessengerComponent(IRuntimeState runtime, IServerRegistrar serverRegistrar, IServerMessenger serverMessenger, IServerRegistrationService registrationService, ILogger logger, IndexRebuilder indexRebuilder)
|
||||
{
|
||||
_registrar = serverRegistrar as DatabaseServerRegistrar;
|
||||
if (_registrar == null) throw new Exception("panic: registar.");
|
||||
|
||||
_messenger = serverMessenger as BatchedDatabaseServerMessenger;
|
||||
if (_messenger == null) throw new Exception("panic: messenger");
|
||||
|
||||
_runtime = runtime;
|
||||
_logger = logger;
|
||||
_registrationService = registrationService;
|
||||
_indexRebuilder = indexRebuilder;
|
||||
|
||||
_touchTaskRunner = new BackgroundTaskRunner<IBackgroundTask>("ServerRegistration",
|
||||
new BackgroundTaskRunnerOptions { AutoStart = true }, logger);
|
||||
_processTaskRunner = new BackgroundTaskRunner<IBackgroundTask>("ServerInstProcess",
|
||||
new BackgroundTaskRunnerOptions { AutoStart = true }, logger);
|
||||
// create task runner for DatabaseServerRegistrar
|
||||
_registrar = serverRegistrar as DatabaseServerRegistrar;
|
||||
if (_registrar != null)
|
||||
{
|
||||
_touchTaskRunner = new BackgroundTaskRunner<IBackgroundTask>("ServerRegistration",
|
||||
new BackgroundTaskRunnerOptions { AutoStart = true }, logger);
|
||||
}
|
||||
|
||||
// create task runner for BatchedDatabaseServerMessenger
|
||||
_messenger = serverMessenger as BatchedDatabaseServerMessenger;
|
||||
if (_messenger != null)
|
||||
{
|
||||
_processTaskRunner = new BackgroundTaskRunner<IBackgroundTask>("ServerInstProcess",
|
||||
new BackgroundTaskRunnerOptions { AutoStart = true }, logger);
|
||||
}
|
||||
}
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
//We will start the whole process when a successful request is made
|
||||
UmbracoModule.RouteAttempt += RegisterBackgroundTasksOnce;
|
||||
if (_registrar != null || _messenger != null)
|
||||
UmbracoModule.RouteAttempt += RegisterBackgroundTasksOnce;
|
||||
|
||||
// must come last, as it references some _variables
|
||||
_messenger.Startup();
|
||||
_messenger?.Startup();
|
||||
}
|
||||
|
||||
public void Terminate()
|
||||
@@ -175,6 +181,9 @@ namespace Umbraco.Web.Components
|
||||
|
||||
private IBackgroundTask RegisterInstructionProcess()
|
||||
{
|
||||
if (_messenger == null)
|
||||
return null;
|
||||
|
||||
var task = new InstructionProcessTask(_processTaskRunner,
|
||||
60000, //delay before first execution
|
||||
_messenger.Options.ThrottleSeconds*1000, //amount of ms between executions
|
||||
@@ -186,6 +195,9 @@ namespace Umbraco.Web.Components
|
||||
|
||||
private IBackgroundTask RegisterTouchServer(IServerRegistrationService registrationService, string serverAddress)
|
||||
{
|
||||
if (_registrar == null)
|
||||
return null;
|
||||
|
||||
var task = new TouchServerTask(_touchTaskRunner,
|
||||
15000, //delay before first execution
|
||||
_registrar.Options.RecurringSeconds*1000, //amount of ms between executions
|
||||
|
||||
Reference in New Issue
Block a user