/// <summary>
        /// Initializes a new instance of the <see cref="Sharding" /> class.
        /// <para>Bootstrap Elastic Scale by creating a new shard map manager and a shard map on the shard map manager database if necessary.</para>
        /// </summary>
        /// <param name="catalogDatabase">The catalog database.</param>
        /// <param name="connectionString">The connection string.</param>
        /// <param name="catalogRepository">The catalog repository.</param>
        /// <param name="tenantRepository">The tenant repository.</param>
        /// <param name="utilities">The utilities class.</param>
        /// <exception cref="System.ApplicationException">Error in sharding initialisation.</exception>
        public Sharding(string catalogDatabase, string connectionString, ICatalogRepository catalogRepository, ITenantRepository tenantRepository, IUtilities utilities)
        {
            try
            {
                _catalogRepository = catalogRepository;
                _tenantRepository  = tenantRepository;
                _utilities         = utilities;

                // Deploy shard map manager
                // if shard map manager exists, refresh content, else create it, then add content
                ShardMapManager smm;
                ShardMapManager =
                    !ShardMapManagerFactory.TryGetSqlShardMapManager(connectionString,
                                                                     ShardMapManagerLoadPolicy.Lazy, out smm)
                        ? ShardMapManagerFactory.CreateSqlShardMapManager(connectionString)
                        : smm;

                // check if shard map exists and if not, create it
                ListShardMap <int> sm;
                ShardMap = !ShardMapManager.TryGetListShardMap(catalogDatabase, out sm)
                    ? ShardMapManager.CreateListShardMap <int>(catalogDatabase)
                    : sm;
            }
            catch (Exception exception)
            {
                Trace.TraceError(exception.Message, "Error in sharding initialisation.");
            }
        }
        // Bootstrap Elastic Scale by creating a new shard map manager and a shard map on
        // the shard map manager database if necessary.
        public ShardingClient(string shardMapManagerServer, string shardMapManagerDb, string shardMapManagerConnString, string shardMapName = "ONETUG_DEMO")
        {
            // Connection string with administrative credentials for the root database
            var connStrBldr = new SqlConnectionStringBuilder(shardMapManagerConnString);

            connStrBldr.DataSource     = shardMapManagerServer;
            connStrBldr.InitialCatalog = shardMapManagerDb;

            // Deploy shard map manager.
            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(connStrBldr.ConnectionString, ShardMapManagerLoadPolicy.Lazy, out var existingShardMapManager))
            {
                ShardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(connStrBldr.ConnectionString);
            }
            else
            {
                ShardMapManager = existingShardMapManager;
            }

            if (!ShardMapManager.TryGetListShardMap <int>(shardMapName, out var existingListShardMap))
            {
                ShardMap = ShardMapManager.CreateListShardMap <int>(shardMapName);
            }
            else
            {
                ShardMap = existingListShardMap;
            }
        }
        public void TestSetSchemaInfoWithSpecialChars()
        {
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            ShardMapManager shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerLoadPolicy.Lazy);

            SchemaInfoCollection siCollection = shardMapManager.GetSchemaInfoCollection();

            SchemaInfo si = new SchemaInfo();

            ShardedTableInfo sti = new ShardedTableInfo(NewNameWithSpecialChars(), NewNameWithSpecialChars());

            si.Add(sti);

            string mdName = String.Format("TestSI_{0}", Guid.NewGuid());

            siCollection.Add(mdName, si);

            SchemaInfo sdmdRead = siCollection.Get(mdName);

            AssertEqual(si, sdmdRead);
        }
Beispiel #4
0
        public void TryGetShardMapManager_Success()
        {
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            foreach (ShardMapManagerLoadPolicy loadPolicy in Enum.GetValues(typeof(ShardMapManagerLoadPolicy)))
            {
                ShardMapManager smm;
                bool            success;

                success = ShardMapManagerFactory.TryGetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    loadPolicy,
                    out smm);
                Assert.IsTrue(success);
                Assert.IsNotNull(smm);

                success = ShardMapManagerFactory.TryGetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    loadPolicy,
                    RetryBehavior.DefaultRetryBehavior,
                    out smm);
                Assert.IsTrue(success);
                Assert.IsNotNull(smm);
            }
        }
