@@ -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