private SiloInstanceRecord ConvertPartial(MembershipEntry memEntry) { return(new SiloInstanceRecord { DeploymentId = this.clusterId, IAmAliveTime = LogFormatter.PrintDate(memEntry.IAmAliveTime), SiloIdentity = SiloInstanceRecord.ConstructSiloIdentity(memEntry.SiloAddress) }); }
public void GetKeysTest() { SiloAddress address = SiloAddress.New(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345), 67890); var instanceRecord = new SiloInstanceRecord { DeploymentId = "deploymentID", SiloIdentity = SiloInstanceRecord.ConstructSiloIdentity(address) }; Dictionary <string, AttributeValue> keys = instanceRecord.GetKeys(); Assert.Equal(2, keys.Count); Assert.Equal(instanceRecord.DeploymentId, keys[SiloInstanceRecord.DEPLOYMENT_ID_PROPERTY_NAME].S); Assert.Equal(instanceRecord.SiloIdentity, keys[SiloInstanceRecord.SILO_IDENTITY_PROPERTY_NAME].S); }
private SiloInstanceRecord Convert(MembershipEntry memEntry, TableVersion tableVersion) { var tableEntry = new SiloInstanceRecord { DeploymentId = this.clusterId, Address = memEntry.SiloAddress.Endpoint.Address.ToString(), Port = memEntry.SiloAddress.Endpoint.Port, Generation = memEntry.SiloAddress.Generation, HostName = memEntry.HostName, Status = (int)memEntry.Status, ProxyPort = memEntry.ProxyPort, SiloName = memEntry.SiloName, StartTime = LogFormatter.PrintDate(memEntry.StartTime), IAmAliveTime = LogFormatter.PrintDate(memEntry.IAmAliveTime), SiloIdentity = SiloInstanceRecord.ConstructSiloIdentity(memEntry.SiloAddress), MembershipVersion = tableVersion.Version }; if (memEntry.SuspectTimes != null) { var siloList = new StringBuilder(); var timeList = new StringBuilder(); bool first = true; foreach (var tuple in memEntry.SuspectTimes) { if (!first) { siloList.Append('|'); timeList.Append('|'); } siloList.Append(tuple.Item1.ToParsableString()); timeList.Append(LogFormatter.PrintDate(tuple.Item2)); first = false; } tableEntry.SuspectingSilos = siloList.ToString(); tableEntry.SuspectingTimes = timeList.ToString(); } else { tableEntry.SuspectingSilos = string.Empty; tableEntry.SuspectingTimes = string.Empty; } return(tableEntry); }
public async Task <MembershipTableData> ReadRow(SiloAddress siloAddress) { try { var keys = new Dictionary <string, AttributeValue> { { $"{SiloInstanceRecord.DEPLOYMENT_ID_PROPERTY_NAME}", new AttributeValue(this.clusterId) }, { $"{SiloInstanceRecord.SILO_IDENTITY_PROPERTY_NAME}", new AttributeValue(SiloInstanceRecord.ConstructSiloIdentity(siloAddress)) } }; var entry = await storage.ReadSingleEntryAsync(this.options.TableName, keys, fields => new SiloInstanceRecord(fields)); MembershipTableData data = entry != null?Convert(new List <SiloInstanceRecord> { entry }) : new MembershipTableData(this.tableVersion); if (this.logger.IsEnabled(LogLevel.Trace)) { this.logger.Trace("Read my entry {0} Table=" + Environment.NewLine + "{1}", siloAddress.ToLongString(), data.ToString()); } return(data); } catch (Exception exc) { this.logger.Warn(ErrorCode.MembershipBase, $"Intermediate error reading silo entry for key {siloAddress.ToLongString()} from the table {this.options.TableName}.", exc); throw; } }
public async Task <MembershipTableData> ReadRow(SiloAddress siloAddress) { try { var siloEntryKeys = new Dictionary <string, AttributeValue> { { $"{SiloInstanceRecord.DEPLOYMENT_ID_PROPERTY_NAME}", new AttributeValue(this.clusterId) }, { $"{SiloInstanceRecord.SILO_IDENTITY_PROPERTY_NAME}", new AttributeValue(SiloInstanceRecord.ConstructSiloIdentity(siloAddress)) } }; var versionEntryKeys = new Dictionary <string, AttributeValue> { { $"{SiloInstanceRecord.DEPLOYMENT_ID_PROPERTY_NAME}", new AttributeValue(this.clusterId) }, { $"{SiloInstanceRecord.SILO_IDENTITY_PROPERTY_NAME}", new AttributeValue(SiloInstanceRecord.TABLE_VERSION_ROW) } }; var entries = await storage.GetEntriesTxAsync(this.options.TableName, new[] { siloEntryKeys, versionEntryKeys }, fields => new SiloInstanceRecord(fields)); MembershipTableData data = Convert(entries.ToList()); if (this.logger.IsEnabled(LogLevel.Trace)) { this.logger.LogTrace("Read my entry {SiloAddress} Table: {TableData}", siloAddress.ToLongString(), data.ToString()); } return(data); } catch (Exception exc) { this.logger.LogWarning( (int)ErrorCode.MembershipBase, exc, "Intermediate error reading silo entry for key {SiloAddress} from the table {TableName}", siloAddress.ToLongString(), this.options.TableName); throw; } }