Beispiel #5
0
        // Bootstrap Elastic Scale by creating a new shard map manager and a shard map on
        // the shard map manager database if necessary.
        public Sharding(string smmserver, string smmdatabase, string smmconnstr)
        {
            // Connection string with administrative credentials for the root database
            SqlConnectionStringBuilder connStrBldr = new SqlConnectionStringBuilder(smmconnstr);

            connStrBldr.DataSource     = smmserver;
            connStrBldr.InitialCatalog = smmdatabase;

            // Deploy shard map manager.
            ShardMapManager smm;

            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(connStrBldr.ConnectionString, ShardMapManagerLoadPolicy.Lazy, out smm))
            {
                this.ShardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(connStrBldr.ConnectionString);
            }
            else
            {
                this.ShardMapManager = smm;
            }

            ListShardMap <int> sm;

            if (!ShardMapManager.TryGetListShardMap <int>("ElasticScaleWithEF", out sm))
            {
                this.ShardMap = ShardMapManager.CreateListShardMap <int>("ElasticScaleWithEF");
            }
            else
            {
                this.ShardMap = sm;
            }
        }
Beispiel #6
0
        private static void TryAddShardMapManagement <TTenantIdentity>(IServiceCollection services,
                                                                       string connectionString)
        {
            services.TryAddSingleton(s =>
            {
                var shardingConfig = s.GetService <IOptions <ShardingConfiguration> >().Value;
                EnsureDbExists(connectionString, shardingConfig.ElasticPool);
                if (!ShardMapManagerFactory.TryGetSqlShardMapManager(
                        connectionString,
                        ShardMapManagerLoadPolicy.Lazy,
                        out ShardMapManager shardMapManager))
                {
                    ShardMapManagerFactory.CreateSqlShardMapManager(connectionString);

                    shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
                        connectionString,
                        ShardMapManagerLoadPolicy.Lazy);
                }

                return(shardMapManager);
            });

            services.TryAddSingleton(s =>
            {
                var smm        = s.GetService <ShardMapManager>();
                var options    = s.GetService <IOptions <ShardingConfiguration> >().Value;
                string mapName = options.ShardMap;
                // check if shardmap exists and if not, create it
                if (!smm.TryGetListShardMap(mapName, out ListShardMap <TTenantIdentity> shardMap))
                {
                    return(smm.CreateListShardMap <TTenantIdentity>(mapName));
                }
                return(shardMap);
            });
        }
