public async Task <MembershipTableData> ReadRow(SiloAddress key) { try { MembershipTableData data = null; var val = await database.StringGetAsync(clusterId); if (!val.IsNull) { RedisMembershipCollection collection = serializer.Deserialize <RedisMembershipCollection>(val); data = collection.ToMembershipTableData(); } else { data = new MembershipTableData(_tableVersion); } return(data); } catch (Exception ex) { logger?.LogError(ex, "Redis membership table key '{0}' failed read row.", clusterId); throw ex; } }
public async Task <bool> InsertRow(MembershipEntry entry, TableVersion tableVersion) { try { RedisMembershipEntry rentry = RedisMembershipEntry.Create(clusterId, entry, "0"); RedisMembershipCollection collection = null; var val = await database.StringGetAsync(clusterId); if (!val.IsNull) { collection = serializer.Deserialize <RedisMembershipCollection>(val); collection.Add(rentry); } else { collection = new RedisMembershipCollection(); collection.Add(rentry); } bool ret = await database.StringSetAsync(clusterId, serializer.Serialize(collection)); return(ret); } catch (Exception ex) { logger?.LogError(ex, "Redis membership table key '{0}' failed insert row.", clusterId); throw ex; } }
public Task <IList <Uri> > GetGateways() { if (database.KeyExists(clusterId)) { var val = database.StringGet(clusterId); RedisMembershipCollection collection = serializer.Deserialize <RedisMembershipCollection>(val); try { return(Task.FromResult <IList <Uri> >(collection.Where(x => x.Status == SiloStatus.Active && x.ProxyPort != 0) .Select(y => { var endpoint = new IPEndPoint(y.Address.Endpoint.Address, y.ProxyPort); var gatewayAddress = SiloAddress.New(endpoint, y.Address.Generation); return gatewayAddress.ToGatewayUri(); }).ToList())); } catch { return(Task.FromResult <IList <Uri> >(null)); } } else { return(Task.FromResult <IList <Uri> >(null)); } }
public Task <IList <Uri> > GetGateways() { if (database.KeyExists(clusterId)) { var val = database.StringGet(clusterId); RedisMembershipCollection collection = serializer.Deserialize <RedisMembershipCollection>(val); try { return(Task.FromResult <IList <Uri> >(collection .Where(x => x.Status == SiloStatus.Active && x.ProxyPort != 0) .Select(y => { var endpoint = new IPEndPoint(y.Address.Endpoint.Address, y.ProxyPort); var gatewayAddress = SiloAddress.New(endpoint, y.Address.Generation); return gatewayAddress.ToGatewayUri(); }).ToList())); } catch (Exception ex) { logger?.LogErrorAsync(ex, "Redis Gateway List Provider - GetGateways").GetAwaiter(); return(Task.FromResult <IList <Uri> >(null)); } } logger?.LogWarningAsync("Redis Gateway List Provider - No Cluster ID exists.").GetAwaiter(); return(Task.FromResult <IList <Uri> >(null)); }
public async Task <bool> UpdateRow(MembershipEntry entry, string etag, TableVersion tableVersion) { bool ret = false; try { while (true) { long ticks = DateTime.UtcNow.Ticks; await database.StringSetAsync("locktoken", ticks.ToString(), new TimeSpan(0, 0, 10)); if (string.IsNullOrEmpty(etag)) { etag = "0"; } var rentry = RedisMembershipEntry.Create(clusterId, entry, etag); var val = await database.StringGetAsync(clusterId); if (!val.IsNull) { RedisMembershipCollection collection = serializer.Deserialize <RedisMembershipCollection>(val); var items = collection.Where((x) => x.DeploymentId == clusterId && x.Address.ToParsableString() == rentry.Address.ToParsableString()); if (items != null && items.Count() > 0) { RedisMembershipEntry oldEntry = items.First(); rentry.LastIndex = oldEntry.LastIndex++; collection.Remove(oldEntry); collection.Add(rentry); string tokenValue = await database.StringGetAsync("locktoken"); if (tokenValue != ticks.ToString()) { continue; } else { ret = await database.StringSetAsync(clusterId, serializer.Serialize(collection)); break; } } } } return(ret); } catch (Exception ex) { logger?.LogError(ex, "Redis membership table key '{0}' failed update row.", clusterId); throw ex; } }
public async Task <bool> InsertRow(MembershipEntry entry, TableVersion tableVersion) { bool ret = false; try { while (true) { long ticks = DateTime.UtcNow.Ticks; await database.StringSetAsync("locktoken", ticks.ToString(), new TimeSpan(0, 0, 10)); RedisMembershipEntry rentry = RedisMembershipEntry.Create(clusterId, entry, "0"); RedisMembershipCollection collection = null; var val = await database.StringGetAsync(clusterId); if (!val.IsNull) { collection = serializer.Deserialize <RedisMembershipCollection>(val); collection.Add(rentry); } else { collection = new RedisMembershipCollection(); collection.Add(rentry); } string tokenValue = await database.StringGetAsync("locktoken"); if (tokenValue != ticks.ToString()) { continue; } else { ret = await database.StringSetAsync(clusterId, serializer.Serialize(collection)); break; } } return(ret); } catch (Exception ex) { logger?.LogError(ex, "Redis membership table key '{0}' failed insert row.", clusterId); throw ex; } }
public async Task <MembershipTableData> ReadAll() { logger?.LogInformation("It worked !!! :-)"); MembershipTableData data = null; try { while (true) { long ticks = DateTime.UtcNow.Ticks; await database.StringSetAsync("locktoken", ticks.ToString(), new TimeSpan(0, 0, 10)); var val = await database.StringGetAsync(clusterId); if (!val.IsNull) { RedisMembershipCollection collection = serializer.Deserialize <RedisMembershipCollection>(val); data = collection.ToMembershipTableData(); } else { data = new MembershipTableData(_tableVersion); } string tokenValue = await database.StringGetAsync("locktoken"); if (tokenValue != ticks.ToString()) { continue; } else { break; } } return(data); } catch (Exception ex) { logger?.LogError(ex, "Redis membership table key '{0}' failed read all.", clusterId); throw ex; } }
public async Task UpdateIAmAlive(MembershipEntry entry) { try { var val = await database.StringGetAsync(clusterId); if (!val.IsNull) { RedisMembershipCollection collection = serializer.Deserialize <RedisMembershipCollection>(val); if (collection.UpdateIAmAlive(clusterId, entry.SiloAddress, entry.IAmAliveTime)) { var collVal = serializer.Serialize(collection); await database.StringSetAsync(clusterId, collVal); } } } catch (Exception ex) { logger?.LogError(ex, "Redis membership table key '{0}' failed update i-am-alive.", clusterId); throw ex; } }
public async Task <bool> UpdateRow(MembershipEntry entry, string etag, TableVersion tableVersion) { try { bool ret = false; if (string.IsNullOrEmpty(etag)) { etag = "0"; } var rentry = RedisMembershipEntry.Create(clusterId, entry, etag); var val = await database.StringGetAsync(clusterId); if (!val.IsNull) { RedisMembershipCollection collection = serializer.Deserialize <RedisMembershipCollection>(val); var items = collection.Where((x) => x.DeploymentId == clusterId && x.Address.ToParsableString() == rentry.Address.ToParsableString()); if (items != null && items.Count() > 0) { RedisMembershipEntry oldEntry = items.First(); rentry.LastIndex = oldEntry.LastIndex++; collection.Remove(oldEntry); collection.Add(rentry); ret = await database.StringSetAsync(clusterId, serializer.Serialize(collection)); } } return(ret); } catch (Exception ex) { logger?.LogError(ex, "Redis membership table key '{0}' failed update row.", clusterId); throw ex; } }