예제 #1
0
 public VBucketKeyMapper(HashAlgorithm algorithm, List <IServer> servers, VBucketServerMap vBucketServerMap)
 {
     HashAlgorithm     = algorithm;
     _servers          = servers;
     _vBucketServerMap = vBucketServerMap;
     _vBuckets         = CreateVBuckets();
 }
        public void Setup()
        {
            _vBucketServerMap1 = new VBucketServerMap
            {
                HashAlgorithm = "CRC",
                NumReplicas = 1,
                ServerList = new[] { "192.168.56.101:11210", "192.168.56.104:11210" },
                VBucketMap = new int[][] { new[] { 1, 0 }, new[] { 1, 0 }, new[] { 1, 0 } }
            };

            _vBucketServerMap2 = new VBucketServerMap
            {
                HashAlgorithm = "CRC",
                NumReplicas = 1,
                ServerList = new[] { "192.168.56.101:11210", "192.168.56.104:11210" },
                VBucketMap = new int[][] { new[] { 1, 0 }, new[] { 1, 0 }, new[] { 1, 0 } }
            };

            _vBucketServerMap3 = new VBucketServerMap
            {
                HashAlgorithm = "CRC",
                NumReplicas = 1,
                ServerList = new[] { "192.168.56.101:11210", "192.168.56.103:11210" },
                VBucketMap = new int[][] { new[] { 0, 1 }, new[] { 1, 0 }, new[] { 1, 0 } }
            };
        }
        public void Setup()
        {
            _vBucketServerMap1 = new VBucketServerMap
            {
                HashAlgorithm = "CRC",
                NumReplicas   = 1,
                ServerList    = new[] { "192.168.56.101:11210", "192.168.56.104:11210" },
                VBucketMap    = new int[][] { new[] { 1, 0 }, new[] { 1, 0 }, new[] { 1, 0 } }
            };

            _vBucketServerMap2 = new VBucketServerMap
            {
                HashAlgorithm = "CRC",
                NumReplicas   = 1,
                ServerList    = new[] { "192.168.56.101:11210", "192.168.56.104:11210" },
                VBucketMap    = new int[][] { new[] { 1, 0 }, new[] { 1, 0 }, new[] { 1, 0 } }
            };

            _vBucketServerMap3 = new VBucketServerMap
            {
                HashAlgorithm = "CRC",
                NumReplicas   = 1,
                ServerList    = new[] { "192.168.56.101:11210", "192.168.56.103:11210" },
                VBucketMap    = new int[][] { new[] { 0, 1 }, new[] { 1, 0 }, new[] { 1, 0 } }
            };
        }
        public static NodeExt[] ReorderToServerList(this NodeExt[] nodes, VBucketServerMap serverMap)
        {
            if (nodes == null) return null;
            var reordered = new NodeExt[nodes.Length];
            var serversList = serverMap.ServerList;

            if (serversList == null || serversList.Length == 0)
            {
                reordered = nodes;
            }
            else
            {
                for (var i = 0; i < serversList.Length; i++)
                {
                    var host = serversList[i].Split(':')[0];
                    foreach (var n in nodes.Where(n => n.Hostname != null
                        && n.Hostname.Split(':')[0].Equals(host)))
                    {
                        reordered[i] = n;
                        break;
                    }
                }
                for (var i = 0; i < nodes.Length; i++)
                {
                    var cur = nodes[i];
                    if (!reordered.Contains(cur))
                    {
                        reordered[i] = cur;
                    }
                }
            }
            return reordered;
        }
 public VBucketKeyMapper(List <IServer> servers, VBucketServerMap vBucketServerMap)
 {
     _servers          = servers;
     _vBucketServerMap = vBucketServerMap;
     _vBuckets         = CreateVBucketMap();
     _vForwardBuckets  = CreateVBucketMapForwards();
     _mask             = _vBuckets.Count - 1;
 }
 public VBucketKeyMapper(HashAlgorithm algorithm, List<IServer> servers, VBucketServerMap vBucketServerMap)
 {
     HashAlgorithm = algorithm;
     _servers = servers;
     _vBucketServerMap = vBucketServerMap;
     _vBuckets = CreateVBucketMap();
     _vForwardBuckets = CreateVBucketMapForwards();
 }
 public VBucketKeyMapper(IDictionary<IPAddress, IServer> servers, VBucketServerMap vBucketServerMap, int revision)
 {
     Rev = revision;
     _servers = servers;
     _vBucketServerMap = vBucketServerMap;
     _vBuckets = CreateVBucketMap();
     _vForwardBuckets = CreateVBucketMapForwards();
     _mask = _vBuckets.Count-1;
 }
 public VBucketKeyMapper(IDictionary <IPAddress, IServer> servers, VBucketServerMap vBucketServerMap, int revision)
 {
     Rev               = revision;
     _servers          = servers;
     _vBucketServerMap = vBucketServerMap;
     _vBuckets         = CreateVBucketMap();
     _vForwardBuckets  = CreateVBucketMapForwards();
     _mask             = _vBuckets.Count - 1;
 }
