in code/KustoCopyConsole/Runner/MainRunner.cs [144:190]
private void EnsureIteration(ActivityParameterization activityParam)
{
if (activityParam.TableOption.ExportMode != ExportMode.BackfillOnly)
{
throw new NotSupportedException(
$"'{activityParam.TableOption.ExportMode}' isn't supported yet");
}
var cache = RowItemGateway.InMemoryCache;
var cachedIterations = cache.ActivityMap.ContainsKey(activityParam.ActivityName)
? cache.ActivityMap[activityParam.ActivityName].IterationMap.Values
: Array.Empty<IterationCache>();
var completedIterations = cachedIterations
.Select(c => c.RowItem)
.Where(i => i.State == IterationState.Completed);
var activeIterations = cachedIterations
.Select(c => c.RowItem)
.Where(i => i.State != IterationState.Completed);
var isBackfillOnly =
activityParam.TableOption.ExportMode == ExportMode.BackfillOnly;
// Start new iteration if need to
if (!cachedIterations.Any())
{
var lastIteration = cachedIterations.Any()
? cachedIterations.ArgMax(i => i.RowItem.IterationId).RowItem
: null;
var newIterationId = lastIteration != null
? lastIteration.IterationId + 1
: 1;
var cursorStart = lastIteration != null
? lastIteration.CursorEnd
: string.Empty;
var newIterationItem = new IterationRowItem
{
State = IterationState.Starting,
ActivityName = activityParam.ActivityName,
IterationId = newIterationId,
CursorStart = cursorStart,
CursorEnd = string.Empty
};
var iterationKey = newIterationItem.GetIterationKey();
RowItemGateway.Append(newIterationItem);
DisplayIteration(newIterationItem, true);
}
}