Beispiel #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Sharding" /> class.
        /// <para>Bootstrap Elastic Scale by creating a new shard map manager and a shard map on the shard map manager database if necessary.</para>
        /// </summary>
        /// <param name="catalogConfig">The catalog configuration.</param>
        /// <param name="databaseConfig">The database configuration.</param>
        /// <param name="tenantsRepository">The tenants repository.</param>
        /// <param name="helper">The helper.</param>
        public Sharding(CatalogConfig catalogConfig, DatabaseConfig databaseConfig, ITenantsRepository tenantsRepository, IHelper helper)
        {
            try
            {
                _tenantsRepository = tenantsRepository;
                _helper            = helper;

                var smmconnstr = _helper.GetSqlConnectionString(databaseConfig, catalogConfig);

                // Deploy shard map manager
                // if shard map manager exists, refresh content, else create it, then add content
                ShardMapManager smm;
                ShardMapManager =
                    !ShardMapManagerFactory.TryGetSqlShardMapManager(smmconnstr,
                                                                     ShardMapManagerLoadPolicy.Lazy, out smm)
                        ? ShardMapManagerFactory.CreateSqlShardMapManager(smmconnstr)
                        : smm;

                // check if shard map exists and if not, create it
                ListShardMap <int> sm;
                ShardMap = !ShardMapManager.TryGetListShardMap(catalogConfig.CatalogDatabase, out sm)
                    ? ShardMapManager.CreateListShardMap <int>(catalogConfig.CatalogDatabase)
                    : sm;
            }
            catch (Exception ex)
            {
                // _logger.LogError(0, ex, "Error in sharding initialisation.");
                throw new ApplicationException("Error in sharding initialisation.");
            }
        }
        public static void ShardMapperTestsInitialize(TestContext testContext)
        {
            // Clear all connection pools.
            SqlConnection.ClearAllPools();

            using (SqlConnection conn = new SqlConnection(Globals.ShardMapManagerTestConnectionString))
            {
                conn.Open();

                // Create ShardMapManager database
                using (SqlCommand cmd = new SqlCommand(
                           string.Format(Globals.CreateDatabaseQuery, Globals.ShardMapManagerDatabaseName),
                           conn))
                {
                    cmd.ExecuteNonQuery();
                }

                // Create shard databases
                for (int i = 0; i < DateTimeShardMapperTests.s_shardedDBs.Length; i++)
                {
                    using (SqlCommand cmd = new SqlCommand(
                               string.Format(Globals.DropDatabaseQuery, DateTimeShardMapperTests.s_shardedDBs[i]),
                               conn))
                    {
                        cmd.ExecuteNonQuery();
                    }

                    using (SqlCommand cmd = new SqlCommand(
                               string.Format(Globals.CreateDatabaseQuery, DateTimeShardMapperTests.s_shardedDBs[i]),
                               conn))
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
            }

            // Create shard map manager.
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            // Create list shard map.
            ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerLoadPolicy.Lazy);

            ListShardMap <DateTime> lsm = smm.CreateListShardMap <DateTime>(DateTimeShardMapperTests.s_listShardMapName);

            Assert.IsNotNull(lsm);

            Assert.AreEqual(DateTimeShardMapperTests.s_listShardMapName, lsm.Name);

            // Create range shard map.
            RangeShardMap <DateTime> rsm = smm.CreateRangeShardMap <DateTime>(DateTimeShardMapperTests.s_rangeShardMapName);

            Assert.IsNotNull(rsm);

            Assert.AreEqual(DateTimeShardMapperTests.s_rangeShardMapName, rsm.Name);
        }
        private ShardMapManager GetShardMapManager()
        {
            var catalogDbConnectionString = GetConnectionStingWithCredentials();

            return(!ShardMapManagerFactory.TryGetSqlShardMapManager(catalogDbConnectionString, ShardMapManagerLoadPolicy.Lazy, out ShardMapManager shardMapManager)
                                ? ShardMapManagerFactory.CreateSqlShardMapManager(catalogDbConnectionString)
                                : shardMapManager);
        }
 private bool CreateShardMapManager()
 {
     try
     {
         ShardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(connectionString);
         return(true);
     }
     catch { ShardMapManager = null; return(false); }
 }
        public void TryGetShardMapManager_Success()
        {
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            foreach (ShardMapManagerLoadPolicy loadPolicy in Enum.GetValues(typeof(ShardMapManagerLoadPolicy)))
            {
                ShardMapManager smm;
                bool            success;

                success = ShardMapManagerFactory.TryGetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    loadPolicy,
                    out smm);
                Assert.IsTrue(success);
                Assert.IsNotNull(smm);

                success = ShardMapManagerFactory.TryGetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    loadPolicy,
                    RetryBehavior.DefaultRetryBehavior,
                    out smm);
                Assert.IsTrue(success);
                Assert.IsNotNull(smm);

                // Cover all the overloads
                var sqlAuthLogin = new SqlAuthenticationLogin(Globals.ShardMapManagerConnectionString, Globals.SqlLoginTestUser, Globals.SqlLoginTestPassword);

                if (sqlAuthLogin.Create())
                {
                    success = ShardMapManagerFactory.TryGetSqlShardMapManager(
                        Globals.ShardMapManagerConnectionStringForSqlAuth,
                        Globals.ShardUserCredentialForSqlAuth(sqlAuthLogin.UniquifiedUserName),
                        loadPolicy,
                        RetryBehavior.DefaultRetryBehavior,
                        out smm);
                    Assert.IsTrue(success);
                    Assert.IsNotNull(smm);

                    success = ShardMapManagerFactory.TryGetSqlShardMapManager(
                        Globals.ShardMapManagerConnectionStringForSqlAuth,
                        Globals.ShardUserCredentialForSqlAuth(sqlAuthLogin.UniquifiedUserName),
                        loadPolicy,
                        RetryBehavior.DefaultRetryBehavior,
                        null,
                        out smm);
                    Assert.IsTrue(success);
                    Assert.IsNotNull(smm);
                }
                else
                {
                    Assert.Inconclusive("Failed to create sql login, test skipped");
                }
            }
        }