예제 #9
0
 public VBucket(IDictionary<IPAddress, IServer> cluster, int index, int primary, int[] replicas, int rev, VBucketServerMap vBucketServerMap)
 {
     _cluster = cluster;
     Index = index;
     Primary = primary;
     _replicas = replicas;
     Rev = rev;
     _vBucketServerMap = vBucketServerMap;
 }
예제 #10
0
 public VBucket(IDictionary <IPAddress, IServer> cluster, int index, int primary, int[] replicas, int rev, VBucketServerMap vBucketServerMap)
 {
     _cluster          = cluster;
     Index             = index;
     Primary           = primary;
     _replicas         = replicas;
     Rev               = rev;
     _vBucketServerMap = vBucketServerMap;
 }
예제 #11
0
 public VBucket(IDictionary <IPEndPoint, IServer> cluster, int index, int primary, int[] replicas, uint rev, VBucketServerMap vBucketServerMap, string bucketName)
 {
     _cluster          = cluster;
     Index             = index;
     Primary           = primary;
     _replicas         = replicas;
     Rev               = rev;
     _vBucketServerMap = vBucketServerMap;
     BucketName        = bucketName;
 }
예제 #12
0
 public VBucketKeyMapper(IDictionary <IPEndPoint, IServer> servers, VBucketServerMap vBucketServerMap, uint revision, string bucketName)
 {
     Rev               = revision;
     _servers          = servers;
     _vBucketServerMap = vBucketServerMap;
     _bucketName       = bucketName;
     _vBuckets         = CreateVBucketMap();
     _vForwardBuckets  = CreateVBucketMapForwards();
     _mask             = _vBuckets.Count - 1;
 }
