コード例 #1
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="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.");
            }
        }
コード例 #2
0
        // 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;
            }
        }
コード例 #3
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;
            }
        }
コード例 #4
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.");
            }
        }
コード例 #5
0
ファイル: ShardingManager.cs プロジェクト: AdrianVM/apex-vox
        public void RegisterNewTenantIfNotExists(long tenantId)
        {
            SqlConnectionStringBuilder smConnectionString = new SqlConnectionStringBuilder(_shardingManagerOptions.ShardMap);

            ShardMapManager smm;

            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(_shardingManagerOptions.ShardMapManager, ShardMapManagerLoadPolicy.Lazy, out smm))
            {
                throw new InvalidOperationException("Error accessing shard map manager database");
            }

            ListShardMap <long> sm;

            if (!smm.TryGetListShardMap <long>(ElasticScaleConstants.ListMapName, out sm))
            {
                throw new InvalidOperationException("Error accessing list shard map of the sharding map manager database");
            }

            ShardLocation shardLocation = new ShardLocation(smConnectionString.DataSource, smConnectionString.InitialCatalog);

            Shard shard;

            if (!sm.TryGetShard(shardLocation, out shard))
            {
                shard = sm.CreateShard(shardLocation);
            }

            if (!sm.TryGetMappingForKey(tenantId, out _))
            {
                sm.CreatePointMapping(tenantId, shard);
            }
        }
コード例 #6
0
        /// <summary>
        /// Tries to get the ShardMapManager that is stored in the specified database.
        /// </summary>
        public static ShardMapManager TryGetShardMapManager(string shardMapManagerServerName, string shardMapManagerDatabaseName)
        {
            string shardMapManagerConnectionString =
                ShardManagmentConfig.GetConnectionString(
                    ShardManagmentConfig.ShardMapManagerServerName,
                    ShardManagmentConfig.ShardMapDatabase);

            if (!SqlDatabaseUtils.DatabaseExists(shardMapManagerServerName, shardMapManagerDatabaseName))
            {
                // Shard Map Manager database has not yet been created
                return(null);
            }

            ShardMapManager shardMapManager;
            bool            smmExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                shardMapManagerConnectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out shardMapManager);

            if (!smmExists)
            {
                // Shard Map Manager database exists, but Shard Map Manager has not been created
                return(null);
            }

            return(shardMapManager);
        }
コード例 #7
0
ファイル: TenantExtensions.cs プロジェクト: Pointy-hair/KB
        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);
            });
        }
コード例 #8
0
        public static void ShardMapManagerFactoryTestsInitialize(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();
                }

                // Testing TryGetSqlShardMapManager failure case here instead of in TryGetShardMapManager_Fail()
                // There is no method to cleanup GSM objects, so if some other test runs in lab before
                // TryGetShardMapManager_Fail, then this call will actually suceed as it will find earlier SMM structures.
                // Calling it just after creating database makes sure that GSM does not exist.
                // Other options were to recreate SMM database in tests (this will increase test duration) or
                // delete storage structures (t-sql delete) in the test which is not very clean solution.

                ShardMapManager smm = null;

                bool lookupSmm = ShardMapManagerFactory.TryGetSqlShardMapManager(
                    Globals.ShardMapManagerConnectionString,
                    ShardMapManagerLoadPolicy.Eager,
                    RetryBehavior.DefaultRetryBehavior,
                    out smm);

                Assert.IsFalse(lookupSmm);
            }
        }
コード例 #9
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);
            }
        }
コード例 #10
0
        private ShardMapManager GetShardMapManager()
        {
            var catalogDbConnectionString = GetConnectionStingWithCredentials();

            return(!ShardMapManagerFactory.TryGetSqlShardMapManager(catalogDbConnectionString, ShardMapManagerLoadPolicy.Lazy, out ShardMapManager shardMapManager)
                                ? ShardMapManagerFactory.CreateSqlShardMapManager(catalogDbConnectionString)
                                : shardMapManager);
        }
コード例 #11
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);

                // 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");
                }
            }
        }
コード例 #12
0
        public ShardMapManager CreateOrGet(string connectionString)
        {
            var shardMapManagerExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                connectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out var shardMapManager);

            return(shardMapManagerExists ? shardMapManager :
                   ShardMapManagerFactory.CreateSqlShardMapManager(connectionString));
        }
コード例 #13
0
        public HorizontalShard(string _mapManagerServer, string _userID, string _password, string _mapManagerName, string _secondaryDR)
        {
            connectionString = string.Format("Data Source={0};Initial Catalog={3};Integrated Security=False;User ID={1};Password={2};Encrypt=True",
                                             _mapManagerServer, _userID, _password, _mapManagerName);
            shardConnectionString = string.Format("Integrated Security=False;User ID={0};Password={1};Encrypt=True", _userID, _password);
            mapManagerName        = _mapManagerName;

            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(connectionString, ShardMapManagerLoadPolicy.Lazy, out ShardMapManager))
            {
                ShardMapManager = null;
            }
        }
