Example #1
0
        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);
        }
Example #2
0
 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;
 }
Example #3
0
        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);
        }
Example #4
0
        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;
 }