예제 #13
0
 public VBucket(IDictionary<IPAddress, IServer> cluster, int index, int primary, int[] replicas, uint rev, VBucketServerMap vBucketServerMap, string bucketName, ILogger logger)
 {
     Log = logger;
     _cluster = cluster;
     Index = index;
     Primary = primary;
     _replicas = replicas;
     Rev = rev;
     _vBucketServerMap = vBucketServerMap;
     BucketName = bucketName;
 }
        public void SetUp()
        {
            _bucketConfig     = ConfigUtil.ServerConfig.Buckets.First();
            _vBucketServerMap = _bucketConfig.VBucketServerMap;

            _servers = _vBucketServerMap.
                       ServerList.
                       Select(server => new Server(ObjectFactory.CreateIOStrategy(server), new NodeAdapter(new Node(), new NodeExt()), new ClientConfiguration(), _bucketConfig)).
                       Cast <IServer>().
                       ToList();
        }
 public VBucketKeyMapper(IDictionary<IPAddress, IServer> servers, VBucketServerMap vBucketServerMap, uint revision, string bucketName, ILogger logger)
 {
     Log = logger;
     Rev = revision;
     _servers = servers;
     _vBucketServerMap = vBucketServerMap;
     _bucketName = bucketName;
     _vBuckets = CreateVBucketMap();
     _vForwardBuckets = CreateVBucketMapForwards();
     _mask = _vBuckets.Count - 1;
 }
        public void SetUp()
        {
            var bucket = ConfigUtil.ServerConfig.Buckets.First();
            _vBucketServerMap = bucket.VBucketServerMap;

            _servers = _vBucketServerMap.
                ServerList.
                Select(server => new Server(ObjectFactory.CreateIOStrategy(server), new Node(), new ClientConfiguration())).
                Cast<IServer>().
                ToList();
        }
        public void TestMapKey(int index, string key)
        {
            var config = ResourceHelper.ReadResource(@"Documents\config.json",
                                                     InternalSerializationContext.Default.BucketConfig);

            var vBucketServerMap = new VBucketServerMap(config.VBucketServerMap);

            IKeyMapper mapper = new VBucketKeyMapper(config, vBucketServerMap,
                                                     new VBucketFactory(new Mock <ILogger <VBucket> >().Object));
            var vBucket = (VBucket)mapper.MapKey(key);

            Assert.Equal(index, vBucket.Index);
        }
        public void Test_That_Key_XXXXX_Maps_To_VBucket_389()
        {
            const int actual = 389;
            var       config = ResourceHelper.ReadResource(@"Documents\config.json",
                                                           InternalSerializationContext.Default.BucketConfig);

            var vBucketServerMap = new VBucketServerMap(config.VBucketServerMap);

            IKeyMapper mapper = new VBucketKeyMapper(config, vBucketServerMap,
                                                     new VBucketFactory(new Mock <ILogger <VBucket> >().Object));
            var vBucket = (IVBucket)mapper.MapKey(Key);

            Assert.Equal(vBucket.Index, actual);
        }
        public void ReadFromReplica_WhenKeyNotFound_ReturnsKeyNotFound()
        {
            var controller = new Mock <IClusterController>();

            controller.Setup(x => x.Configuration).Returns(new ClientConfiguration());

            var server1 = new Mock <IServer>();

            server1.Setup(x => x.Send(It.IsAny <IOperation <dynamic> >())).Returns(new OperationResult <dynamic> {
                Status = ResponseStatus.KeyNotFound
            });
            server1.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Loopback, 8091));

            var server2 = new Mock <IServer>();

            server2.Setup(x => x.Send(It.IsAny <IOperation <dynamic> >())).Returns(new OperationResult <dynamic> {
                Status = ResponseStatus.KeyNotFound
            });
            server2.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Parse("255.255.0.0"), 8091));

            var vBucketServerMap = new VBucketServerMap
            {
                ServerList = new[]
                {
                    "localhost:8901",
                    "255.255.0.0:8091"
                },
                VBucketMap        = new[] { new[] { 0, 1 } },
                VBucketMapForward = new[] { new[] { 1 } }
            };
            var keyMapper = new VBucketKeyMapper(new Dictionary <IPAddress, IServer>
            {
                { IPAddress.Loopback, server1.Object },
                { IPAddress.Parse("255.255.0.0"), server2.Object }
            }, vBucketServerMap, 3, "default");

            var configInfo = new Mock <IConfigInfo>();

            configInfo.Setup(x => x.IsDataCapable).Returns(true);
            configInfo.Setup(x => x.GetKeyMapper()).Returns(keyMapper);
            configInfo.Setup(x => x.ClientConfig).Returns(new ClientConfiguration());
            var pending  = new ConcurrentDictionary <uint, IOperation>();
            var executor = new CouchbaseRequestExecuter(controller.Object, configInfo.Object, "default", pending);

            var op     = new ReplicaRead <dynamic>("thekey", null, new DefaultTranscoder(), 100);
            var result = executor.ReadFromReplica(op);

            Assert.AreEqual(ResponseStatus.KeyNotFound, result.Status);
        }
        public void SetUp()
        {
            _bucketConfig = ConfigUtil.ServerConfig.Buckets.First(x=>x.Name =="default");
            _vBucketServerMap = _bucketConfig.VBucketServerMap;

            _servers = new Dictionary<IPAddress, IServer>();
            foreach (var node in _bucketConfig.GetNodes())
            {
                _servers.Add(node.GetIPAddress(),
                    new Server(new FakeIOService(node.GetIPEndPoint(), new FakeConnectionPool(), false),
                        node,
                        new ClientConfiguration(), _bucketConfig,
                        new FakeTranscoder()));
            }
        }
        public void SetUp()
        {
            _bucketConfig     = ConfigUtil.ServerConfig.Buckets.First(x => x.Name == "default");
            _vBucketServerMap = _bucketConfig.VBucketServerMap;

            _servers = new Dictionary <IPEndPoint, IServer>();
            foreach (var node in _bucketConfig.GetNodes())
            {
                _servers.Add(new IPEndPoint(node.GetIPAddress(), 8091),
                             new Server(new FakeIOService(node.GetIPEndPoint(), new FakeConnectionPool(), false),
                                        node,
                                        new ClientConfiguration(), _bucketConfig,
                                        new FakeTranscoder()));
            }
        }
        public void VBucket_HasCorrectBucketname()
        {
            var expected = "default";

            var config = ResourceHelper.ReadResource(@"Documents\config.json",
                                                     InternalSerializationContext.Default.BucketConfig);

            var vBucketServerMap = new VBucketServerMap(config.VBucketServerMap);

            IKeyMapper mapper = new VBucketKeyMapper(config, vBucketServerMap,
                                                     new VBucketFactory(new Mock <ILogger <VBucket> >().Object));
            var vBucket = (IVBucket)mapper.MapKey(Key);

            Assert.Equal(expected, vBucket.BucketName);
        }
        public void WhenForwardMapIsAvailable_AndRevisionIsZero_OperationUsesVBucket()
        {
            var controller = new Mock <IClusterController>();

            controller.Setup(x => x.Configuration).Returns(new ClientConfiguration());

            var server1 = new Mock <IServer>();

            server1.Setup(x => x.Send(It.IsAny <IOperation <dynamic> >())).Returns(new OperationResult <dynamic>());
            server1.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Loopback, 8091));

            var server2 = new Mock <IServer>();

            server2.Setup(x => x.Send(It.IsAny <IOperation <dynamic> >())).Returns(new OperationResult <dynamic>());
            server2.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Parse("255.255.0.0"), 8091));

            var vBucketServerMap = new VBucketServerMap
            {
                ServerList = new[]
                {
                    "localhost:8901",
                    "255.255.0.0:8091"
                },
                VBucketMap        = new[] { new[] { 0 } },
                VBucketMapForward = new[] { new[] { 1 } }
            };
            var keyMapper = new VBucketKeyMapper(new Dictionary <IPAddress, IServer>
            {
                { IPAddress.Loopback, server1.Object },
                { IPAddress.Parse("255.255.0.0"), server2.Object }
            }, vBucketServerMap, 1, "default");

            var configInfo = new Mock <IConfigInfo>();

            configInfo.Setup(x => x.IsDataCapable).Returns(true);
            configInfo.Setup(x => x.GetKeyMapper()).Returns(keyMapper);
            configInfo.Setup(x => x.ClientConfig).Returns(new ClientConfiguration());
            var pending  = new ConcurrentDictionary <uint, IOperation>();
            var executor = new CouchbaseRequestExecuter(controller.Object, configInfo.Object, "default", pending);

            var op = new Get <dynamic>("thekey", null, new DefaultTranscoder(), 100);

            op.LastConfigRevisionTried = 0;
            var result = executor.SendWithRetry(op);

            Assert.AreEqual(op.VBucket.LocatePrimary().EndPoint, keyMapper.GetVBuckets().First().Value.LocatePrimary().EndPoint);
        }
        public void VBucket_Supports_LocalHost()
        {
            var expected = "default";

            var config = ResourceHelper.ReadResource(@"Documents\configs\config-localhost.json",
                                                     InternalSerializationContext.Default.BucketConfig);

            config.ReplacePlaceholderWithBootstrapHost("127.0.0.1");

            var vBucketServerMap = new VBucketServerMap(config.VBucketServerMap);

            IKeyMapper mapper = new VBucketKeyMapper(config, vBucketServerMap,
                                                     new VBucketFactory(new Mock <ILogger <VBucket> >().Object));
            var vBucket = (IVBucket)mapper.MapKey(Key);

            Assert.Equal(expected, vBucket.BucketName);
        }
