From da5b913bb9d6356f5cb9a07e571d4d54bea21ff5 Mon Sep 17 00:00:00 2001 From: dudu Date: Fri, 21 Sep 2018 17:33:22 +0800 Subject: [PATCH 1/3] Resolve hostname to IP address in MemcachedClientConfiguration --- .../MemcachedClientConfiguration.cs | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs b/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs index bc7ee2ee..7ac0293d 100755 --- a/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs +++ b/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs @@ -7,6 +7,8 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.Extensions.Configuration; +using System.Linq; +using System.Net.Sockets; namespace Enyim.Caching.Configuration { @@ -41,23 +43,19 @@ public MemcachedClientConfiguration( var options = optionsAccessor.Value; if ((options == null || options.Servers.Count == 0) && configuration != null) { - var section = configuration.GetSection("enyimMemcached"); + var section = configuration.GetSection("enyimMemcached"); if (section.Exists()) { - section.Bind(options); + section.Bind(options); } else { _logger.LogWarning($"No enyimMemcached setting in appsetting.json. Use default configuration"); options.AddDefaultServer(); - } + } } - Servers = new List(); - foreach (var server in options.Servers) - { - Servers.Add(new DnsEndPoint(server.Address, server.Port)); - } + ConfigureServers(options); SocketPool = new SocketPoolConfiguration(); if (options.SocketPool != null) @@ -172,6 +170,35 @@ public MemcachedClientConfiguration( } } + private void ConfigureServers(MemcachedClientOptions options) + { + Servers = new List(); + foreach (var server in options.Servers) + { + if (!IPAddress.TryParse(server.Address, out var address)) + { + var ip = Dns.GetHostAddresses(server.Address) + .FirstOrDefault(i => i.AddressFamily == AddressFamily.InterNetwork)?.ToString(); + + if (ip == null) + { + _logger.LogError($"Could not resolve host '{server.Address}'."); + } + else + { + _logger.LogInformation($"Memcached server address - {server.Address }({ip}):{server.Port}"); + server.Address = ip; + } + } + else + { + _logger.LogInformation($"Memcached server address - {server.Address }:{server.Port}"); + } + + Servers.Add(new DnsEndPoint(server.Address, server.Port)); + } + } + /// /// Adds a new server to the pool. /// From e8a40ec3195fb2a465c39e752117971d526f30bf Mon Sep 17 00:00:00 2001 From: dudu Date: Fri, 21 Sep 2018 17:34:04 +0800 Subject: [PATCH 2/3] Change log level in tests --- MemcachedTest/MemcachedClientTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MemcachedTest/MemcachedClientTest.cs b/MemcachedTest/MemcachedClientTest.cs index 15fa5780..ce9f2de6 100755 --- a/MemcachedTest/MemcachedClientTest.cs +++ b/MemcachedTest/MemcachedClientTest.cs @@ -34,7 +34,7 @@ protected virtual MemcachedClient GetClient(MemcachedProtocol protocol = Memcach services.AddSingleton(); } - services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Debug).AddConsole()); + services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Information).AddConsole()); IServiceProvider serviceProvider = services.BuildServiceProvider(); var client = serviceProvider.GetService() as MemcachedClient; From 516145b6f397b230da343d04b35d1bf6444fdf1e Mon Sep 17 00:00:00 2001 From: dudu Date: Fri, 21 Sep 2018 17:35:08 +0800 Subject: [PATCH 3/3] Tweak services.AddEnyimMemcached() and app.UseEnyimMemcached() --- ...EnyimMemcachedApplicationBuilderExtensions.cs | 16 ++++++++++------ .../EnyimMemcachedServiceCollectionExtensions.cs | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs b/Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs index f413a8c8..cf7ec189 100644 --- a/Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs +++ b/Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs @@ -5,6 +5,8 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Enyim.Caching.Configuration; +using Enyim.Caching.Memcached; namespace Microsoft.AspNetCore.Builder { @@ -12,16 +14,18 @@ public static class EnyimMemcachedApplicationBuilderExtensions { public static IApplicationBuilder UseEnyimMemcached(this IApplicationBuilder app) { + var logger = app.ApplicationServices.GetService>(); try { - app.ApplicationServices.GetService() - .GetAsync("EnyimMemcached").Wait(); - Console.WriteLine("EnyimMemcached Started."); - } catch (Exception ex) + var client = app.ApplicationServices.GetRequiredService(); + client.GetValueAsync("UseEnyimMemcached").Wait(); + Console.WriteLine("EnyimMemcached connected memcached servers."); + } + catch (Exception ex) { - app.ApplicationServices.GetService>() - .LogError(new EventId(), ex, "EnyimMemcached Failed."); + logger.LogError(ex, "Failed in UseEnyimMemcached"); } + return app; } } diff --git a/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs b/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs index c83fab53..60dcb804 100644 --- a/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs +++ b/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs @@ -86,7 +86,7 @@ private static IServiceCollection AddEnyimMemcachedInternal(IServiceCollection s services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddTransient(); - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(factory => factory.GetService()); services.AddSingleton(factory => factory.GetService());