Browse Source

update upgrade process

Luke Pulverenti 9 years ago
parent
commit
fb2a320416

+ 3 - 3
MediaBrowser.Common.Implementations/BaseApplicationHost.cs

@@ -453,7 +453,7 @@ namespace MediaBrowser.Common.Implementations
 
 
 			RegisterSingleInstance<IApplicationPaths>(ApplicationPaths);
 			RegisterSingleInstance<IApplicationPaths>(ApplicationPaths);
 
 
-			TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger, FileSystemManager);
+			TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, LogManager.GetLogger("TaskManager"), FileSystemManager);
 
 
 			RegisterSingleInstance(JsonSerializer);
 			RegisterSingleInstance(JsonSerializer);
 			RegisterSingleInstance(XmlSerializer);
 			RegisterSingleInstance(XmlSerializer);
@@ -465,7 +465,7 @@ namespace MediaBrowser.Common.Implementations
 
 
 			RegisterSingleInstance(FileSystemManager);
 			RegisterSingleInstance(FileSystemManager);
 
 
-			HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger, FileSystemManager);
+            HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, LogManager.GetLogger("HttpClient"), FileSystemManager);
 			RegisterSingleInstance(HttpClient);
 			RegisterSingleInstance(HttpClient);
 
 
 			NetworkManager = CreateNetworkManager(LogManager.GetLogger("NetworkManager"));
 			NetworkManager = CreateNetworkManager(LogManager.GetLogger("NetworkManager"));
@@ -474,7 +474,7 @@ namespace MediaBrowser.Common.Implementations
 			SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LogManager);
 			SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LogManager);
 			RegisterSingleInstance(SecurityManager);
 			RegisterSingleInstance(SecurityManager);
 
 
-			InstallationManager = new InstallationManager(Logger, this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager);
+            InstallationManager = new InstallationManager(LogManager.GetLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager);
 			RegisterSingleInstance(InstallationManager);
 			RegisterSingleInstance(InstallationManager);
 
 
 			ZipClient = new ZipClient(FileSystemManager);
 			ZipClient = new ZipClient(FileSystemManager);

+ 52 - 1
MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs

@@ -55,6 +55,25 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
         private ILogger Logger { get; set; }
         private ILogger Logger { get; set; }
         private readonly IFileSystem _fileSystem;
         private readonly IFileSystem _fileSystem;
 
 
+        private bool _suspendTriggers;
+
+        public bool SuspendTriggers
+        {
+            get { return _suspendTriggers; }
+            set
+            {
+                Logger.Info("Setting SuspendTriggers to {0}", value);
+                var executeQueued = _suspendTriggers && !value;
+
+                _suspendTriggers = value;
+
+                if (executeQueued)
+                {
+                    ExecuteQueuedTasks();
+                }
+            }
+        }
+
         /// <summary>
         /// <summary>
         /// Initializes a new instance of the <see cref="TaskManager" /> class.
         /// Initializes a new instance of the <see cref="TaskManager" /> class.
         /// </summary>
         /// </summary>
@@ -151,6 +170,31 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
             QueueScheduledTask<T>(new TaskExecutionOptions());
             QueueScheduledTask<T>(new TaskExecutionOptions());
         }
         }
 
 
+        public void Execute<T>()
+            where T : IScheduledTask
+        {
+            var scheduledTask = ScheduledTasks.FirstOrDefault(t => t.ScheduledTask.GetType() == typeof(T));
+
+            if (scheduledTask == null)
+            {
+                Logger.Error("Unable to find scheduled task of type {0} in Execute.", typeof(T).Name);
+            }
+            else
+            {
+                var type = scheduledTask.ScheduledTask.GetType();
+
+                Logger.Info("Queueing task {0}", type.Name);
+
+                lock (_taskQueue)
+                {
+                    if (scheduledTask.State == TaskState.Idle)
+                    {
+                        Execute(scheduledTask, new TaskExecutionOptions());
+                    }
+                }
+            }
+        }
+
         /// <summary>
         /// <summary>
         /// Queues the scheduled task.
         /// Queues the scheduled task.
         /// </summary>
         /// </summary>
