public ConsulMembershipEntry(MembershipEntry entry) { this.FaultZone = entry.FaultZone; this.HostName = entry.HostName; this.IAmAliveTime = entry.IAmAliveTime; this.InstanceName = entry.InstanceName; this.ProxyPort = entry.ProxyPort; this.RoleName = entry.RoleName; this.SiloAddress = entry.SiloAddress.ToParsableString(); this.StartTime = entry.StartTime; this.Status = entry.Status; this.SuspectTimes = entry.SuspectTimes.Select(t => new Tuple<string, DateTime>(t.Item1.ToParsableString(), t.Item2)).ToList(); this.UpdateZone = entry.UpdateZone; }
internal MembershipEntry GetMembershipEntry() { var mse = new MembershipEntry(); mse.FaultZone = this.FaultZone; mse.HostName = this.HostName; mse.IAmAliveTime = this.IAmAliveTime; mse.InstanceName = this.InstanceName; mse.ProxyPort = this.ProxyPort; mse.RoleName = this.RoleName; mse.SiloAddress = Orleans.Runtime.SiloAddress.FromParsableString(this.SiloAddress); mse.StartTime = this.StartTime; mse.Status = this.Status; mse.SuspectTimes = this.SuspectTimes.Select(t => new Tuple<SiloAddress, DateTime>(Orleans.Runtime.SiloAddress.FromParsableString(t.Item1), t.Item2)).ToList(); mse.UpdateZone = this.UpdateZone; return mse; }
public async Task MembershipTable_Consul_InsertRow_ReadAll_ReadRow() { await MembershipTable_Consul_Init(); var table = await ConsulMembershipTable.ReadAll(); Assert.IsTrue(table.Members.Count == 0); var me = new MembershipEntry() { FaultZone =0, HostName="xxx", IAmAliveTime =DateTime.Today, InstanceName ="instance1", RoleName ="role", ProxyPort =123, SiloAddress = SiloAddress.FromParsableString("127.0.0.1:22223@183457693"), StartTime=DateTime.Now, Status= SiloStatus.Joining, SuspectTimes= new List<Tuple<SiloAddress, DateTime>>(), UpdateZone=0 }; var ret = await ConsulMembershipTable.InsertRow(me,table.Version); Assert.IsTrue(ret); var refreshedTable = await ConsulMembershipTable.ReadAll(); Assert.IsTrue(refreshedTable.Members.Count == 1); var entry = refreshedTable.Members.Select(t => t.Item1).FirstOrDefault(); var readRowTable = await ConsulMembershipTable.ReadRow(entry.SiloAddress); var storedEntry = readRowTable.Members.Select(t => t.Item1).FirstOrDefault(); Assert.AreEqual(entry.SiloAddress.ToParsableString(), storedEntry.SiloAddress.ToParsableString()); }
// partialUpdate arrivies via gossiping with other oracles. In such a case only take the status. internal void Update(MembershipEntry updatedSiloEntry) { SiloAddress = updatedSiloEntry.SiloAddress; Status = updatedSiloEntry.Status; //--- HostName = updatedSiloEntry.HostName; ProxyPort = updatedSiloEntry.ProxyPort; RoleName = updatedSiloEntry.RoleName; InstanceName = updatedSiloEntry.InstanceName; UpdateZone = updatedSiloEntry.UpdateZone; FaultZone = updatedSiloEntry.FaultZone; SuspectTimes = updatedSiloEntry.SuspectTimes; StartTime = updatedSiloEntry.StartTime; IAmAliveTime = updatedSiloEntry.IAmAliveTime; }
// Utility methods private static MembershipEntry CreateMembershipEntryForTest() { SiloAddress siloAddress = SiloAddress.NewLocalAddress(_counter++); DateTime now = DateTime.UtcNow; MembershipEntry MembershipEntry = new MembershipEntry { SiloAddress = siloAddress, HostName = hostName, RoleName = hostName, InstanceName = hostName, Status = SiloStatus.Joining, StartTime = now, IAmAliveTime = now }; return MembershipEntry; }
public async Task GatewaySelection_SqlServer() { string testName = Guid.NewGuid().ToString();// TestContext.TestName; Guid serviceId = Guid.NewGuid(); GlobalConfiguration cfg = new GlobalConfiguration { ServiceId = serviceId, DeploymentId = testName, DataConnectionString = TestHelper.TestUtils.GetSqlConnectionString() }; var membership = new SqlMembershipTable(); var logger = LogManager.GetLogger(membership.GetType().Name); await membership.InitializeMembershipTable(cfg, true, logger); IMembershipTable membershipTable = membership; // Pre-populate gateway table with data int count = 1; foreach (Uri gateway in gatewayAddressUris) { output.WriteLine("Adding gataway data for {0}", gateway); SiloAddress siloAddress = gateway.ToSiloAddress(); Assert.IsNotNull(siloAddress, "Unable to get SiloAddress from Uri {0}", gateway); MembershipEntry MembershipEntry = new MembershipEntry { SiloAddress = siloAddress, HostName = gateway.Host, Status = SiloStatus.Active, ProxyPort = gateway.Port, StartTime = DateTime.UtcNow }; var tableVersion = new TableVersion(count, Guid.NewGuid().ToString()); output.WriteLine("Inserting gataway data for {0} with TableVersion={1}", MembershipEntry, tableVersion); bool ok = await membershipTable.InsertRow(MembershipEntry, tableVersion); count++; Assert.IsTrue(ok, "Membership record should have been written OK but were not: {0}", MembershipEntry); output.WriteLine("Successfully inserted Membership row {0}", MembershipEntry); } MembershipTableData data = await membershipTable.ReadAll(); Assert.IsNotNull(data, "MembershipTableData returned"); Assert.AreEqual(gatewayAddressUris.Count, data.Members.Count, "Number of gateway records read"); IGatewayListProvider listProvider = membership; Test_GatewaySelection(listProvider); }
// Utility methods private static MembershipEntry CreateMembershipEntryForTest() { var siloAddress = SiloAddress.NewLocalAddress(SiloAddress.AllocateNewGeneration()); var now = DateTime.UtcNow; var membershipEntry = new MembershipEntry { SiloAddress = siloAddress, HostName = hostName, RoleName = hostName, InstanceName = hostName, Status = SiloStatus.Joining, StartTime = now, IAmAliveTime = now }; return membershipEntry; }
public Task<bool> UpdateRow(MembershipEntry entry, string etag, TableVersion tableVersion) { throw new NotImplementedException(); }
public Task UpdateIAmAlive(MembershipEntry entry) { throw new NotImplementedException(); }
public Task<bool> InsertRow(MembershipEntry entry, TableVersion tableVersion) { throw new NotImplementedException(); }
public async Task MembershipTable_Consul_ReadAll_InsertRow_UpdateIAmAlive_DeleteRow() { await MembershipTable_Consul_Init(); var table = await ConsulMembershipTable.ReadAll(); Assert.IsTrue(table.Members.Count == 0); var me = new MembershipEntry() { FaultZone = 0, HostName = "xxx", IAmAliveTime = DateTime.Parse("1900-01-01"), InstanceName = "instance2", RoleName = "role", ProxyPort = 123, SiloAddress = SiloAddress.FromParsableString("127.0.0.1:22223@12345"), StartTime = DateTime.Now, Status = SiloStatus.Joining, SuspectTimes = new List<Tuple<SiloAddress, DateTime>>(), UpdateZone = 0 }; var ret = await ConsulMembershipTable.InsertRow(me, table.Version); Assert.IsTrue(ret); var refreshedTable = await ConsulMembershipTable.ReadAll(); Assert.IsTrue(refreshedTable.Members.Count == 1); var entry = refreshedTable.Members.Select(t => t.Item1).FirstOrDefault(); var iamAliveDate = DateTime.UtcNow; iamAliveDate = DateTime.Parse(iamAliveDate.ToString());//TRICKY: because miliseconds are NOT stored so Assert wouldnt work await ConsulMembershipTable.UpdateIAmAlive(entry); var updatedEntryTable = await ConsulMembershipTable.ReadRow(entry.SiloAddress); var updatedEntry = updatedEntryTable.Members.Select(t => t.Item1).FirstOrDefault(); Assert.IsTrue(updatedEntry.IAmAliveTime>=iamAliveDate); }
// Utility methods private static MembershipEntry CreateMembershipEntryForTest() { SiloAddress siloAddress = SiloAddress.NewLocalAddress(Interlocked.Increment(ref generation)); var now = DateTime.UtcNow; var membershipEntry = new MembershipEntry { SiloAddress = siloAddress, HostName = hostName, RoleName = hostName, InstanceName = hostName, Status = SiloStatus.Joining, StartTime = now, IAmAliveTime = now }; return membershipEntry; }
internal static async Task MembershipTable_ReadRow_Insert_Read(IMembershipTable membership, SiloAddress siloAddress) { MembershipTableData data = await membership.ReadAll(); TableVersion tableVersion = data.Version; logger.Info("Membership.ReadAll returned VableVersion={0} Data={1}", tableVersion, data); Assert.AreEqual(0, data.Members.Count, "Number of records returned - no table version row"); DateTime now = DateTime.UtcNow; MembershipEntry entry = new MembershipEntry { SiloAddress = siloAddress, StartTime = now, Status = SiloStatus.Active, }; TableVersion newTableVersion = tableVersion.Next(); bool ok = await membership.InsertRow(entry, newTableVersion); Assert.IsTrue(ok, "InsertRow completed successfully"); data = await membership.ReadRow(siloAddress); tableVersion = data.Version; logger.Info("Membership.ReadRow returned VableVersion={0} Data={1}", tableVersion, data); Assert.AreEqual(1, data.Members.Count, "Number of records returned - data row only"); Assert.IsNotNull(tableVersion.VersionEtag, "New version ETag should not be null"); Assert.AreNotEqual(newTableVersion.VersionEtag, tableVersion.VersionEtag, "New VersionEtag differetnfrom last"); Assert.AreEqual(newTableVersion.Version, tableVersion.Version, "New table version number"); MembershipEntry MembershipEntry = data.Members[0].Item1; string eTag = data.Members[0].Item2; logger.Info("Membership.ReadRow returned MembershipEntry ETag={0} Entry={1}", eTag, MembershipEntry); Assert.IsNotNull(eTag, "ETag should not be null"); Assert.IsNotNull(MembershipEntry, "MembershipEntry should not be null"); }
static void Main(string[] args) { docStore = new DocumentStore { ConnectionStringName = "OrleansTest" }; docStore.Initialize(); var customSerializer = docStore.Conventions.CreateSerializer(); customSerializer.Converters = new JsonConverterCollection(customSerializer.Converters); customSerializer.Converters.Add(new IPAddressConverter()); customSerializer.Converters.Add(new IPEndPointConverter()); /* docStore.Conventions.CustomizeJsonSerializer += serializer => { var converters = serializer.Converters = new JsonConverterCollection(serializer.Converters); converters.Add(new IPAddressConverter()); converters.Add(new IPEndPointConverter()); }; */ var ip = System.Net.IPAddress.Parse("127.0.0.1"); var endpoint = new System.Net.IPEndPoint(ip, 2020); var str = ip.ToString(); var me = new Orleans.MembershipEntry { FaultZone = 1, HostName = Environment.MachineName, IAmAliveTime = DateTime.Now, InstanceName = "Silo1", ProxyPort = 9090, RoleName = "Primary", //SiloAddress = SiloAddress.New(new IPEndPoint(IPAddress.Loopback, 9090), 1), SiloAddress = Orleans.Runtime.SiloAddress.NewLocalAddress(1), StartTime = DateTime.Now.AddMinutes(-1), Status = SiloStatus.Active, UpdateZone = 1 }; var rme = RavenJObject.FromObject(me, customSerializer); //var obj = RavenJObject.FromObject(IPAddress.Parse("127.0.0.1")); using (IDocumentSession session = docStore.OpenSession()) { try { /* ITraceWriter traceWriter = new MemoryTraceWriter(); JsonConvert.SerializeObject( me, new JsonSerializerSettings { TraceWriter = traceWriter, Converters = { new IPAddressConverter(), new IPEndPointConverter() } }); Console.WriteLine(traceWriter); */ /* session.Store(new Orleans.MembershipEntry { FaultZone = 1, HostName = Environment.MachineName, IAmAliveTime = DateTime.Now, InstanceName = "Silo1", ProxyPort = 9090, RoleName = "Primary", //SiloAddress = SiloAddress.New(new IPEndPoint(IPAddress.Loopback, 9090), 1), SiloAddress = Orleans.Runtime.SiloAddress.NewLocalAddress(1), StartTime = DateTime.Now.AddMinutes(-1), Status = SiloStatus.Active, UpdateZone = 1 }, "orleanssiloinstance/1"); */ session.Store(rme, "OrleansSiloInstances/1"); session.SaveChanges(); } catch (JsonSerializationException jse) { throw; } } Console.WriteLine("Press any key"); Console.ReadKey(); }