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()); }
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"]); }
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(); } } }
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); }); } }); }
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); }
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(); }
public RangeResponse GetRange(string key) { var rsp = client.GetRange(key); return(rsp.FromProto()); }