in CosmosClone/CosmosCloneCommon/Migrator/CodeMigrator.cs [168:207]
private async Task CopyStoredProcedures()
{
try
{
logger.LogInfo("-----------------------------------------------");
logger.LogInfo("Begin CopyStoredProcedures");
FeedOptions feedOptions = new FeedOptions { MaxItemCount = -1, EnableCrossPartitionQuery = true };
var requestOptions = new RequestOptions { OfferEnableRUPerMinuteThroughput = true };
var sourceResponse = await sourceClient.ReadStoredProcedureFeedAsync(UriFactory.CreateDocumentCollectionUri(sourceDatabaseName, sourceCollectionName), feedOptions);
var splist = sourceResponse.ToList<StoredProcedure>();
logger.LogInfo($"StoredProcedures retrieved from source {splist.Count}");
//summary.totalRecordsRetrieved += splist.Count;
var targetResponse = await targetClient.ReadStoredProcedureFeedAsync(UriFactory.CreateDocumentCollectionUri(TargetDatabaseName, TargetCollectionName), feedOptions);
var targetSPList = targetResponse.ToList();
logger.LogInfo($"StoredProcedures already retrieved in target {targetSPList.Count}");
var targetSPIds = new HashSet<string>();
targetSPList.ForEach(sp => targetSPIds.Add(sp.Id));
foreach (var sp in splist)
{
if (targetSPIds.Contains(sp.Id))
{
logger.LogInfo($"StoredProcedure {sp.Id} already Exists in destination DB");
continue;
}
logger.LogInfo($"Create StoredProcedure {sp.Id} start");
await targetClient.CreateStoredProcedureAsync(UriFactory.CreateDocumentCollectionUri(TargetDatabaseName, TargetCollectionName), sp, requestOptions);
logger.LogInfo($"Create StoredProcedure {sp.Id} complete");
//summary.totalRecordsSent++;
}
logger.LogInfo("CopyStoredProcedures end.");
}
catch (Exception ex)
{
logger.LogInfo("Exception while CopyStoredProcedures");
logger.LogError(ex);
logger.LogInfo("");
}
}