Browse Source

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

Removed the catch with retry logic from CatalogContextSeed
pull/119/merge
Cesar De la Torre 8 years ago
committed by GitHub
parent
commit
b1b7ca5a4c
2 changed files with 47 additions and 36 deletions
  1. +20
    -34
      src/Services/Catalog/Catalog.API/Infrastructure/CatalogContextSeed.cs
  2. +27
    -2
      src/Services/Catalog/Catalog.API/Startup.cs

+ 20
- 34
src/Services/Catalog/Catalog.API/Infrastructure/CatalogContextSeed.cs View File

@ -13,47 +13,33 @@
{ {
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
.ApplicationServices.GetService(typeof(CatalogContext));
context.Database.Migrate();
var context = (CatalogContext)applicationBuilder
.ApplicationServices.GetService(typeof(CatalogContext));
if (!context.CatalogBrands.Any())
{
context.CatalogBrands.AddRange(
GetPreconfiguredCatalogBrands());
context.Database.Migrate();
await context.SaveChangesAsync();
}
if (!context.CatalogTypes.Any())
{
context.CatalogTypes.AddRange(
GetPreconfiguredCatalogTypes());
if (!context.CatalogBrands.Any())
{
context.CatalogBrands.AddRange(
GetPreconfiguredCatalogBrands());
await context.SaveChangesAsync();
}
await context.SaveChangesAsync();
}
if (!context.CatalogItems.Any())
{
context.CatalogItems.AddRange(
GetPreconfiguredItems());
if (!context.CatalogTypes.Any())
{
context.CatalogTypes.AddRange(
GetPreconfiguredCatalogTypes());
await context.SaveChangesAsync();
}
await context.SaveChangesAsync();
} }
catch (Exception ex)
if (!context.CatalogItems.Any())
{ {
if (retryForAvaiability < 10)
{
retryForAvaiability++;
var log = loggerFactory.CreateLogger("catalog seed");
log.LogError(ex.Message);
await SeedAsync(applicationBuilder, loggerFactory, retryForAvaiability);
}
context.CatalogItems.AddRange(
GetPreconfiguredItems());
await context.SaveChangesAsync();
} }
} }


+ 27
- 2
src/Services/Catalog/Catalog.API/Startup.cs 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();
}
} }
} }
} }

Loading…
Cancel
Save