private RepMgrSite[] repmgr_site_list(ref uint countp, ref uint sizep, ref int err) { IntPtr cPtr = libdb_csharpPINVOKE.DB_ENV_repmgr_site_list(swigCPtr, ref countp, ref sizep, ref err); if (cPtr == IntPtr.Zero) { return new RepMgrSite[] { null } } ; /* * This is a big kludgy, but we need to free the memory that * repmgr_site_list mallocs. The RepMgrSite constructors will copy all * the data out of that malloc'd area and we can free it right away. * This is easier than trying to construct a SWIG generated object that * will copy everything in it's constructor, because SWIG generated * classes come with a lot of baggage. */ RepMgrSite[] ret = new RepMgrSite[countp]; for (int i = 0; i < countp; i++) { /* * We're copying data out of an array of countp DB_REPMGR_SITE * structures, whose size varies between 32- and 64-bit * platforms. */ IntPtr val = new IntPtr((IntPtr.Size == 4 ? cPtr.ToInt32() : cPtr.ToInt64()) + i * sizep); ret[i] = new RepMgrSite(new DB_REPMGR_SITE(val, false)); } libdb_csharp.__os_ufree(this, cPtr); return(ret); }
private RepMgrSite[] repmgr_site_list(ref uint countp, ref uint sizep, ref int err) { IntPtr cPtr = libdb_csharpPINVOKE.DB_ENV_repmgr_site_list(swigCPtr, ref countp, ref sizep, ref err); if (cPtr == IntPtr.Zero) return null; /* * This is a big kludgy, but we need to free the memory that * repmgr_site_list mallocs. The RepMgrSite constructors will copy all * the data out of that malloc'd area and we can free it right away. * This is easier than trying to construct a SWIG generated object that * will copy everything in it's constructor, because SWIG generated * classes come with a lot of baggage. */ RepMgrSite[] ret = new RepMgrSite[countp]; for (int i = 0; i < countp; i++) { /* * We're copying data out of an array of countp DB_REPMGR_SITE * structures, whose size varies between 32- and 64-bit * platforms. */ IntPtr val = new IntPtr((IntPtr.Size == 4 ? cPtr.ToInt32() : cPtr.ToInt64()) + i * sizep); ret[i] = new RepMgrSite(new DB_REPMGR_SITE(val, false)); } libdb_csharp.__os_ufree(this, cPtr); return ret; }
public void TestRepMgrSite() { testName = "TestRepMgrSite"; SetUpTest(true); string masterHome = testHome + "\\Master"; Configuration.ClearDir(masterHome); string clientHome = testHome + "\\Client"; Configuration.ClearDir(clientHome); ports.Clear(); AvailablePorts portGen = new AvailablePorts(); uint mPort = portGen.Current; portGen.MoveNext(); uint cPort = portGen.Current; // Open environment with replication configuration. DatabaseEnvironmentConfig cfg = new DatabaseEnvironmentConfig(); cfg.Create = true; cfg.RunRecovery = true; cfg.UseLocking = true; cfg.UseLogging = true; cfg.UseMPool = true; cfg.UseReplication = true; cfg.FreeThreaded = true; cfg.UseTxns = true; cfg.EventNotify = new EventNotifyDelegate(stuffHappened); cfg.RepSystemCfg = new ReplicationConfig(); cfg.RepSystemCfg.RepmgrSitesConfig.Add(new DbSiteConfig()); cfg.RepSystemCfg.RepmgrSitesConfig[0].Host = "127.0.0.1"; cfg.RepSystemCfg.RepmgrSitesConfig[0].Port = mPort; cfg.RepSystemCfg.RepmgrSitesConfig[0].LocalSite = true; cfg.RepSystemCfg.RepmgrSitesConfig[0].GroupCreator = true; cfg.RepSystemCfg.Priority = 100; DatabaseEnvironment mEnv = DatabaseEnvironment.Open( masterHome, cfg); mEnv.DeadlockResolution = DeadlockPolicy.DEFAULT; mEnv.RepMgrStartMaster(2); cfg.RepSystemCfg.RepmgrSitesConfig[0].Port = cPort; cfg.RepSystemCfg.RepmgrSitesConfig[0].GroupCreator = false; cfg.RepSystemCfg.Priority = 10; cfg.RepSystemCfg.RepmgrSitesConfig.Add(new DbSiteConfig()); cfg.RepSystemCfg.RepmgrSitesConfig[1].Host = "127.0.0.1"; cfg.RepSystemCfg.RepmgrSitesConfig[1].Port = mPort; cfg.RepSystemCfg.RepmgrSitesConfig[1].Helper = true; DatabaseEnvironment cEnv = DatabaseEnvironment.Open( clientHome, cfg); cEnv.RepMgrStartClient(2, false); /* Wait for client to start up */ int i = 0; while (!cEnv.ReplicationSystemStats().ClientStartupComplete) { if (i < 20) { Thread.Sleep(1000); i++; } else { throw new TestException(); } } /* * Verify the client info could be observed by master's * remote site. */ Assert.AreEqual(1, mEnv.RepMgrRemoteSites.Length); RepMgrSite rsite = mEnv.RepMgrRemoteSites[0]; Assert.AreEqual("127.0.0.1", rsite.Address.Host); Assert.AreEqual(cPort, rsite.Address.Port); Assert.AreEqual(true, rsite.isConnected); Assert.AreEqual(false, rsite.isPeer); DbSite site = mEnv.RepMgrSite("127.0.0.1", mPort); Assert.AreEqual("127.0.0.1", site.Address.Host); Assert.AreEqual(mPort, site.Address.Port); Assert.LessOrEqual(0, site.EId); Assert.AreEqual(true, site.GroupCreator); Assert.AreEqual(true, site.LocalSite); Assert.AreEqual(false, site.Helper); Assert.AreEqual(false, site.Legacy); Assert.AreEqual(false, site.Peer); site.Close(); site = mEnv.RepMgrSite("127.0.0.1", cPort); Assert.AreEqual("127.0.0.1", site.Address.Host); Assert.AreEqual(cPort, site.Address.Port); Assert.AreEqual(rsite.EId, site.EId); Assert.AreEqual(false, site.GroupCreator); Assert.AreEqual(false, site.LocalSite); Assert.AreEqual(false, site.Helper); Assert.AreEqual(false, site.Legacy); Assert.AreEqual(false, site.Peer); site.Remove(); cEnv.Close(); mEnv.Close(); /* * Update the repmgr site, and verify it is updated in * unmanaged memory. */ rsite.Address = new ReplicationHostAddress( "192.168.1.1", 1000); rsite.EId = 1024; rsite.isConnected = false; rsite.isPeer = true; Assert.AreEqual("192.168.1.1", rsite.Address.Host); Assert.AreEqual(1000, rsite.Address.Port); Assert.AreEqual(1024, rsite.EId); Assert.AreEqual(false, rsite.isConnected); Assert.AreEqual(true, rsite.isPeer); }
public void TestRepMgrSite() { testName = "TestRepMgrSite"; SetUpTest(true); string masterHome = testHome + "\\Master"; Configuration.ClearDir(masterHome); string clientHome = testHome + "\\Client"; Configuration.ClearDir(clientHome); ports.Clear(); AvailablePorts portGen = new AvailablePorts(); uint mPort = portGen.Current; portGen.MoveNext(); uint cPort = portGen.Current; // Open environment with replication configuration. DatabaseEnvironmentConfig cfg = new DatabaseEnvironmentConfig(); cfg.Create = true; cfg.RunRecovery = true; cfg.UseLocking = true; cfg.UseLogging = true; cfg.UseMPool = true; cfg.UseReplication = true; cfg.FreeThreaded = true; cfg.UseTxns = true; cfg.EventNotify = new EventNotifyDelegate(stuffHappened); cfg.RepSystemCfg = new ReplicationConfig(); cfg.RepSystemCfg.RepMgrLocalSite = new ReplicationHostAddress("127.0.0.1", mPort); cfg.RepSystemCfg.Priority = 100; cfg.RepSystemCfg.NSites = 2; DatabaseEnvironment mEnv = DatabaseEnvironment.Open( masterHome, cfg); mEnv.DeadlockResolution = DeadlockPolicy.DEFAULT; mEnv.RepMgrStartMaster(2); cfg.RepSystemCfg.RepMgrLocalSite = new ReplicationHostAddress("127.0.0.1", cPort); cfg.RepSystemCfg.Priority = 10; cfg.RepSystemCfg.AddRemoteSite( new ReplicationHostAddress("127.0.0.1", mPort), false); DatabaseEnvironment cEnv = DatabaseEnvironment.Open( clientHome, cfg); cEnv.RepMgrStartClient(2, false); /* * Verify the client info could be achived by master's * remote site. */ Assert.AreEqual(1, mEnv.RepMgrRemoteSites.Length); RepMgrSite site = mEnv.RepMgrRemoteSites[0]; Assert.AreEqual("127.0.0.1", site.Address.Host); Assert.AreEqual(cPort, site.Address.Port); Assert.AreEqual(0, site.EId); Assert.AreEqual(true, site.isConnected); Assert.AreEqual(false, site.isPeer); cEnv.Close(); mEnv.Close(); /* * Update the repmgr site, and verify it is updated in * unmanged memory. */ site.Address = new ReplicationHostAddress( "192.168.1.1", 1000); site.EId = 1024; site.isConnected = false; site.isPeer = true; Assert.AreEqual("192.168.1.1", site.Address.Host); Assert.AreEqual(1000, site.Address.Port); Assert.AreEqual(1024, site.EId); Assert.AreEqual(false, site.isConnected); Assert.AreEqual(true, site.isPeer); }
public RepMgrSite[] RepMgrSiteList() { RepMgrSite[] siteList; uint count; DB_REPMGR_SITE* rsp; lock (rscLock) { DB_ENV* evp = CheckDisposed(); RuntimeHelpers.PrepareConstrainedRegions(); try { } finally { DbRetVal ret = evp->RepMgrSiteList(evp, out count, out rsp); Util.CheckRetVal(ret); try { siteList = new RepMgrSite[count]; for (int indx = 0; indx < siteList.Length; indx++) { siteList[indx] = new RepMgrSite(rsp); rsp++; } } finally { LibDb.os_ufree(null, rsp); } } } return siteList; }