diff --git a/src/Configuration/ConsulConfiguration.cs b/src/Configuration/ConsulConfiguration.cs index 7ede10169bed0b28fc6e259f74dbc3adb7587b08..2e6d59c07361165d1c8e7f90b74f4e80a1c157c7 100644 --- a/src/Configuration/ConsulConfiguration.cs +++ b/src/Configuration/ConsulConfiguration.cs @@ -39,6 +39,24 @@ namespace Coscine.Configuration } } + + public bool PutAndWait(string key, byte[] value) + { + var putPair = new KVPair(key) + { + Value = value + }; + + using (var client = new ConsulClient(Configuration)) + { + var putAttempt = client.KV.Put(putPair); + + putAttempt.Wait(); + + return putAttempt.Result.Response; + } + } + public async Task<byte[]> GetAsync(string key) { using (var client = new ConsulClient(Configuration)) @@ -57,6 +75,26 @@ namespace Coscine.Configuration } } + public byte[] GetAndWait(string key) + { + using (var client = new ConsulClient(Configuration)) + { + var getPair = client.KV.Get(key); + + getPair.Wait(); + + if (getPair.Result.Response?.Value != null) + { + return getPair.Result.Response.Value; + } + else + { + return null; + } + + } + } + public async Task<string> GetStringAsync(string key) { var value = await GetAsync(key); @@ -70,6 +108,19 @@ namespace Coscine.Configuration } } + public string GetStringAndWait(string key) + { + var value = GetAndWait(key); + if (value != null) + { + return Encoding.UTF8.GetString(value, 0, value.Length); + } + else + { + return null; + } + } + public async Task<string[]> KeysAsync(string prefix) { using (var client = new ConsulClient(Configuration)) @@ -79,6 +130,16 @@ namespace Coscine.Configuration } } + public string[] KeysAndWait(string prefix) + { + using (var client = new ConsulClient(Configuration)) + { + var keys = client.KV.Keys(prefix); + keys.Wait(); + return keys.Result.Response; + } + } + public async Task<bool> DeleteAsync(string key) { using (var client = new ConsulClient(Configuration)) @@ -88,6 +149,16 @@ namespace Coscine.Configuration } } + public bool DeleteAndWait(string key) + { + using (var client = new ConsulClient(Configuration)) + { + var deleteRequest = client.KV.Delete(key); + deleteRequest.Wait(); + return deleteRequest.Result.Response; + } + } + public bool Put(string key, string value) { return PutAsync(key, value).GetAwaiter().GetResult(); diff --git a/src/Configuration/EnvironmentConfiguration.cs b/src/Configuration/EnvironmentConfiguration.cs index f0ba9e99272bb95b093b11ea4454632b613a5b30..1f49bae621ed208f1d4ee607cedda726fc38cc92 100644 --- a/src/Configuration/EnvironmentConfiguration.cs +++ b/src/Configuration/EnvironmentConfiguration.cs @@ -34,6 +34,11 @@ namespace Coscine.Configuration return true; } + public bool DeleteAndWait(string key) + { + return Delete(key); + } + public Task<bool> DeleteAsync(string key) { return Task.Factory.StartNew(() => @@ -55,6 +60,11 @@ namespace Coscine.Configuration } } + public byte[] GetAndWait(string key) + { + return Get(key); + } + public Task<byte[]> GetAsync(string key) { return Task.Factory.StartNew(() => @@ -75,6 +85,11 @@ namespace Coscine.Configuration } } + public string GetStringAndWait(string key) + { + return GetString(key); + } + public Task<string> GetStringAsync(string key) { return Task.Factory.StartNew(() => @@ -97,6 +112,11 @@ namespace Coscine.Configuration return filteredKeys.ToArray(); } + public string[] KeysAndWait(string prefix) + { + return Keys(prefix); + } + public Task<string[]> KeysAsync(string prefix) { return Task.Factory.StartNew(() => @@ -123,6 +143,11 @@ namespace Coscine.Configuration return Put(key, new System.Text.ASCIIEncoding().GetString(value)); } + public bool PutAndWait(string key, byte[] value) + { + return Put(key, value); + } + public Task<bool> PutAsync(string key, string value) { return Task.Factory.StartNew(() => diff --git a/src/Configuration/IConfiguration.cs b/src/Configuration/IConfiguration.cs index ee53c6b4b95beab62946d025e9247cf4d8b8e156..5abcfcc04e1306a2f6a24e4f3616426d0a37c465 100644 --- a/src/Configuration/IConfiguration.cs +++ b/src/Configuration/IConfiguration.cs @@ -8,14 +8,24 @@ namespace Coscine.Configuration Task<bool> PutAsync(string key, byte[] value); + bool PutAndWait(string key, byte[] value); + Task<byte[]> GetAsync(string key); + byte[] GetAndWait(string key); + Task<string> GetStringAsync(string key); + string GetStringAndWait(string key); + Task<string[]> KeysAsync(string prefix); + string[] KeysAndWait(string prefix); + Task<bool> DeleteAsync(string key); + bool DeleteAndWait(string key); + bool Put(string key, string value); bool Put(string key, byte[] value);