From ce8e3f5c296042e99620f386ac46e276522e3f1a Mon Sep 17 00:00:00 2001 From: Jerremy Koot Date: Thu, 9 Oct 2025 11:54:19 +0200 Subject: [PATCH 1/2] Timeout.InfiniteTimeSpan is not allowed for reminders --- .../ReminderService/ReminderRegistry.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs b/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs index 9bb6eb3f43b..691c630b30c 100644 --- a/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs +++ b/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs @@ -24,12 +24,11 @@ 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.Ticks < 0) throw new ArgumentOutOfRangeException(nameof(dueTime), "Cannot use negative dueTime to create a reminder"); - if (period.Ticks < 0 && period != Timeout.InfiniteTimeSpan) + if (period.Ticks < 0) throw new ArgumentOutOfRangeException(nameof(period), "Cannot use negative period to create a reminder"); var minReminderPeriod = options.MinimumReminderPeriod; @@ -92,4 +91,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 +} From 178a0835bfda7cbc0ecf2643e84786ed745bd060 Mon Sep 17 00:00:00 2001 From: Jerremy Koot Date: Thu, 9 Oct 2025 12:02:41 +0200 Subject: [PATCH 2/2] Specifically check for InfiniteTimeSpan to make clear it's usage is not allowed (and to allow for an eventual future change of the InfiniteTimeSpan value) --- .../ReminderService/ReminderRegistry.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs b/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs index 691c630b30c..0b7e89b7825 100644 --- a/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs +++ b/src/Orleans.Reminders/ReminderService/ReminderRegistry.cs @@ -25,12 +25,18 @@ public ReminderRegistry(IServiceProvider serviceProvider, IOptions RegisterOrUpdateReminder(GrainId callingGrainId, string reminderName, TimeSpan dueTime, TimeSpan period) { // 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 == 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})");