Beispiel #12
0
        public ShardMapManager CreateOrGet(string connectionString)
        {
            var shardMapManagerExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                connectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out var shardMapManager);

            return(shardMapManagerExists ? shardMapManager :
                   ShardMapManagerFactory.CreateSqlShardMapManager(connectionString));
        }
        public void GetShardMapManager_Success()
        {
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            foreach (ShardMapManagerLoadPolicy loadPolicy in Enum.GetValues(typeof(ShardMapManagerLoadPolicy)))
            {
                ShardMapManager smm1 = ShardMapManagerFactory.GetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    loadPolicy);
                Assert.IsNotNull(smm1);

                ShardMapManager smm2 = ShardMapManagerFactory.GetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    loadPolicy,
                    RetryBehavior.DefaultRetryBehavior);
                Assert.IsNotNull(smm2);

                var sqlAuthLogin = new SqlAuthenticationLogin(Globals.ShardMapManagerConnectionString, Globals.SqlLoginTestUser, Globals.SqlLoginTestPassword);

                if (sqlAuthLogin.Create())
                {
                    // Cover all the GetSqlShardMapManager overloads
                    ShardMapManager smm3 = ShardMapManagerFactory.GetSqlShardMapManager(
                        Globals.ShardMapManagerConnectionStringForSqlAuth,
                        Globals.ShardUserCredentialForSqlAuth(sqlAuthLogin.UniquifiedUserName),
                        loadPolicy,
                        RetryBehavior.DefaultRetryBehavior);
                    Assert.IsNotNull(smm3);

                    ShardMapManager smm4 = ShardMapManagerFactory.GetSqlShardMapManager(
                        Globals.ShardMapManagerConnectionStringForSqlAuth,
                        Globals.ShardUserCredentialForSqlAuth(sqlAuthLogin.UniquifiedUserName),
                        loadPolicy,
                        RetryBehavior.DefaultRetryBehavior,
                        null);
                    Assert.IsNotNull(smm4);

                    ShardMapManager smm5 = ShardMapManagerFactory.GetSqlShardMapManager(
                        Globals.ShardMapManagerConnectionStringForSqlAuth,
                        Globals.ShardUserCredentialForSqlAuth(sqlAuthLogin.UniquifiedUserName),
                        loadPolicy);
                    Assert.IsNotNull(smm5);

                    // Drop test login
                    sqlAuthLogin.Drop();
                }
                else
                {
                    Assert.Inconclusive("Failed to create sql login, test skipped");
                }
            }
        }
Beispiel #14
0
        public void Deploy()
        {
            if (ShardMapManager != null)
            {
                // shard map manager has already been deployed
                return;
            }

            ShardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(
                m_ConnectionString,
                ShardMapManagerCreateMode.KeepExisting);
        }
Beispiel #15
0
        private static ShardMapManager CreateOrGetShardMapManager(IConfiguration configuration)
        {
            var shardMapManagerConnection = configuration.GetConnectionString("ShardMapManagerConnection");
            var shardMapManagerExists     = ShardMapManagerFactory.TryGetSqlShardMapManager(shardMapManagerConnection, ShardMapManagerLoadPolicy.Lazy, out ShardMapManager shardMapManager);

            if (!shardMapManagerExists)
            {
                shardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(shardMapManagerConnection);
            }

            return(shardMapManager);
        }
Beispiel #16
0
        public void EnsureCreated(string connectionString)
        {
            var shardMapManagerExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                connectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out var shardMapManager);

            if (!shardMapManagerExists)
            {
                ShardMapManagerFactory.CreateSqlShardMapManager(connectionString);
            }
        }
