Scheduler fixes

This commit is contained in:
robvde 2013-02-02 16:18:52 +04:00
parent 932e77c770
commit 6bd68d4279
3 changed files with 65 additions and 41 deletions

View file

@ -40,9 +40,9 @@ namespace WebsitePanel.EnterpriseServer
public sealed class Scheduler public sealed class Scheduler
{ {
static SchedulerJob nextSchedule = null; public static SchedulerJob nextSchedule = null;
// main timer // main timer and put it to sleep
static Timer scheduleTimer = new Timer(new TimerCallback(RunNextSchedule), static Timer scheduleTimer = new Timer(new TimerCallback(RunNextSchedule),
null, null,
Timeout.Infinite, Timeout.Infinite,
@ -92,6 +92,8 @@ namespace WebsitePanel.EnterpriseServer
// this will put the timer to sleep // this will put the timer to sleep
scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite); scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite);
System.Threading.Thread.Sleep(1000);
// run immediately // run immediately
RunNextSchedule(null); RunNextSchedule(null);
} }
@ -121,6 +123,10 @@ namespace WebsitePanel.EnterpriseServer
} }
static void RunSchedule(SchedulerJob schedule, bool changeNextRun) static void RunSchedule(SchedulerJob schedule, bool changeNextRun)
{
try
{ {
// update next run (if required) // update next run (if required)
if (changeNextRun) if (changeNextRun)
@ -142,11 +148,23 @@ namespace WebsitePanel.EnterpriseServer
SchedulerController.UpdateSchedule(schedule.ScheduleInfo); SchedulerController.UpdateSchedule(schedule.ScheduleInfo);
// skip execution if the current task is still running // skip execution if the current task is still running
if (scheduledTasks.ContainsKey(schedule.ScheduleInfo.ScheduleId)) scheduledTasks = TaskManager.GetScheduledTasks();
return; if (!scheduledTasks.ContainsKey(schedule.ScheduleInfo.ScheduleId))
{
// run the schedule in the separate thread // run the schedule in the separate thread
schedule.Run(); schedule.Run();
} }
} }
catch (Exception Ex)
{
try
{
TaskManager.WriteError(string.Format("RunSchedule Error : {0}", Ex.Message));
}
catch (Exception)
{
}
}
}
}
} }

View file

@ -199,7 +199,7 @@ namespace WebsitePanel.EnterpriseServer
nextStart = lastRun.AddSeconds(schedule.Interval); nextStart = lastRun.AddSeconds(schedule.Interval);
} }
if(nextStart < now) if (nextStart < now)
nextStart = now; // run immediately nextStart = now; // run immediately
// check if start time is in allowed interval // check if start time is in allowed interval
@ -261,7 +261,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck; if (accountCheck < 0) return accountCheck;
// check quota // check quota
if(PackageController.GetPackageQuota(schedule.PackageId, Quotas.OS_SCHEDULEDTASKS).QuotaExhausted) if (PackageController.GetPackageQuota(schedule.PackageId, Quotas.OS_SCHEDULEDTASKS).QuotaExhausted)
return BusinessErrorCodes.ERROR_OS_SCHEDULED_TASK_QUOTA_LIMIT; return BusinessErrorCodes.ERROR_OS_SCHEDULED_TASK_QUOTA_LIMIT;
CalculateNextStartTime(schedule); CalculateNextStartTime(schedule);

View file

@ -119,8 +119,14 @@ namespace WebsitePanel.EnterpriseServer
finally finally
{ {
// complete task // complete task
try
{
TaskManager.CompleteTask(); TaskManager.CompleteTask();
} }
catch (Exception)
{
}
}
} }
} }
} }