Ejemplo n.º 1
0
        public string Get(string key)
        {
            if (key.IsNullOrEmpty())
            {
                return(etcdClient.GetRange("/").Result.ToJson());
            }
            if (key.IndexOf('/') != 0)
            {
                key = "/" + key;
            }
            var dic = etcdClient.GetRange(key).Result;

            return(dic.ToJson());
        }
Ejemplo n.º 2
0
        public async Task ShouldReturnRangePrefix()
        {
            var resp = Enumerable.Range(0, 10).Select(async x => await etcdClient.Put("test" + x, "value" + x))
                       .Concat(Enumerable.Range(65, 10).Select(async x => await etcdClient.Put("test" + (char)x, "value" + x)));
            await Task.WhenAll(resp);

            var res1 = await etcdClient.GetRange("test");

            var res2 = await etcdClient.GetRange("testA");

            Assert.AreEqual(20, res1.Count);
            CollectionAssert.AreEquivalent(Enumerable.Range(0, 10).Select(x => "value" + x).Concat(Enumerable.Range(65, 10).Select(x => "value" + x)).ToArray(), res1.Values.ToArray());
            Assert.AreEqual(1, res2.Count);
            Assert.AreEqual("value65", res2["testA"]);
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            var etcdClient = new EtcdClient("http://localhost:2379");

            etcdClient.DeleteRange("/foo");
            //Console.WriteLine(etcdClient.GetVal("/foo"));
            //Console.WriteLine(etcdClient.Get("foo").Kvs.FirstOrDefault().Value.ToStringUtf8());
            etcdClient.Put($"/foo/{Guid.NewGuid()}", Guid.NewGuid().ToString());
            etcdClient.Put(new PutRequest
            {
                Key   = ByteString.CopyFromUtf8("/time"),
                Value = ByteString.CopyFromUtf8(Guid.NewGuid().ToString()),
                Lease = etcdClient.LeaseGrant(new LeaseGrantRequest
                {
                    TTL = 20
                }).ID
            });
            var response = etcdClient.GetRange("/");

            foreach (var keyValue in response.Kvs)
            {
                Console.WriteLine($"{keyValue.Key.ToStringUtf8()}:{keyValue.Value.ToStringUtf8()}");
            }
            Console.ReadKey();
        }
        public async Task ShouldNotOverwriteKeys()
        {
            var resp = Enumerable.Range(0, 100).Select(async x => await etcdClient.Put("test" + x, "value" + x))
                       .Concat(Enumerable.Range(0, 105).Select(async x => await etcdClient.Put("test" + x, "value" + x)))
                       .Concat(Enumerable.Range(0, 115).Select(async x => await etcdClient.Put("test" + x, "value" + x)));

            await Task.WhenAll(resp);

            var res = await etcdClient.GetRange("test");

            Assert.AreEqual(115, res.Count);
        }
        private void CheckToExecuteOp(Operation op)
        {
            ackNumOfReplicas = client.GetRange("ack" + op.Number.ToString() + "|").Kvs.Count;
            if (ackNumOfReplicas > ((maxNumOfReplicas - 1) / 2))
            {
                //stop timer
                ReqNumber = op.Number;
                readyToBeExecuted[op.Number] = true;
                t.Dispose();

                if (IsLeader)
                {
                    //put req in history so that any other lider will know what to do when elected
                    client.Put("req|" + op.Number, op.Name);
                }

                if (log.Log[0].Equals(op))
                {
                    ExecuteOp();
                }
            }
        }
Ejemplo n.º 6
0
 WatchValues(ConcurrentDictionary <string, List <string> > cd)
 {
     try
     {
         var dk = etcdClient.GetRange(conf).Result;
         foreach (var item in dk)
         {
             cd.AddOrUpdate(item.Key.Replace(conf, ""), new List <string> {
                 item.Value
             }, (key, value) =>
             {
                 value[0] = item.Value;
                 return(value);
             });
         }
     }
     catch
     {
         foreach (var item in cd)
         {
             await etcdClient.Put(conf + item.Key, item.Value[0]);
         }
     }
     watcher = etcdClient.WatchRange(conf).Result;
     watcher.Subscribe(s =>
     {
         foreach (var item in s)
         {
             cd.AddOrUpdate(item.Key.Replace(conf, ""), new List <string> {
                 item.Value
             }, (key, value) =>
             {
                 value[0] = item.Value;
                 return(value);
             });
         }
     });
 }
