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());
 }
示例#4
0
        // 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;
        }
示例#6
0
        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);
 }
示例#12
0
        // 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");
        }
示例#14
0
        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();
        }