예제 #25
0
        public VBucketTests()
        {
            var serverConfigJson = ResourceHelper.ReadResource("bootstrap-config.json");
            var bucketConfig     = JsonConvert.DeserializeObject <BucketConfig>(serverConfigJson);

            _vBucketServerMap = bucketConfig.VBucketServerMap;

            _servers = new List <IPEndPoint>();
            foreach (var node in bucketConfig.GetNodes())
            {
                _servers.Add(node.GetIpEndPoint(false));
            }

            var vBucketMap = _vBucketServerMap.VBucketMap.First();
            var primary    = vBucketMap[0];
            var replicas   = new [] { vBucketMap[1] };

            _vBucket = new VBucket(_servers, 0, primary, replicas, bucketConfig.Rev, _vBucketServerMap, "default");
        }
예제 #26
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = (int)Rev;
         hashCode = (hashCode * 397) ^ (Name != null ? Name.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Uri != null ? Uri.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (StreamingUri != null ? StreamingUri.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Nodes != null ? Nodes.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (NodesExt != null ? NodesExt.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (NodeLocator != null ? NodeLocator.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Uuid != null ? Uuid.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Ddocs != null ? Ddocs.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (VBucketServerMap != null ? VBucketServerMap.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (BucketCapabilitiesVer != null ? BucketCapabilitiesVer.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (BucketCapabilities != null ? BucketCapabilities.GetHashCode() : 0);
         return(hashCode);
     }
 }
        public void SetUp()
        {
            var bucketConfig = ConfigUtil.ServerConfig.Buckets.First(x=>x.Name=="default");
            _vBucketServerMap = bucketConfig.VBucketServerMap;

            _servers = new Dictionary<IPAddress, IServer>();
            foreach (var node in bucketConfig.GetNodes())
            {
                _servers.Add(node.GetIPAddress(),
                    new Server(new FakeIOStrategy(node.GetIPEndPoint(), new FakeConnectionPool(), false),
                        node,
                        new ClientConfiguration(), bucketConfig,
                        new FakeTranscoder()));
            }

            var vBucketMap = _vBucketServerMap.VBucketMap.First();
            var primary = vBucketMap[0];
            var replicas = new int[]{vBucketMap[1]};
            _vBucket = new VBucket(_servers, 0, primary, replicas, bucketConfig.Rev, _vBucketServerMap);
        }
        public void WhenForwardMapIsAvailable_AndRevisionIsSame_OperationUsesForwardMapVBucket()
        {
            var controller = new Mock<IClusterController>();
            controller.Setup(x => x.Configuration).Returns(new ClientConfiguration());

            var server1 = new Mock<IServer>();
            server1.Setup(x => x.Send(It.IsAny<IOperation<dynamic>>())).Returns(new OperationResult<dynamic>());
            server1.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Loopback, 8091));

            var server2 = new Mock<IServer>();
            server2.Setup(x => x.Send(It.IsAny<IOperation<dynamic>>())).Returns(new OperationResult<dynamic>());
            server2.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Parse("255.255.0.0"), 8091));

            var vBucketServerMap = new VBucketServerMap
            {
                ServerList = new[]
                {
                    "localhost:8901",
                    "255.255.0.0:8091"
                },
                VBucketMap = new[] {new[] {0}},
                VBucketMapForward = new[] {new[] {1}}
            };
            var keyMapper = new VBucketKeyMapper(new Dictionary<IPAddress, IServer>
            {
                { IPAddress.Loopback, server1.Object},
                { IPAddress.Parse("255.255.0.0"), server2.Object}
            }, vBucketServerMap, 2, "default");

            var configInfo = new Mock<IConfigInfo>();
            configInfo.Setup(x => x.IsDataCapable).Returns(true);
            configInfo.Setup(x => x.GetKeyMapper()).Returns(keyMapper);
            configInfo.Setup(x => x.ClientConfig).Returns(new ClientConfiguration());
            var pending = new ConcurrentDictionary<uint, IOperation>();
            var executor = new CouchbaseRequestExecuter(controller.Object, configInfo.Object, "default", pending);

            var op = new Get<dynamic>("thekey", null, new DefaultTranscoder(), 100);
            op.LastConfigRevisionTried = 2;
            var result = executor.SendWithRetry(op);
            Assert.AreEqual(op.VBucket.LocatePrimary().EndPoint, keyMapper.GetVBucketsForwards().First().Value.LocatePrimary().EndPoint);
        }