Beispiel #17
0
        private static ShardMapManager GetOrCreateCreateSqlShardMapManager(string connectionString)
        {
            ShardMapManager manager;

            if (ShardMapManagerFactory.TryGetSqlShardMapManager(connectionString, ShardMapManagerLoadPolicy.Eager, RetryBehavior.DefaultRetryBehavior, out manager))
            {
                Console.WriteLine("Shard map manager already exists");
                return(manager);
            }

            Console.WriteLine("Creating shard map manager");
            return(ShardMapManagerFactory.CreateSqlShardMapManager(connectionString, ShardMapManagerCreateMode.KeepExisting, RetryBehavior.DefaultRetryBehavior));
        }
        internal static ShardMap CreateAndGetTestShardMap()
        {
            ShardMap sm;

            ShardMapManagerFactory.CreateSqlShardMapManager(MultiShardTestUtils.ShardMapManagerConnectionString, ShardMapManagerCreateMode.ReplaceExisting);
            ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager(MultiShardTestUtils.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy);

            sm = smm.CreateListShardMap <int>(s_testShardMapName);
            for (int i = 0; i < s_testDatabaseNames.Count; i++)
            {
                sm.CreateShard(GetTestShard(s_testDatabaseNames[i]));
            }
            return(sm);
        }
Beispiel #19
0
        public void CreateShardingIfNotExists()
        {
            ShardMapManager smm;

            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(_shardingManagerOptions.ShardMapManager, ShardMapManagerLoadPolicy.Lazy, out smm))
            {
                smm = ShardMapManagerFactory.CreateSqlShardMapManager(_shardingManagerOptions.ShardMapManager);
            }

            if (!smm.TryGetListShardMap <long>(ElasticScaleConstants.ListMapName, out _))
            {
                smm.CreateListShardMap <long>(ElasticScaleConstants.ListMapName);
            }
        }
        public void CreateShardMapManager_NoOverwrite()
        {
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            ShardManagementException smme = AssertExtensions.AssertThrows <ShardManagementException>(() =>
                                                                                                     ShardMapManagerFactory.CreateSqlShardMapManager(
                                                                                                         Globals.ShardMapManagerConnectionString,
                                                                                                         ShardMapManagerCreateMode.KeepExisting));

            Assert.AreEqual(ShardManagementErrorCategory.ShardMapManagerFactory, smme.ErrorCategory);
            Assert.AreEqual(ShardManagementErrorCode.ShardMapManagerStoreAlreadyExists, smme.ErrorCode);
        }