Ejemplo n.º 7
0
        private void listAndAddNodesBootStrap()
        {
            var rangeResponse = client.GetRange(NODES_KEY);

            if (!rangeResponse.IsNull() && !rangeResponse.Kvs.IsNull() && rangeResponse.Kvs.Count > 0)
            {
                foreach (var kv in rangeResponse.Kvs)
                {
                    var keyStr   = kv.Key.ToStringUtf8();
                    var valueStr = kv.Value.ToStringUtf8();
                    consumeAndAddApiHostPort(deserialize <APIHostPort>(valueStr));
                }
            }
        }
        public async Task ShouldDeleteAllKeys()
        {
            await etcdClient.Put("test1", string.Empty);

            await etcdClient.Put("test2", string.Empty);

            await etcdClient.Put("test3", string.Empty);

            var deletedCount = await EtcdTestHelper.DeleteAllRecords();

            var get = await etcdClient.GetRange("test");

            Assert.AreEqual(3, deletedCount);
            Assert.AreEqual(0, get.Values.Count);
        }
        public async Task ShouldDeleteAllKeys()
        {
            var r = new Random();
            await etcdClient.Put("test1", r.Next().ToString());

            await etcdClient.Put("test2", r.Next().ToString());

            await etcdClient.Put("test3", r.Next().ToString());

            var deletedCount = await etcdClient.DeleteRange("test");

            var get = await etcdClient.GetRange("test");

            Assert.AreEqual(3, deletedCount);
            Assert.AreEqual(0, get.Values.Count);
        }
        public IDictionary <string, string> GetConfig()
        {
            var dict = new ConcurrentDictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            foreach (var prefixKey in _etcdOptions.PrefixKeys)
            {
                var fullPrefixKey = $"{_etcdOptions.Env}{prefixKey}";

                var kvs = _etcdClient.GetRange(fullPrefixKey, _headers).Kvs;

                foreach (var item in kvs)
                {
                    var key = item.Key.ToStringUtf8();
                    var val = item.Value.ToStringUtf8();

                    if (_etcdOptions.KeyMode == EtcdConfigrationKeyMode.Json)
                    {
                        key = $"{prefixKey}:{key.Replace(fullPrefixKey, string.Empty)}";
                    }
                    else if (_etcdOptions.KeyMode == EtcdConfigrationKeyMode.RemovePrefix)
                    {
                        key = key.Replace(fullPrefixKey, string.Empty);
                    }
                    else
                    {
                        key = key.Replace(_etcdOptions.Env, string.Empty);
                    }

                    if (dict.ContainsKey(key))
                    {
                        dict[key] = val;
                    }
                    else
                    {
                        dict.TryAdd(key, val);
                    }
                }
            }

            return(dict);
        }
Ejemplo n.º 11
0
        static void Main(string[] args)
        {
            Console.WriteLine("开始分库计算");
            int i = 1;

            //var db = (9527 % 20);
            //while (true)
            //{
            //    if (i == 0) continue;
            //    if ((9527 % i) == db)
            //    {
            //        Console.WriteLine("数据库(" + i + "):" + (9527 % i));
            //    }
            //    i++;
            //    //if (i % 10 == 0)
            //    //{
            //    //    Console.WriteLine("按任意键继续");
            //    //    Console.ReadLine();
            //    //}
            //}


            //var db = (9527 / 20) % 1;
            //while (true)
            //{
            //    var s = (9527 / 20) % i;
            //    if (s==db)
            //    {
            //        Console.WriteLine("数据库(" + i + "):" + s);
            //    }
            //    i++;
            //    //if (i % 10 == 0)
            //    //{
            //    //    Console.WriteLine("按任意键继续");
            //    //    Console.ReadLine();
            //    //}
            //}


            //dic.Add("1",new List<string> { "a"});
            //dic.Add("2", new List<string> { "b" });



            //List<string> list = dic["1"];

            //Console.WriteLine(list[0]);

            //dic["1"][0] = "C";

            //Console.WriteLine(list[0]);



            //dic["1"][0] = "C";

            //Console.WriteLine(list[0]);

            //dic["1"][0] = "K";

            //Console.WriteLine(list[0]);



            //Console.WriteLine("除数:" + (9527 / 10));

            //Console.WriteLine("数据库:" + (9527 / 10) % 8 + 1);
            //Console.WriteLine("表编号:" + (9527 % 10));

            //Console.WriteLine("数据库:" + (((9527 / 10) % 16 + 1) -1)% 2 +1);
            //Console.WriteLine("表编号:" + (9527 % 80));

            //int isTaked = 0;
            //if (Interlocked.Exchange(ref isTaked, 1) != 0)
            //{

            //    Console.Write("cc");
            //};
            //Interlocked.Exchange(ref isTaked, 0);

            EtcdClient etcdClient = new EtcdClient(new Uri("http://127.0.0.1:2379"));
            var        s          = etcdClient.Get("/111ddd").Result;

            Console.WriteLine(s);



            var sk = etcdClient.GetRange("/111").Result;
            var k  = etcdClient.Put("/conf/order/99999", "999").Result;

            var b     = etcdClient.Put("/conf/order/redis:add", "66666").Result;
            var etcdw = etcdClient.WatchRange("/111").Result;

            etcdw.Subscribe(x =>
            {
                Console.WriteLine("触发啦");
            });
            //etcdClient.Put("/111", "999");
            //etcdClient.Put("/111", "444");
            //etcdClient.Put("/111", "333");

            Console.Read();
        }
Ejemplo n.º 12
0
        public RangeResponse GetRange(string key)
        {
            var rsp = client.GetRange(key);

            return(rsp.FromProto());
        }