예제 #29
0
        public VBucketTests()
        {
            var serverConfigJson = ResourceHelper.ReadResource("bootstrap-config.json");
            var bucketConfig     = JsonConvert.DeserializeObject <BucketConfig>(serverConfigJson);

            var(vBucketServerMap, _) = GetServerMapAndIpEndPoints(bucketConfig.VBucketServerMap);
            _vBucketServerMap        = vBucketServerMap;

            _servers = new List <IPEndPoint>();
            foreach (var node in bucketConfig.GetNodes())
            {
                _servers.Add(new IPEndPoint(IPAddress.Parse(node.Hostname), node.KeyValue));
            }

            var vBucketMap = _vBucketServerMap.VBucketMap.First();
            var primary    = vBucketMap[0];
            var replicas   = new [] { vBucketMap[1] };

            _vBucket = new VBucket(_servers, 0, primary, replicas, bucketConfig.Rev, _vBucketServerMap, "default",
                                   new Mock <ILogger <VBucket> >().Object);
        }
예제 #30
0
        public VBucketTests()
        {
            var bucketConfig = ResourceHelper.ReadResource("bootstrap-config.json",
                                                           InternalSerializationContext.Default.BucketConfig);

            var vBucketServerMap = GetServerMap(bucketConfig.VBucketServerMap);

            _vBucketServerMap = vBucketServerMap;

            _servers = new List <HostEndpointWithPort>();
            foreach (var node in bucketConfig.GetNodes())
            {
                _servers.Add(new HostEndpointWithPort(node.Hostname, node.KeyValue));
            }

            var vBucketMap = _vBucketServerMap.VBucketMap.First();
            var primary    = vBucketMap[0];
            var replicas   = new [] { vBucketMap[1] };

            _vBucket = new VBucket(_servers, 0, primary, replicas, bucketConfig.Rev, _vBucketServerMap, "default",
                                   new Mock <ILogger <VBucket> >().Object);
        }