Beispiel #21
0
        /// <summary>
        ///   Creates a shard map manager in the database specified by the given connection string.
        /// </summary>
        public ShardMapManager CreateOrGetShardMapManager()
        {
            var shardMapManager = GetShardMapManagerIfExists();

            if (shardMapManager != null)
            {
                return(shardMapManager);
            }
            // The Shard Map Manager does not exist, so create it
            var shardMapManagerConnectionString = GetSmmConnectionString();

            shardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(shardMapManagerConnectionString);

            return(shardMapManager);
        }
        /// <summary>
        /// Creates a shard map manager in the database specified by the given connection string.
        /// </summary>
        public static ShardMapManager CreateOrGetShardMapManager(string shardMapManagerConnectionString)
        {
            // Get shard map manager database connection string
            // Try to get a reference to the Shard Map Manager in the Shard Map Manager database. If it doesn't already exist, then create it.
            ShardMapManager shardMapManager;
            bool            shardMapManagerExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                shardMapManagerConnectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out shardMapManager);

            if (!shardMapManagerExists)
            {
                shardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(shardMapManagerConnectionString);
            }

            return(shardMapManager);
        }
        public void TestUpdateSchemaInfo()
        {
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            ShardMapManager shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerLoadPolicy.Lazy);

            SchemaInfoCollection siCollection = shardMapManager.GetSchemaInfoCollection();

            SchemaInfo si = new SchemaInfo();

            ShardedTableInfo sti = new ShardedTableInfo("dbo", "ShardedTableName1", "ColumnName");

            si.Add(sti);

            ReferenceTableInfo rtmd = new ReferenceTableInfo("ReferenceTableName1");

            si.Add(rtmd);

            string mdName = String.Format("TestSI_{0}", Guid.NewGuid());

            // Try updating schema info without adding it first.
            SchemaInfoException siex = AssertExtensions.AssertThrows <SchemaInfoException>(
                () => siCollection.Replace(mdName, si));

            Assert.AreEqual(SchemaInfoErrorCode.SchemaInfoNameDoesNotExist, siex.ErrorCode);

            siCollection.Add(mdName, si);

            SchemaInfo sdmdNew = new SchemaInfo();

            sdmdNew.Add(new ShardedTableInfo("dbo", "NewShardedTableName1", "NewColumnName"));
            sdmdNew.Add(new ReferenceTableInfo("NewReferenceTableName1"));

            siCollection.Replace(mdName, sdmdNew);

            SchemaInfo sdmdRead = siCollection.Get(mdName);

            Assert.IsTrue(AreEqual <ShardedTableInfo>(sdmdNew.ShardedTables, sdmdRead.ShardedTables));
            Assert.IsTrue(AreEqual <ReferenceTableInfo>(sdmdNew.ReferenceTables, sdmdRead.ReferenceTables));
        }
        public void TryGetShardMapManager_Fail()
        {
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            ShardMapManager smm     = null;
            bool            success = false;

            // Null retry policy not allowed
            AssertExtensions.AssertThrows <ArgumentNullException>(() =>
                                                                  success = ShardMapManagerFactory.TryGetSqlShardMapManager(
                                                                      Globals.ShardMapManagerConnectionString,
                                                                      ShardMapManagerLoadPolicy.Eager,
                                                                      null,
                                                                      out smm));
            Assert.IsFalse(success);
            Assert.IsNull(smm);
        }
Beispiel #25
0
        // Bootstrap Elastic Scale by creating a new shard map manager and a shard map on
        // the shard map manager database if necessary.
        public Sharding()//string smmserver, string smmdatabase, string smmconnstr)
        {
            string smmserver   = Sharding.server;
            string smmconnstr  = Sharding.connectionString;
            string smmdatabase = Sharding.shardmapmgrdb;
            // Connection string with administrative credentials for the root database
            SqlConnectionStringBuilder connStrBldr = new SqlConnectionStringBuilder(smmconnstr);

            connStrBldr.DataSource     = smmserver;
            connStrBldr.InitialCatalog = smmdatabase;

            connstring = smmconnstr;

            // Deploy shard map manager.
            ShardMapManager smm;

            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(connStrBldr.ConnectionString, ShardMapManagerLoadPolicy.Lazy, out smm))
            {
                this.ShardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(connStrBldr.ConnectionString);
            }
            else
            {
                this.ShardMapManager = smm;
            }

            ListShardMap <Guid> sm;

            if (!ShardMapManager.TryGetListShardMap <Guid>(sharmapName, out sm))
            {
                this.ShardMap = ShardMapManager.CreateListShardMap <Guid>(sharmapName);
            }
            else
            {
                this.ShardMap = sm;
            }


            initDd("shard0");
            initDd("shard1");
            //initDd("shard2");
            //initDd("shard3");
            //initDd("shard4");
        }
Beispiel #26
0
        public void ShardMapManagerUpgradeTestInitialize()
        {
            // Clear all connection pools.
            SqlConnection.ClearAllPools();

            using (SqlConnection conn = new SqlConnection(Globals.ShardMapManagerTestConnectionString))
            {
                conn.Open();

                // Create ShardMapManager database.
                using (SqlCommand cmd = new SqlCommand(
                           string.Format(Globals.CreateDatabaseQuery, Globals.ShardMapManagerDatabaseName),
                           conn))
                {
                    cmd.ExecuteNonQuery();
                }

                // Create shard databases.
                for (int i = 0; i < ShardMapManagerUpgradeTests.s_shardedDBs.Length; i++)
                {
                    using (SqlCommand cmd = new SqlCommand(
                               string.Format(Globals.DropDatabaseQuery, ShardMapManagerUpgradeTests.s_shardedDBs[i]),
                               conn))
                    {
                        cmd.ExecuteNonQuery();
                    }

                    using (SqlCommand cmd = new SqlCommand(
                               string.Format(Globals.CreateDatabaseQuery, ShardMapManagerUpgradeTests.s_shardedDBs[i]),
                               conn))
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
            }

            // Create shard map manager.
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting,
                s_initialGsmVersion);
        }
