public void StoreJob(IScheduledJob job, bool replaceExisting) { JobWrapper jobWrapper = new JobWrapper(job); bool replace = false; lock (_jobLock) { if (_jobsDictionary[jobWrapper.Name] != null) { if (!replaceExisting) { throw new ArgumentException("job"); } replace = true; } if (!replace) { _jobsDictionary[jobWrapper.Name] = jobWrapper; } else { // update job detail JobWrapper orig = _jobsDictionary[jobWrapper.Name] as JobWrapper; orig.Job = jobWrapper.Job; } } }
public IScheduledJob RetrieveJob(string jobName) { lock (_jobsDictionary) { JobWrapper jw = _jobsDictionary[jobName] as JobWrapper; return((jw != null) ? jw.Job : null); } }
public void TriggeredJobComplete(Trigger trigger, IScheduledJob job, SchedulerInstruction triggerInstCode) { lock (_triggerLock) { JobWrapper jw = _jobsDictionary[job.Name] as JobWrapper; TriggerWrapper tw = _triggersDictionary[trigger.Name] as TriggerWrapper; // even if it was deleted, there may be cleanup to do _blockedJobs.Remove(job.Name); // check for trigger deleted during execution... if (tw != null) { if (triggerInstCode == SchedulerInstruction.DeleteTrigger) { //log.Debug("Deleting trigger"); NullableDateTime d = trigger.GetNextFireTimeUtc(); if (!d.HasValue) { // double check for possible reschedule within job // execution, which would cancel the need to delete... d = tw.Trigger.GetNextFireTimeUtc(); if (!d.HasValue) { RemoveTrigger(trigger.Name); } else { log.Debug("Deleting cancelled - trigger still active"); } } else { RemoveTrigger(trigger.Name); } } else if (triggerInstCode == SchedulerInstruction.SetTriggerComplete) { tw.State = InternalTriggerState.Complete; _timeTriggers.Remove(tw); } else if (triggerInstCode == SchedulerInstruction.SetTriggerError) { log.Info(string.Format(CultureInfo.InvariantCulture, "Trigger {0} set to ERROR state.", trigger.Name)); tw.State = InternalTriggerState.Error; } else if (triggerInstCode == SchedulerInstruction.SetAllJobTriggersError) { log.Info(string.Format(CultureInfo.InvariantCulture, "All triggers of Job {0} set to ERROR state.", trigger.Name)); SetAllTriggersOfJobToState(trigger.Name, InternalTriggerState.Error); } else if (triggerInstCode == SchedulerInstruction.SetAllJobTriggersComplete) { SetAllTriggersOfJobToState(trigger.Name, InternalTriggerState.Complete); } } } }
public override bool Equals(object obj) { if (obj is JobWrapper) { JobWrapper jw = (JobWrapper)obj; if (jw._job.Equals(_job)) { return(true); } } return(false); }
public bool RemoveTrigger(string triggerName, bool deleteOrphanedJob) { bool found; lock (_triggerLock) { // remove from triggers object tempObject; tempObject = _triggersDictionary[triggerName]; _triggersDictionary.Remove(triggerName); found = (tempObject == null) ? false : true; if (found) { TriggerWrapper tw = null; // remove from triggers array for (int i = 0; i < _triggers.Count; ++i) { tw = _triggers[i] as TriggerWrapper; if (triggerName.Equals(tw.Name)) { _triggers.RemoveAt(i); break; } } _timeTriggers.Remove(tw); JobWrapper jw = _jobsDictionary[tw.Trigger.JobName] as JobWrapper; Trigger[] triggers = GetTriggersForJob(tw.Trigger.JobName); if ((triggers == null || triggers.Length == 0) && deleteOrphanedJob) { RemoveJob(tw.Trigger.JobName); } } } return(found); }