@@ -183,7 +227,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
 
 
             lock (_taskQueue)
             lock (_taskQueue)
             {
             {
-                if (task.State == TaskState.Idle)
+                if (task.State == TaskState.Idle && !SuspendTriggers)
                 {
                 {
                     Execute(task, options);
                     Execute(task, options);
                     return;
                     return;
@@ -273,6 +317,13 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
         /// </summary>
         /// </summary>
         private void ExecuteQueuedTasks()
         private void ExecuteQueuedTasks()
         {
         {
+            if (SuspendTriggers)
+            {
+                return;
+            }
+
+            Logger.Info("ExecuteQueuedTasks");
+
             // Execute queued tasks
             // Execute queued tasks
             lock (_taskQueue)
             lock (_taskQueue)
             {
             {

+ 5 - 0
MediaBrowser.Common/ScheduledTasks/ITaskManager.cs

@@ -66,7 +66,12 @@ namespace MediaBrowser.Common.ScheduledTasks
         void Cancel(IScheduledTaskWorker task);
         void Cancel(IScheduledTaskWorker task);
         Task Execute(IScheduledTaskWorker task, TaskExecutionOptions options = null);
         Task Execute(IScheduledTaskWorker task, TaskExecutionOptions options = null);
 
 
+        void Execute<T>()
+            where T : IScheduledTask;
+        
         event EventHandler<GenericEventArgs<IScheduledTaskWorker>> TaskExecuting;
         event EventHandler<GenericEventArgs<IScheduledTaskWorker>> TaskExecuting;
         event EventHandler<TaskCompletionEventArgs> TaskCompleted;
         event EventHandler<TaskCompletionEventArgs> TaskCompleted;
+
+        bool SuspendTriggers { get; set; }
     }
     }
 }
 }

+ 9 - 7
MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs

@@ -32,7 +32,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
         private readonly ILocalizationManager _localization;
         private readonly ILocalizationManager _localization;
         private readonly ITaskManager _taskManager;
         private readonly ITaskManager _taskManager;
 
 
-        public const int MigrationVersion = 12;
+        public const int MigrationVersion = 17;
         public static bool EnableUnavailableMessage = false;
         public static bool EnableUnavailableMessage = false;
 
 
         public CleanDatabaseScheduledTask(ILibraryManager libraryManager, IItemRepository itemRepo, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem, IHttpServer httpServer, ILocalizationManager localization, ITaskManager taskManager)
         public CleanDatabaseScheduledTask(ILibraryManager libraryManager, IItemRepository itemRepo, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem, IHttpServer httpServer, ILocalizationManager localization, ITaskManager taskManager)
@@ -97,12 +97,20 @@ namespace MediaBrowser.Server.Implementations.Persistence
 
 
             await _itemRepo.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
             await _itemRepo.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
 
 
+            if (_config.Configuration.MigrationVersion < MigrationVersion)
+            {
+                _config.Configuration.MigrationVersion = MigrationVersion;
+                _config.SaveConfiguration();
+            }
+
             if (EnableUnavailableMessage)
             if (EnableUnavailableMessage)
             {
             {
                 EnableUnavailableMessage = false;
                 EnableUnavailableMessage = false;
                 _httpServer.GlobalResponse = null;
                 _httpServer.GlobalResponse = null;
                 _taskManager.QueueScheduledTask<RefreshMediaLibraryTask>();
                 _taskManager.QueueScheduledTask<RefreshMediaLibraryTask>();
             }
             }
+
+            _taskManager.SuspendTriggers = false;
         }
         }
 
 
         private void OnProgress(double newPercentCommplete)
         private void OnProgress(double newPercentCommplete)
@@ -164,12 +172,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 progress.Report(percent * 100);
                 progress.Report(percent * 100);
             }
             }
 
 
-            if (_config.Configuration.MigrationVersion < MigrationVersion)
-            {
-                _config.Configuration.MigrationVersion = MigrationVersion;
-                _config.SaveConfiguration();
-            }
-
             progress.Report(100);
             progress.Report(100);
         }
         }
 
 

+ 5 - 0
MediaBrowser.Server.Startup.Common/ApplicationHost.cs

@@ -317,6 +317,11 @@ namespace MediaBrowser.Server.Startup.Common
         /// <returns>Task.</returns>
         /// <returns>Task.</returns>
         public override async Task RunStartupTasks()
         public override async Task RunStartupTasks()
         {
         {
+            if (ServerConfigurationManager.Configuration.MigrationVersion < CleanDatabaseScheduledTask.MigrationVersion)
+            {
+                TaskManager.SuspendTriggers = true;
+            }
+            
             await base.RunStartupTasks().ConfigureAwait(false);
             await base.RunStartupTasks().ConfigureAwait(false);
 
 
             Logger.Info("ServerId: {0}", SystemId);
             Logger.Info("ServerId: {0}", SystemId);

+ 2 - 1
MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs

@@ -20,13 +20,14 @@ namespace MediaBrowser.Server.Startup.Common.Migrations
         {
         {
             if (_config.Configuration.MigrationVersion < CleanDatabaseScheduledTask.MigrationVersion)
             if (_config.Configuration.MigrationVersion < CleanDatabaseScheduledTask.MigrationVersion)
             {
             {
+                _taskManager.SuspendTriggers = true;
                 CleanDatabaseScheduledTask.EnableUnavailableMessage = true;
                 CleanDatabaseScheduledTask.EnableUnavailableMessage = true;
                 
                 
                 Task.Run(async () =>
                 Task.Run(async () =>
                 {
                 {
                     await Task.Delay(1000).ConfigureAwait(false);
                     await Task.Delay(1000).ConfigureAwait(false);
 
 
-                    _taskManager.QueueScheduledTask<CleanDatabaseScheduledTask>();
+                    _taskManager.Execute<CleanDatabaseScheduledTask>();
                 });
                 });
             }
             }
         }
         }