Beispiel #27
0
        public void GetShardMapManager_Success()
        {
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);

            foreach (ShardMapManagerLoadPolicy loadPolicy in Enum.GetValues(typeof(ShardMapManagerLoadPolicy)))
            {
                ShardMapManager smm1 = ShardMapManagerFactory.GetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    loadPolicy);
                Assert.IsNotNull(smm1);

                ShardMapManager smm2 = ShardMapManagerFactory.GetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    loadPolicy,
                    RetryBehavior.DefaultRetryBehavior);
                Assert.IsNotNull(smm2);
            }
        }
        /// <summary>
        /// Creates a shard map manager in the database specified by the given connection string.
        /// </summary>
        public static ShardMapManager CreateOrGetShardMapManager(string shardMapManagerConnectionString)
        {
            // Get shard map manager database connection string
            // Try to get a reference to the Shard Map Manager in the Shard Map Manager database. If it doesn't already exist, then create it.
            ShardMapManager shardMapManager;
            bool            shardMapManagerExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                shardMapManagerConnectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out shardMapManager);

            if (shardMapManagerExists)
            {
                ConsoleUtils.WriteInfo("Shard Map Manager already exists");
            }
            else
            {
                // The Shard Map Manager does not exist, so create it
                shardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(shardMapManagerConnectionString);
                ConsoleUtils.WriteInfo("Created Shard Map Manager");
            }
            return(shardMapManager);
        }
Beispiel #29
0
        public ShardMap CreateShardMap()
        {
            // Deploy shard map manager.
            ShardMapManager     shardMapManager;
            ListShardMap <Guid> listShardMap;

            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(_connectionString,
                                                                 ShardMapManagerLoadPolicy.Lazy, out shardMapManager))
            {
                shardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(_connectionString);
            }
            if (!shardMapManager.TryGetListShardMap(_configuredShardMap, out listShardMap))
            {
                listShardMap = shardMapManager.CreateListShardMap <Guid>(_configuredShardMap);
            }
            if (_shardMapAccessor != null)
            {
                _shardMapAccessor.ShardMap = listShardMap;
            }

            /*
             * TO DO : This code needs to be externalized
             * string appserver = "bddbdev.database.windows.net";
             * string appdatabase = "Test";
             * Guid TenantId = Guid.Parse("3e376368-bf33-49ce-a0de-e9ad6438aa1c");
             * var shardLocation = new ShardLocation(appserver, appdatabase);
             * if (!listShardMap.TryGetShard(shardLocation, out var shard))
             * {
             *   shard=listShardMap.CreateShard(new ShardLocation(appserver, appdatabase));
             *
             * }
             * PointMapping<Guid> mapping;
             * if (!listShardMap.TryGetMappingForKey(TenantId, out mapping))
             * {
             *   listShardMap.CreatePointMapping(TenantId, shard);
             * }*/
            return(listShardMap);
        }
Beispiel #30
0
        public static void ShardMapManagerTestsInitialize(TestContext testContext)
        {
            // Clear all connection pools.
            SqlConnection.ClearAllPools();

            using (SqlConnection conn = new SqlConnection(Globals.ShardMapManagerTestConnectionString))
            {
                conn.Open();

                // Create ShardMapManager database
                using (SqlCommand cmd = new SqlCommand(
                           string.Format(Globals.CreateDatabaseQuery, Globals.ShardMapManagerDatabaseName),
                           conn))
                {
                    cmd.ExecuteNonQuery();
                }
            }

            // Create the shard map manager.
            ShardMapManagerFactory.CreateSqlShardMapManager(
                Globals.ShardMapManagerConnectionString,
                ShardMapManagerCreateMode.ReplaceExisting);
        }