Merge pull request #122 from dotnet/bugs/#75-NoRetryLoginAtCatch

Removed the catch with retry logic from CatalogContextSeed
This commit is contained in:
Cesar De la Torre 2017-03-20 10:49:34 -07:00 committed by GitHub
commit b1b7ca5a4c
2 changed files with 50 additions and 39 deletions

View File

@ -12,9 +12,6 @@
public class CatalogContextSeed public class CatalogContextSeed
{ {
public static async Task SeedAsync(IApplicationBuilder applicationBuilder, ILoggerFactory loggerFactory, int? retry = 0) public static async Task SeedAsync(IApplicationBuilder applicationBuilder, ILoggerFactory loggerFactory, int? retry = 0)
{
int retryForAvaiability = retry.Value;
try
{ {
var context = (CatalogContext)applicationBuilder var context = (CatalogContext)applicationBuilder
.ApplicationServices.GetService(typeof(CatalogContext)); .ApplicationServices.GetService(typeof(CatalogContext));
@ -45,17 +42,6 @@
await context.SaveChangesAsync(); await context.SaveChangesAsync();
} }
} }
catch (Exception ex)
{
if (retryForAvaiability < 10)
{
retryForAvaiability++;
var log = loggerFactory.CreateLogger("catalog seed");
log.LogError(ex.Message);
await SeedAsync(applicationBuilder, loggerFactory, retryForAvaiability);
}
}
}
static IEnumerable<CatalogBrand> GetPreconfiguredCatalogBrands() static IEnumerable<CatalogBrand> GetPreconfiguredCatalogBrands()
{ {

View File

@ -11,6 +11,7 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System; using System;
using System.Data.SqlClient;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;
@ -95,11 +96,35 @@
app.UseSwagger() app.UseSwagger()
.UseSwaggerUi(); .UseSwaggerUi();
var context = (CatalogContext)app
.ApplicationServices.GetService(typeof(CatalogContext));
WaitForSqlAvailability(context, loggerFactory);
//Seed Data //Seed Data
CatalogContextSeed.SeedAsync(app, loggerFactory) CatalogContextSeed.SeedAsync(app, loggerFactory)
.Wait(); .Wait();
}
private void WaitForSqlAvailability(CatalogContext ctx, ILoggerFactory loggerFactory, int? retry = 0)
{
int retryForAvailability = retry.Value;
try
{
ctx.Database.OpenConnection();
}
catch(SqlException ex)
{
if (retryForAvailability < 10)
{
retryForAvailability++;
var log = loggerFactory.CreateLogger(nameof(Startup));
log.LogError(ex.Message);
WaitForSqlAvailability(ctx, loggerFactory, retryForAvailability);
}
}
finally {
ctx.Database.CloseConnection();
}
} }
} }
} }