Skip to content

Commit c746585

Browse files
authored
Merge pull request #99 from kt81/var-virtual-node
Make DefaultNodeLocator take the ServerAddressMutations as a parameter
2 parents 4569d93 + 58a8958 commit c746585

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

Enyim.Caching/Memcached/Locators/DefaultNodeLocator.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Enyim.Caching.Memcached
1111
/// </summary>
1212
public sealed class DefaultNodeLocator : IMemcachedNodeLocator, IDisposable
1313
{
14-
private const int ServerAddressMutations = 100;
14+
private readonly int serverAddressMutations;
1515

1616
// holds all server keys for mapping an item key to the server consistently
1717
private uint[] keys;
@@ -21,31 +21,36 @@ public sealed class DefaultNodeLocator : IMemcachedNodeLocator, IDisposable
2121
private List<IMemcachedNode> allServers;
2222
private ReaderWriterLockSlim serverAccessLock;
2323

24-
public DefaultNodeLocator()
24+
public DefaultNodeLocator() : this(100)
25+
{
26+
}
27+
28+
public DefaultNodeLocator(int serverAddressMutations)
2529
{
2630
this.servers = new Dictionary<uint, IMemcachedNode>(new UIntEqualityComparer());
2731
this.deadServers = new Dictionary<IMemcachedNode, bool>();
2832
this.allServers = new List<IMemcachedNode>();
2933
this.serverAccessLock = new ReaderWriterLockSlim();
34+
this.serverAddressMutations = serverAddressMutations;
3035
}
3136

3237
private void BuildIndex(List<IMemcachedNode> nodes)
3338
{
34-
var keys = new uint[nodes.Count * DefaultNodeLocator.ServerAddressMutations];
39+
var keys = new uint[nodes.Count * this.serverAddressMutations];
3540

3641
int nodeIdx = 0;
3742

3843
foreach (IMemcachedNode node in nodes)
3944
{
40-
var tmpKeys = DefaultNodeLocator.GenerateKeys(node, DefaultNodeLocator.ServerAddressMutations);
45+
var tmpKeys = DefaultNodeLocator.GenerateKeys(node, this.serverAddressMutations);
4146

4247
for (var i = 0; i < tmpKeys.Length; i++)
4348
{
4449
this.servers[tmpKeys[i]] = node;
4550
}
4651

4752
tmpKeys.CopyTo(keys, nodeIdx);
48-
nodeIdx += DefaultNodeLocator.ServerAddressMutations;
53+
nodeIdx += this.serverAddressMutations;
4954
}
5055

5156
Array.Sort<uint>(keys);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System.Collections.Generic;
2+
3+
namespace Enyim.Caching.Memcached.LocatorFactories
4+
{
5+
/// <summary>
6+
/// Create DefaultNodeLocator with any ServerAddressMutations
7+
/// </summary>
8+
public class DefaultNodeLocatorFactory :IProviderFactory<IMemcachedNodeLocator>
9+
{
10+
private readonly int serverAddressMutations;
11+
12+
public DefaultNodeLocatorFactory(int serverAddressMutations)
13+
{
14+
this.serverAddressMutations = serverAddressMutations;
15+
}
16+
17+
public IMemcachedNodeLocator Create()
18+
{
19+
return new DefaultNodeLocator(serverAddressMutations);
20+
}
21+
22+
public void Initialize(Dictionary<string, string> parameters)
23+
{
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)