From 58a89581f31ecf3540c7087c11982cf81bb73b0d Mon Sep 17 00:00:00 2001 From: kt81 Date: Thu, 11 Apr 2019 18:05:12 +0900 Subject: [PATCH] Make DefaultNodeLocator take the ServerAddressMutations as a parameter --- .../Memcached/Locators/DefaultNodeLocator.cs | 15 +++++++---- .../Factories/DefaultNodeLocatorFactory.cs | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 Enyim.Caching/Memcached/Locators/Factories/DefaultNodeLocatorFactory.cs diff --git a/Enyim.Caching/Memcached/Locators/DefaultNodeLocator.cs b/Enyim.Caching/Memcached/Locators/DefaultNodeLocator.cs index 64d5aef0..a000c53a 100644 --- a/Enyim.Caching/Memcached/Locators/DefaultNodeLocator.cs +++ b/Enyim.Caching/Memcached/Locators/DefaultNodeLocator.cs @@ -11,7 +11,7 @@ namespace Enyim.Caching.Memcached /// public sealed class DefaultNodeLocator : IMemcachedNodeLocator, IDisposable { - private const int ServerAddressMutations = 100; + private readonly int serverAddressMutations; // holds all server keys for mapping an item key to the server consistently private uint[] keys; @@ -21,23 +21,28 @@ public sealed class DefaultNodeLocator : IMemcachedNodeLocator, IDisposable private List allServers; private ReaderWriterLockSlim serverAccessLock; - public DefaultNodeLocator() + public DefaultNodeLocator() : this(100) + { + } + + public DefaultNodeLocator(int serverAddressMutations) { this.servers = new Dictionary(new UIntEqualityComparer()); this.deadServers = new Dictionary(); this.allServers = new List(); this.serverAccessLock = new ReaderWriterLockSlim(); + this.serverAddressMutations = serverAddressMutations; } private void BuildIndex(List nodes) { - var keys = new uint[nodes.Count * DefaultNodeLocator.ServerAddressMutations]; + var keys = new uint[nodes.Count * this.serverAddressMutations]; int nodeIdx = 0; foreach (IMemcachedNode node in nodes) { - var tmpKeys = DefaultNodeLocator.GenerateKeys(node, DefaultNodeLocator.ServerAddressMutations); + var tmpKeys = DefaultNodeLocator.GenerateKeys(node, this.serverAddressMutations); for (var i = 0; i < tmpKeys.Length; i++) { @@ -45,7 +50,7 @@ private void BuildIndex(List nodes) } tmpKeys.CopyTo(keys, nodeIdx); - nodeIdx += DefaultNodeLocator.ServerAddressMutations; + nodeIdx += this.serverAddressMutations; } Array.Sort(keys); diff --git a/Enyim.Caching/Memcached/Locators/Factories/DefaultNodeLocatorFactory.cs b/Enyim.Caching/Memcached/Locators/Factories/DefaultNodeLocatorFactory.cs new file mode 100644 index 00000000..4a9f74f8 --- /dev/null +++ b/Enyim.Caching/Memcached/Locators/Factories/DefaultNodeLocatorFactory.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; + +namespace Enyim.Caching.Memcached.LocatorFactories +{ + /// + /// Create DefaultNodeLocator with any ServerAddressMutations + /// + public class DefaultNodeLocatorFactory :IProviderFactory + { + private readonly int serverAddressMutations; + + public DefaultNodeLocatorFactory(int serverAddressMutations) + { + this.serverAddressMutations = serverAddressMutations; + } + + public IMemcachedNodeLocator Create() + { + return new DefaultNodeLocator(serverAddressMutations); + } + + public void Initialize(Dictionary parameters) + { + } + } +}