예제 #31
0
        public void SetUp()
        {
            var bucketConfig = ConfigUtil.ServerConfig.Buckets.First(x => x.Name == "default");

            _vBucketServerMap = bucketConfig.VBucketServerMap;

            _servers = new Dictionary <IPAddress, IServer>();
            foreach (var node in bucketConfig.GetNodes())
            {
                _servers.Add(node.GetIPAddress(),
                             new Server(new FakeIOService(node.GetIPEndPoint(), new FakeConnectionPool(), false),
                                        node,
                                        new ClientConfiguration(), bucketConfig,
                                        new FakeTranscoder()));
            }

            var vBucketMap = _vBucketServerMap.VBucketMap.First();
            var primary    = vBucketMap[0];
            var replicas   = new int[] { vBucketMap[1] };

            _vBucket = new VBucket(_servers, 0, primary, replicas, bucketConfig.Rev, _vBucketServerMap);
        }
        public static Node[] ReorderToServerList(this Node[] nodes, VBucketServerMap serverMap)
        {
            var reordered = new Node[nodes.Length];
            var serversList = serverMap.ServerList;

            if (serversList == null || serversList.Length == 0)
            {
                reordered = nodes;
            }
            else
            {
                for (var i = 0; i < serversList.Length; i++)
                {
                    var host = serversList[i].Split(':')[0];
                    foreach (var n in nodes.Where(n => n.Hostname.Split(':')[0].Equals(host)))
                    {
                        reordered[i] = n;
                        break;
                    }
                }
            }
            return reordered;
        }
        public void Config_With_FFMaps_Uses_Them_When_NMVB(string nodeIp, ResponseStatus responseStatus)
        {
            var config = ResourceHelper.ReadResource(@"Documents\configs\config-with-ffmaps.json",
                                                     InternalSerializationContext.Default.BucketConfig);

            var vBucketServerMap = new VBucketServerMap(config.VBucketServerMap);

            IKeyMapper mapper = new VBucketKeyMapper(config, vBucketServerMap,
                                                     new VBucketFactory(new Mock <ILogger <VBucket> >().Object));
            var vBucket = (IVBucket)mapper.MapKey(Key);

            var op = new Get <dynamic>()
            {
                Header = new OperationHeader
                {
                    Status = responseStatus
                }
            };

            var mappedKey = mapper.MapKey("mykey", op.WasNmvb());

            Assert.Equal(nodeIp, mappedKey.LocatePrimary().ToString());
        }
 public VBucketKeyMapper(List<IServer> servers, VBucketServerMap vBucketServerMap) 
     : this(new Crc32(), servers, vBucketServerMap)
 {
 }
 public IVBucket Create(ICollection <IPEndPoint> endPoints, short index, short primary,
                        short[] replicas, uint rev, VBucketServerMap vBucketServerMap, string bucketName) =>
 new VBucket(endPoints, index, primary, replicas, rev, vBucketServerMap, bucketName, _logger);
        public void ReadFromReplica_WhenKeyNotFound_ReturnsKeyNotFound()
        {
            var controller = new Mock<IClusterController>();
            controller.Setup(x => x.Configuration).Returns(new ClientConfiguration());

            var server1 = new Mock<IServer>();
            server1.Setup(x => x.Send(It.IsAny<IOperation<dynamic>>())).Returns(new OperationResult<dynamic> { Status = ResponseStatus.KeyNotFound });
            server1.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Loopback, 8091));

            var server2 = new Mock<IServer>();
            server2.Setup(x => x.Send(It.IsAny<IOperation<dynamic>>())).Returns(new OperationResult<dynamic> {Status = ResponseStatus.KeyNotFound});
            server2.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Parse("255.255.0.0"), 8091));

            var vBucketServerMap = new VBucketServerMap
            {
                ServerList = new[]
                {
                    "localhost:8901",
                    "255.255.0.0:8091"
                },
                VBucketMap = new[] { new[] { 0, 1 } },
                VBucketMapForward = new[] { new[] { 1 } }
            };
            var keyMapper = new VBucketKeyMapper(new Dictionary<IPAddress, IServer>
            {
                { IPAddress.Loopback, server1.Object},
                { IPAddress.Parse("255.255.0.0"), server2.Object}
            }, vBucketServerMap, 3, "default");

            var configInfo = new Mock<IConfigInfo>();
            configInfo.Setup(x => x.IsDataCapable).Returns(true);
            configInfo.Setup(x => x.GetKeyMapper()).Returns(keyMapper);
            configInfo.Setup(x => x.ClientConfig).Returns(new ClientConfiguration());
            var pending = new ConcurrentDictionary<uint, IOperation>();
            var executor = new CouchbaseRequestExecuter(controller.Object, configInfo.Object, "default", pending);

            var op = new ReplicaRead<dynamic>("thekey", null, new DefaultTranscoder(), 100);
            var result = executor.ReadFromReplica(op);
            Assert.AreEqual(ResponseStatus.KeyNotFound, result.Status);
        }
예제 #37
0
 public VBucketKeyMapper(List <IServer> servers, VBucketServerMap vBucketServerMap)
     : this(new Crc32(), servers, vBucketServerMap)
 {
 }
 public BucketConfig()
 {
     VBucketServerMap = new VBucketServerMap();
 }
예제 #39
0
 public BucketConfig()
 {
     Nodes            = new List <Node>();
     VBucketServerMap = new VBucketServerMap();
 }