diff --git a/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs b/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs index 9bb6eb3f43b..0b7e89b7825 100644 --- a/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs +++ b/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs @@ -24,14 +24,19 @@ public ReminderRegistry(IServiceProvider serviceProvider, IOptions RegisterOrUpdateReminder(GrainId callingGrainId, string reminderName, TimeSpan dueTime, TimeSpan period) { - // Perform input volatility checks that are consistent with System.Threading.Timer - // http://referencesource.microsoft.com/#mscorlib/system/threading/timer.cs,c454f2afe745d4d3,references - if (dueTime.Ticks < 0 && dueTime != Timeout.InfiniteTimeSpan) + // Perform input volatility checks + if (dueTime == Timeout.InfiniteTimeSpan) + throw new ArgumentOutOfRangeException(nameof(dueTime), "Cannot use InfiniteTimeSpan dueTime to create a reminder"); + + if (dueTime.Ticks < 0) throw new ArgumentOutOfRangeException(nameof(dueTime), "Cannot use negative dueTime to create a reminder"); - - if (period.Ticks < 0 && period != Timeout.InfiniteTimeSpan) + + if (period == Timeout.InfiniteTimeSpan) + throw new ArgumentOutOfRangeException(nameof(period), "Cannot use InfiniteTimeSpan period to create a reminder"); + + if (period.Ticks < 0) throw new ArgumentOutOfRangeException(nameof(period), "Cannot use negative period to create a reminder"); - + var minReminderPeriod = options.MinimumReminderPeriod; if (period < minReminderPeriod) throw new ArgumentException($"Cannot register reminder {reminderName} as requested period ({period}) is less than minimum allowed reminder period ({minReminderPeriod})"); @@ -92,4 +97,4 @@ private static void ThrowInvalidContext() + " Ensure that you are only accessing grain functionality from within the context of a grain."); } } -} \ No newline at end of file +}