예제 #1
0
        internal static string EnsureStorageForTests(string connectionString, PartitionMap partitionMap)
        {
            var schema = "test" + Guid.NewGuid().ToString("N").Substring(0, 8);
            var source = partitionMap.Hosts.Select(x =>
            {
                var cb = new NpgsqlConnectionStringBuilder(connectionString)
                {
                    Host   = x.Host,
                    Port   = x.Port,
                    Enlist = false,
                };
                return(Builder: cb, x.Partitions);
            });

            Parallel.ForEach(source, src =>
            {
                using (var conn = new NpgsqlConnection(src.Builder.ToString()))
                {
                    conn.Open();
                    using (var cmd = SqlCommands.EnsureSchema(schema, src.Builder.Username))
                    {
                        cmd.Connection = conn;
                        cmd.ExecuteNonQuery();
                    }

                    using (var cmd = SqlCommands.EnsureStorage(src.Partitions, schema))
                    {
                        cmd.Connection = conn;
                        cmd.ExecuteNonQuery();
                    }
                }
            });

            return(schema);
        }
예제 #2
0
 public HashRangeRouting(PartitionMap partitionMap)
 {
     Expect.NotNull(partitionMap, nameof(partitionMap));
     partitionMap.ValidateOrThrow();
     partitionStep = (uint)(uint.MaxValue / partitionMap.PartitionCount);
     hosts         = CreateHosts(partitionMap);
 }
예제 #3
0
 public PgsqlBuilder WithSharding(PartitionMap partitionMap)
 {
     Expect.NotNull(partitionMap, nameof(partitionMap));
     sharding          = true;
     this.partitionMap = partitionMap;
     partitionMap.ValidateOrThrow();
     return(this);
 }
예제 #4
0
        private static Dictionary <int, PartitionHostMap> CreateHosts(PartitionMap partitionMap)
        {
            var dict = new Dictionary <int, PartitionHostMap>(partitionMap.PartitionCount);

            foreach (var phm in partitionMap.Hosts)
            {
                foreach (var p in phm.Partitions)
                {
                    dict.Add(p, phm);
                }
            }

            return(dict);
        }
예제 #5
0
        internal static void DeleteStorageAfterTests(string connectionString, string schema, PartitionMap partitionMap)
        {
            var connStrings = partitionMap.Hosts.Select(x =>
            {
                var cb = new NpgsqlConnectionStringBuilder(connectionString)
                {
                    Host   = x.Host,
                    Port   = x.Port,
                    Enlist = false,
                };
                return(cb.ToString());
            });

            Parallel.ForEach(connStrings, cs => DeleteStorageAfterTests(cs, schema));
        }