コード例 #14
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);
        }
コード例 #15
0
        public void EnsureCreated(string connectionString)
        {
            var shardMapManagerExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                connectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out var shardMapManager);

            if (!shardMapManagerExists)
            {
                ShardMapManagerFactory.CreateSqlShardMapManager(connectionString);
            }
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: vijayaraju/code-challenges
        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));
        }
コード例 #17
0
        public ShardMapManager GetShardMapManagerIfExists()
        {
            var shardMapManagerConnectionString = GetSmmConnectionString();
            // 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;
            var             shardMapManagerExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                shardMapManagerConnectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out shardMapManager);

            return(!shardMapManagerExists ? null : shardMapManager);
        }
コード例 #18
0
ファイル: ShardingManager.cs プロジェクト: AdrianVM/apex-vox
        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);
            }
        }
コード例 #19
0
        public ShardMapManager Get(string connectionString)
        {
            var shardMapManagerExists = ShardMapManagerFactory.TryGetSqlShardMapManager(
                connectionString,
                ShardMapManagerLoadPolicy.Lazy,
                out var shardMapManager);

            if (!shardMapManagerExists)
            {
                throw new ShardMapManagerNotExistsException();
            }

            return(shardMapManager);
        }
コード例 #20
0
        /// <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);
        }
コード例 #21
0
ファイル: Sharding.cs プロジェクト: kalavrouzi/Elastic
        // 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");
        }
コード例 #22
0
        /// <summary>
        /// Tries to get the ShardMapManager that is stored in the specified database.
        /// </summary>
        public static ShardMapManager TryGetShardMapManager()
        {
            if (!SqlDatabaseUtils.ExistsDatabase(MultiShardConfiguration.ShardMapManagerServerName, MultiShardConfiguration.ShardMapManagerDatabaseName))
            {
                // Shard Map Manager database has not yet been created
                return(null);
            }

            ShardMapManager shardMapManager;
            bool            smmExists = ShardMapManagerFactory.TryGetSqlShardMapManager(MultiShardConfiguration.GetConnectionString(),
                                                                                        ShardMapManagerLoadPolicy.Lazy, out shardMapManager);

            if (!smmExists)
            {
                // Shard Map Manager database exists, but Shard Map Manager has not been created
                return(null);
            }
            return(shardMapManager);
        }
コード例 #23
0
        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);
        }
コード例 #24
0
        /// <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);
        }
コード例 #25
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);
        }
コード例 #26
0
        public DbConnection OpenDDRConnection()
        {
            var connectionString = _configuration.GetConnectionString("ShardMapManager");
            SqlConnectionStringBuilder connStrBldr = new SqlConnectionStringBuilder(connectionString);

            SqlConnectionStringBuilder emptyCon = new SqlConnectionStringBuilder
            {
                UserID          = connStrBldr.UserID,
                Password        = connStrBldr.Password,
                ApplicationName = connStrBldr.ApplicationName
            };

            ShardMapManager smm;

            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(connStrBldr.ConnectionString, ShardMapManagerLoadPolicy.Lazy, out smm))
            {
                return(null);
            }

            ListShardMap <long> shardMap;

            if (!smm.TryGetListShardMap <long>(ElasticScaleConstants.ListMapName, out shardMap))
            {
                return(null);
            }

            var           tenantId = _tenantProvider.GetTenantId();
            SqlConnection conn     = shardMap.OpenConnectionForKey(tenantId, emptyCon.ConnectionString, ConnectionOptions.Validate);

            SqlCommand cmd = conn.CreateCommand();

            cmd.CommandText = @"SET CONTEXT_INFO " + tenantId;
            cmd.CommandType = System.Data.CommandType.Text;

            cmd.ExecuteNonQuery();

            return(conn);
        }
コード例 #27
0
ファイル: Sharding.cs プロジェクト: phuocquach/amazing-shop
        public Sharding(string shardManagerDatabase, string connectionString)
        {
            ShardMapManager shardMapManager;

            if (!ShardMapManagerFactory.TryGetSqlShardMapManager(connectionString, ShardMapManagerLoadPolicy.Lazy, out shardMapManager))
            {
                this.ShardMapManager = ShardMapManagerFactory.CreateSqlShardMapManager(connectionString);
            }
            else
            {
                this.ShardMapManager = shardMapManager;
            }
            ListShardMap <byte[]> shardMap;

            if (!ShardMapManager.TryGetListShardMap(shardManagerDatabase, out shardMap))
            {
                this.ShardMap = ShardMapManager.CreateListShardMap <byte[]>(shardManagerDatabase);
            }
            else
            {
                this.ShardMap = shardMap;
            }
        }
コード例 #28
0
        public static bool ShardMapManagerExists(string connectionString)
        {
            ShardMapManager _ = null;

            return(ShardMapManagerFactory.TryGetSqlShardMapManager(connectionString, ShardMapManagerLoadPolicy.Eager, out _));
        }