Skip to content

Commit

Permalink
Fix exception while collecting activations when activation.KeepAliveU…
Browse files Browse the repository at this point in the history
…ntil = DateTime.MaxValue (#8740)

Co-authored-by: boris.nichvolodov <boris.nichvolodov@my.games>
  • Loading branch information
nichvolodov and nichvolodovboris committed Nov 29, 2023
1 parent e115a90 commit 01366de
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions src/Orleans.Runtime/Catalog/ActivationCollector.cs
Expand Up @@ -85,7 +85,7 @@ public int GetNumRecentlyUsed(TimeSpan recencyPeriod)
/// <param name="timeout">
/// The current idle collection time for the grain.
/// </param>
public void ScheduleCollection(ICollectibleGrainContext item, TimeSpan timeout)
public void ScheduleCollection(ICollectibleGrainContext item, TimeSpan timeout, DateTime now)
{
lock (item)
{
Expand All @@ -94,7 +94,7 @@ public void ScheduleCollection(ICollectibleGrainContext item, TimeSpan timeout)
return;
}

DateTime ticket = MakeTicketFromTimeSpan(timeout);
DateTime ticket = MakeTicketFromTimeSpan(timeout, now);

if (default != item.CollectionTicket)
{
Expand Down Expand Up @@ -154,7 +154,7 @@ private bool TryRescheduleCollection_Impl(ICollectibleGrainContext item, TimeSpa
if (IsExpired(item.CollectionTicket)) return false;

DateTime oldTicket = item.CollectionTicket;
DateTime newTicket = MakeTicketFromTimeSpan(timeout);
DateTime newTicket = MakeTicketFromTimeSpan(timeout, DateTime.UtcNow);
// if the ticket value doesn't change, then the source and destination bucket are the same and there's nothing to do.
if (newTicket.Equals(oldTicket)) return true;

Expand Down Expand Up @@ -239,11 +239,11 @@ public List<ICollectibleGrainContext> ScanStale()
{
var keepAliveDuration = activation.KeepAliveUntil - now;
var timeout = TimeSpan.FromTicks(Math.Max(keepAliveDuration.Ticks, activation.CollectionAgeLimit.Ticks));
ScheduleCollection(activation, timeout);
ScheduleCollection(activation, timeout, now);
}
else if (!activation.IsInactive || !activation.IsStale())
{
ScheduleCollection(activation, activation.CollectionAgeLimit);
ScheduleCollection(activation, activation.CollectionAgeLimit, now);
}
else
{
Expand Down Expand Up @@ -354,14 +354,14 @@ private DateTime MakeTicketFromDateTime(DateTime timestamp)
return ticket;
}

private DateTime MakeTicketFromTimeSpan(TimeSpan timeout)
private DateTime MakeTicketFromTimeSpan(TimeSpan timeout, DateTime now)
{
if (timeout < quantum)
{
throw new ArgumentException(string.Format("timeout must be at least {0}, but it is {1}", quantum, timeout), nameof(timeout));
}

return MakeTicketFromDateTime(DateTime.UtcNow + timeout);
return MakeTicketFromDateTime(now + timeout);
}

private void Add(ICollectibleGrainContext item, DateTime ticket)
Expand All @@ -379,7 +379,7 @@ void IActivationWorkingSetObserver.OnAdded(IActivationWorkingSetMember member)
{
if (activation.CollectionTicket == default)
{
ScheduleCollection(activation, activation.CollectionAgeLimit);
ScheduleCollection(activation, activation.CollectionAgeLimit, DateTime.UtcNow);
}
else
{
Expand Down

0 comments on commit 01366de

Please sign in to comment.