Skip to content

Commit 72d06ab

Browse files
sophiatevSophia Tevosyan
andauthored
Adding a completed time for terminating a pending orchestration
Co-authored-by: Sophia Tevosyan <stevosyan@microsoft.com>
1 parent b93b187 commit 72d06ab

5 files changed

Lines changed: 22 additions & 7 deletions

File tree

src/DurableTask.AzureStorage/AzureStorageOrchestrationService.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1065,7 +1065,11 @@ async Task<string> IsExecutableInstance(OrchestrationRuntimeState runtimeState,
10651065
TaskMessage executionTerminatedEventMessage = newMessages.LastOrDefault(msg => msg.Event is ExecutionTerminatedEvent);
10661066
if (executionTerminatedEventMessage is not null)
10671067
{
1068-
await this.trackingStore.UpdateStatusForTerminationAsync(instanceId, ((ExecutionTerminatedEvent)executionTerminatedEventMessage.Event).Input);
1068+
var executionTerminatedEvent = (ExecutionTerminatedEvent)executionTerminatedEventMessage.Event;
1069+
await this.trackingStore.UpdateStatusForTerminationAsync(
1070+
instanceId,
1071+
executionTerminatedEvent.Input,
1072+
executionTerminatedEvent.Timestamp);
10691073
return $"Instance is {OrchestrationStatus.Terminated}";
10701074
}
10711075

src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -796,13 +796,18 @@ public override async Task UpdateStatusForRewindAsync(string instanceId, Cancell
796796
}
797797

798798
/// <inheritdoc />
799-
public override async Task UpdateStatusForTerminationAsync(string instanceId, string output, CancellationToken cancellationToken = default)
799+
public override async Task UpdateStatusForTerminationAsync(
800+
string instanceId,
801+
string output,
802+
DateTime lastUpdatedTime,
803+
CancellationToken cancellationToken = default)
800804
{
801805
string sanitizedInstanceId = KeySanitation.EscapePartitionKey(instanceId);
802806
TableEntity entity = new TableEntity(sanitizedInstanceId, "")
803807
{
804808
["RuntimeStatus"] = OrchestrationStatus.Terminated.ToString("G"),
805-
["LastUpdatedTime"] = DateTime.UtcNow,
809+
["LastUpdatedTime"] = lastUpdatedTime,
810+
["CompletedTime"] = DateTime.UtcNow,
806811
[OutputProperty] = output
807812
};
808813

src/DurableTask.AzureStorage/Tracking/ITrackingStore.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,9 @@ interface ITrackingStore
157157
/// </summary>
158158
/// <param name="instanceId">The instance being terminated</param>
159159
/// <param name="output">The output of the orchestration</param>
160+
/// <param name="lastUpdatedTime">The last updated time of the orchestration (the time the termination request was created)</param>
160161
/// <param name="cancellationToken">The token to monitor for cancellation requests. The default value is <see cref="CancellationToken.None"/>.</param>
161-
Task UpdateStatusForTerminationAsync(string instanceId, string output, CancellationToken cancellationToken = default);
162+
Task UpdateStatusForTerminationAsync(string instanceId, string output, DateTime lastUpdatedTime, CancellationToken cancellationToken = default);
162163

163164
/// <summary>
164165
/// Purge The History and state which is older than thresholdDateTimeUtc based on the timestamp type specified by timeRangeFilterType

src/DurableTask.AzureStorage/Tracking/InstanceStoreBackedTrackingStore.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,17 @@ await instanceStore.WriteEntitiesAsync(new InstanceEntityBase[]
177177
return null;
178178
}
179179

180-
public override async Task UpdateStatusForTerminationAsync(string instanceId, string output, CancellationToken cancellationToken = default)
180+
public override async Task UpdateStatusForTerminationAsync(
181+
string instanceId,
182+
string output,
183+
DateTime lastUpdatedTime,
184+
CancellationToken cancellationToken = default)
181185
{
182186
// Get the most recent execution and update its status to terminated
183187
IEnumerable<OrchestrationStateInstanceEntity> instanceEntity = await this.instanceStore.GetOrchestrationStateAsync(instanceId, allInstances: false);
184188
instanceEntity.Single().State.OrchestrationStatus = OrchestrationStatus.Terminated;
185-
instanceEntity.Single().State.LastUpdatedTime = DateTime.UtcNow;
189+
instanceEntity.Single().State.LastUpdatedTime = lastUpdatedTime;
190+
instanceEntity.Single().State.CompletedTime = DateTime.UtcNow;
186191
instanceEntity.Single().State.Output = output;
187192
await this.instanceStore.WriteEntitiesAsync(instanceEntity);
188193
}

src/DurableTask.AzureStorage/Tracking/TrackingStoreBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public virtual Task UpdateStatusForRewindAsync(string instanceId, CancellationTo
101101
}
102102

103103
/// <inheritdoc />
104-
public abstract Task UpdateStatusForTerminationAsync(string instanceId, string output, CancellationToken cancellationToken = default);
104+
public abstract Task UpdateStatusForTerminationAsync(string instanceId, string output, DateTime lastUpdatedTime, CancellationToken cancellationToken = default);
105105

106106
/// <inheritdoc />
107107
public abstract Task StartAsync(CancellationToken cancellationToken = default);

0 commit comments

Comments
 (0)