Skip to content

Commit 8e694a0

Browse files
committed
Refactor batch processing.
1 parent af7f0d0 commit 8e694a0

File tree

1 file changed

+31
-23
lines changed

1 file changed

+31
-23
lines changed

src/tooling/docs-assembler/Cli/DeployCommands.cs

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -163,42 +163,50 @@ public async Task<int> UpdateRedirects(
163163
while (!string.IsNullOrEmpty(listKeysResponse.NextToken));
164164

165165
var toPut = sourcedRedirects
166-
.Select(kvp => new PutKeyRequestListItem { Key = kvp.Key, Value = kvp.Value })
167-
.ToList();
166+
.Select(kvp => new PutKeyRequestListItem { Key = kvp.Key, Value = kvp.Value });
168167
var toDelete = existingRedirects
169168
.Except(sourcedRedirects.Keys)
170-
.Select(k => new DeleteKeyRequestListItem { Key = k })
171-
.ToList();
169+
.Select(k => new DeleteKeyRequestListItem { Key = k });
172170

173171
ConsoleApp.Log("Updating redirects in KVS");
174172
const int batchSize = 500;
175173

176-
for (var i = 0; i < toPut.Count; i += batchSize)
177-
{
178-
var batch = toPut.Skip(i).Take(batchSize).ToList();
179-
var update = await kvsClient.UpdateKeysAsync(new UpdateKeysRequest
180-
{
181-
KvsARN = kvsArn,
182-
IfMatch = eTag,
183-
Puts = batch
184-
}, ctx);
185-
eTag = update.ETag;
186-
}
174+
eTag = await ProcessBatchUpdatesAsync(kvsClient, kvsArn, eTag, toPut, batchSize, "Puts", ctx);
175+
_ = await ProcessBatchUpdatesAsync(kvsClient, kvsArn, eTag, toDelete, batchSize, "Deletes", ctx);
176+
177+
await collector.StopAsync(ctx);
178+
return collector.Errors;
179+
}
187180

188-
for (var i = 0; i < toDelete.Count; i += batchSize)
181+
private static async Task<string> ProcessBatchUpdatesAsync(
182+
IAmazonCloudFrontKeyValueStore kvsClient,
183+
string kvsArn,
184+
string eTag,
185+
IEnumerable<object> items,
186+
int batchSize,
187+
string operation,
188+
Cancel ctx)
189+
{
190+
var enumerable = items.ToList();
191+
for (var i = 0; i < enumerable.Count; i += batchSize)
189192
{
190-
var batch = toDelete.Skip(i).Take(batchSize).ToList();
191-
var update = await kvsClient.UpdateKeysAsync(new UpdateKeysRequest
193+
var batch = enumerable.Skip(i).Take(batchSize);
194+
var updateRequest = new UpdateKeysRequest
192195
{
193196
KvsARN = kvsArn,
194-
IfMatch = eTag,
195-
Deletes = batch
196-
}, ctx);
197+
IfMatch = eTag
198+
};
199+
200+
if (operation.Equals("Puts", StringComparison.InvariantCulture))
201+
updateRequest.Puts = batch.Cast<PutKeyRequestListItem>().ToList();
202+
else if (operation.Equals("Deletes", StringComparison.InvariantCulture))
203+
updateRequest.Deletes = batch.Cast<DeleteKeyRequestListItem>().ToList();
204+
205+
var update = await kvsClient.UpdateKeysAsync(updateRequest, ctx);
197206
eTag = update.ETag;
198207
}
199208

200-
await collector.StopAsync(ctx);
201-
return collector.Errors;
209+
return eTag;
202210
}
203211

204212
}

0 commit comments

Comments
 (0)