@@ -247,34 +247,42 @@ private void EvaluateRecurringTriggers()
247247 {
248248 lock ( _evaluateTriggersLock )
249249 {
250- // Re-evaluate recurring triggers every n seconds
251- var activeTriggers = _jobbrRepository . GetActiveTriggers ( pageSize : int . MaxValue ) . Items . Where ( t => t . GetType ( ) == typeof ( RecurringTrigger ) ) ;
252-
253- var additionalItems = new List < ScheduledPlanItem > ( ) ;
254-
255- foreach ( var trigger in activeTriggers . Cast < RecurringTrigger > ( ) )
250+ try
256251 {
257- var planResult = GetPlanResult ( trigger , false ) ;
252+ // Re-evaluate recurring triggers every n seconds
253+ var activeTriggers = _jobbrRepository . GetActiveTriggers ( pageSize : int . MaxValue ) . Items . Where ( t => t . GetType ( ) == typeof ( RecurringTrigger ) ) ;
258254
259- if ( planResult . Action == PlanAction . Possible )
255+ var additionalItems = new List < ScheduledPlanItem > ( ) ;
256+
257+ foreach ( var trigger in activeTriggers . Cast < RecurringTrigger > ( ) )
260258 {
261- // Check if there is already a run planned at this time
262- var nextRunForTrigger = _jobbrRepository . GetNextJobRunByTriggerId ( trigger . JobId , trigger . Id , _dateTimeProvider . GetUtcNow ( ) ) ;
259+ var planResult = GetPlanResult ( trigger , false ) ;
263260
264- if ( nextRunForTrigger == null || ! nextRunForTrigger . PlannedStartDateTimeUtc . Equals ( planResult . ExpectedStartDateUtc ) )
261+ if ( planResult . Action == PlanAction . Possible )
265262 {
266- var scheduledItem = CreateNew ( planResult , trigger ) ;
267- additionalItems . Add ( scheduledItem ) ;
263+ // Check if there is already a run planned at this time
264+ var nextRunForTrigger = _jobbrRepository . GetNextJobRunByTriggerId ( trigger . JobId , trigger . Id , _dateTimeProvider . GetUtcNow ( ) ) ;
265+
266+ if ( nextRunForTrigger == null || ! nextRunForTrigger . PlannedStartDateTimeUtc . Equals ( planResult . ExpectedStartDateUtc ) )
267+ {
268+ var scheduledItem = CreateNew ( planResult , trigger ) ;
269+ additionalItems . Add ( scheduledItem ) ;
270+ }
268271 }
269272 }
270- }
271273
272- if ( additionalItems . Any ( ) )
273- {
274- _logger . LogInformation ( "The re-evaluation of recurring triggers caused the addition of {itemCount} scheduled items" , additionalItems . Count ) ;
275- _currentPlan . AddRange ( additionalItems ) ;
274+ if ( additionalItems . Any ( ) )
275+ {
276+ _logger . LogInformation ( "The re-evaluation of recurring triggers caused the addition of {itemCount} scheduled items" , additionalItems . Count ) ;
277+ _currentPlan . AddRange ( additionalItems ) ;
276278
277- PublishCurrentPlan ( ) ;
279+ PublishCurrentPlan ( ) ;
280+ }
281+ }
282+ catch ( Exception e )
283+ {
284+ // Internal error (e.g. DB access failure) in recurring trigger execution should not tear down Jobbr
285+ _logger . LogError ( e , "Gathering information or executing of the recurring trigger failed" ) ;
278286 }
279287 }
280288 }
0 commit comments