From b2d9fb43b218d2d81c915ba91e3bfad7a20eaa77 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 24 May 2013 17:47:39 +0300 Subject: [PATCH] Testing and fixing scheduler --- WebsitePanel/Database/update_db.sql | 33 +++++++------------ .../Tasks/BackgroundTask.cs | 12 ++++++- .../Data/DataProvider.cs | 5 +-- .../Scheduling/SchedulerController.cs | 8 ++--- .../Scheduling/SchedulerJob.cs | 2 +- .../Tasks/TaskController.cs | 27 +++++---------- .../Tasks/TaskManager.cs | 8 ++--- 7 files changed, 44 insertions(+), 51 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 862368bd..5ea6fef1 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -1,18 +1,4 @@ -USE [${install.database}] -GO - --- update database version -DECLARE @build_version nvarchar(10), @build_date datetime -SET @build_version = N'${release.version}' -SET @build_date = '${release.date}T00:00:00' -- ISO 8601 Format (YYYY-MM-DDTHH:MM:SS) - -IF NOT EXISTS (SELECT * FROM [dbo].[Versions] WHERE [DatabaseVersion] = @build_version) -BEGIN - INSERT [dbo].[Versions] ([DatabaseVersion], [BuildDate]) VALUES (@build_version, @build_date) -END -GO - - + --- Fix on version 2.0 DELETE FROM HostingPlanQuotas WHERE QuotaID = 340 GO @@ -861,6 +847,7 @@ CREATE TABLE BackgroundTaskParameters TaskID INT NOT NULL, Name NVARCHAR(255), SerializerValue NTEXT, + TypeName NVARCHAR(255), FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID) ) GO @@ -1074,7 +1061,7 @@ SELECT FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.UserID = @ActorID AND T.Guid = @Guid +WHERE T.EffectiveUserID = @ActorID AND T.Guid = @Guid GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTopTask') @@ -1112,7 +1099,7 @@ SELECT TOP 1 FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.UserID = @ActorID AND T.Guid = @Guid +WHERE T.EffectiveUserID = @ActorID AND T.Guid = @Guid ORDER BY T.StartDate DESC GO @@ -1241,7 +1228,8 @@ SELECT P.ParameterID, P.TaskID, P.Name, - P.SerializerValue + P.SerializerValue, + P.TypeName FROM BackgroundTaskParameters AS P WHERE P.TaskID = @TaskID GO @@ -1254,7 +1242,8 @@ CREATE PROCEDURE [dbo].[AddBackgroundTaskParam] ( @TaskID INT, @Name NVARCHAR(255), - @Value NTEXT + @Value NTEXT, + @TypeName NVARCHAR(255) ) AS @@ -1262,13 +1251,15 @@ INSERT INTO BackgroundTaskParameters ( TaskID, Name, - SerializerValue + SerializerValue, + TypeName ) VALUES ( @TaskID, @Name, - @Value + @Value, + @TypeName ) GO diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index 6b741c18..9529583e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -39,6 +39,12 @@ namespace WebsitePanel.EnterpriseServer public class BackgroundTask { + #region Fields + + private List parameters; + + #endregion + #region Properties public int Id { get; set; } @@ -83,7 +89,11 @@ namespace WebsitePanel.EnterpriseServer public List Logs { get; set; } - public List Params { get; set; } + public List Params + { + get { return parameters ?? (parameters = new List()); } + set { parameters = value; } + } #endregion diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 85df4b3f..60ad233e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1976,13 +1976,14 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } - public static void AddBackgroundTaskParam(int taskId, string name, string value) + public static void AddBackgroundTaskParam(int taskId, string name, string value, string typeName) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "AddBackgroundTaskParam", new SqlParameter("@taskId", taskId), new SqlParameter("@name", name), - new SqlParameter("@value", value)); + new SqlParameter("@value", value), + new SqlParameter("@typeName", typeName)); } public static void DeleteBackgroundTaskParams(int taskId) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 1a2c354a..02298569 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -152,10 +152,10 @@ namespace WebsitePanel.EnterpriseServer { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - + if (accountCheck < 0) return accountCheck; - + SchedulerJob schedule = GetScheduleComplete(scheduleId); if (schedule == null) return 0; @@ -177,9 +177,9 @@ namespace WebsitePanel.EnterpriseServer schedule.ScheduleInfo.MaxExecutionTime, parameters) { Status = BackgroundTaskStatus.Starting }; TaskController.AddTask(backgroundTask); - + return 0; - } + } public static int StopSchedule(int scheduleId) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index a1053325..7475b76c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs @@ -109,7 +109,7 @@ namespace WebsitePanel.EnterpriseServer objTask.DoWork(); else throw new Exception(String.Format("Could not create scheduled task of '{0}' type", - task.TaskType)); + task.TaskType)); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index d3ece14a..cf6dac63 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -88,15 +88,10 @@ namespace WebsitePanel.EnterpriseServer } public static void AddTaskParams(int taskId, List parameters) - { - if (parameters == null) - { - return; - } - + { foreach (BackgroundTaskParameter param in SerializeParams(parameters)) { - DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue); + DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue, param.TypeName); } } @@ -131,9 +126,10 @@ namespace WebsitePanel.EnterpriseServer { foreach (BackgroundTaskParameter param in parameters) { - param.TypeName = param.Value.GetType().Name; + var type = param.Value.GetType(); + param.TypeName = type.FullName; - XmlSerializer serializer = new XmlSerializer(Type.GetType(param.TypeName)); + XmlSerializer serializer = new XmlSerializer(type); MemoryStream ms = new MemoryStream(); serializer.Serialize(ms, param.Value); @@ -178,22 +174,17 @@ namespace WebsitePanel.EnterpriseServer private static string[] ReBuildParametersXml(string parameters) { - string[] textParameters = new string[] {}; + var textParameters = new List(); - XmlDocument xmlDoc = new XmlDocument(); + var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(parameters); if (xmlDoc != null) { - int index = 0; - foreach (XmlNode xmlParameter in xmlDoc.SelectNodes("parameters/parameter")) - { - textParameters[index] = xmlParameter.Attributes.GetNamedItem("value").Value; - index++; - } + textParameters.AddRange(from XmlNode xmlParameter in xmlDoc.SelectNodes("parameters/parameter") select xmlParameter.Attributes.GetNamedItem("value").Value); } - return textParameters; + return textParameters.ToArray(); } } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 1c6143dc..c0e0d083 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -141,7 +141,7 @@ namespace WebsitePanel.EnterpriseServer public static void StartTask(string source, string taskName, object itemName, int itemId, int scheduleId, int packageId, int maximumExecutionTime, List parameters) { - StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, new List()); + StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, parameters); } public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId, @@ -152,8 +152,8 @@ namespace WebsitePanel.EnterpriseServer taskId = Guid.NewGuid().ToString("N"); } - int userId = SecurityContext.User.UserId; - int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : userId; + int userId = SecurityContext.User.OwnerId; + int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : SecurityContext.User.UserId; String itemNameStr = itemName != null ? itemName.ToString() : String.Empty; BackgroundTask task = new BackgroundTask(Guid, taskId, userId, effectiveUserId, source, taskName, itemNameStr, @@ -595,7 +595,7 @@ namespace WebsitePanel.EnterpriseServer // get user tasks foreach (BackgroundTask task in TaskController.GetTasks()) { - if (task.EffectiveUserId == userId && !task.Completed) + if (task.UserId == userId && !task.Completed) list.Add(task); } return list;