From a866d831efc95900de2326f09531a54a65f18ea2 Mon Sep 17 00:00:00 2001 From: vnugent Date: Sat, 8 Apr 2023 16:43:02 -0400 Subject: Expose public configuration api --- .../src/VnCacheClient.cs | 28 ++++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClient.cs') diff --git a/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClient.cs b/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClient.cs index 1e1b74c..eea2de5 100644 --- a/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClient.cs +++ b/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClient.cs @@ -33,7 +33,6 @@ using System.Security.Cryptography; using VNLib.Utils.Memory; using VNLib.Utils.Logging; -using VNLib.Utils.Extensions; using VNLib.Hashing.IdentityUtility; using VNLib.Data.Caching; using VNLib.Data.Caching.Extensions; @@ -41,7 +40,6 @@ using VNLib.Data.Caching.ObjectCache; using VNLib.Net.Messaging.FBM.Client; using VNLib.Plugins.Extensions.Loading; - namespace VNLib.Plugins.Extensions.VNCache { public interface ICacheRefreshPolicy @@ -57,7 +55,7 @@ namespace VNLib.Plugins.Extensions.VNCache [ConfigurationName(VNCacheExtensions.CACHE_CONFIG_KEY)] internal class VnCacheClient : IGlobalCacheProvider, IAsyncBackgroundWork, IAsyncConfigurable { - private readonly TimeSpan RetryInterval; + private readonly VnCacheClientConfig _config; /// /// The internal client @@ -70,20 +68,23 @@ namespace VNLib.Plugins.Extensions.VNCache public bool IsConnected { get; private set; } public VnCacheClient(PluginBase pbase, IConfigScope config) + :this( + config.Deserialze(), + pbase.IsDebug() ? pbase.Log : null + ) + {} + + public VnCacheClient(VnCacheClientConfig config, ILogProvider? debugLog) { - //Get required configuration variables - int maxMessageSize = config["max_message_size"].GetInt32(); - string? brokerAddress = config["broker_address"].GetString() ?? throw new KeyNotFoundException("Missing required configuration variable broker_address"); - RetryInterval = config["retry_interval_sec"].GetTimeSpan(TimeParseType.Seconds); - TimeSpan timeout = config["request_timeout_sec"].GetTimeSpan(TimeParseType.Seconds); + //Validate config + (config as IOnConfigValidation).Validate(); - Uri brokerUri = new(brokerAddress); + _config = config; - //Setup debug log if the plugin is in debug mode - ILogProvider? debugLog = pbase.IsDebug() ? pbase.Log : null; + Uri brokerUri = new(config.BrokerAddress); //Init the client with default settings - FBMClientConfig conf = FBMDataCacheExtensions.GetDefaultConfig(MemoryUtil.Shared, maxMessageSize, timeout, debugLog); + FBMClientConfig conf = FBMDataCacheExtensions.GetDefaultConfig(MemoryUtil.Shared, config.MaxMessageSize!.Value, config.RequestTimeout, debugLog); Client = new(conf); @@ -92,6 +93,7 @@ namespace VNLib.Plugins.Extensions.VNCache .WithBroker(brokerUri) .WithTls(brokerUri.Scheme == Uri.UriSchemeHttps); } + public virtual async Task ConfigureServiceAsync(PluginBase plugin) { @@ -152,7 +154,7 @@ namespace VNLib.Plugins.Extensions.VNCache if (servers?.Length == 0) { pluginLog.Warn("No cluster nodes found, retrying"); - await Task.Delay(RetryInterval, exitToken); + await Task.Delay(_config.RetryInterval, exitToken); continue; } -- cgit