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); }
public HashRangeRouting(PartitionMap partitionMap) { Expect.NotNull(partitionMap, nameof(partitionMap)); partitionMap.ValidateOrThrow(); partitionStep = (uint)(uint.MaxValue / partitionMap.PartitionCount); hosts = CreateHosts(partitionMap); }
public PgsqlBuilder WithSharding(PartitionMap partitionMap) { Expect.NotNull(partitionMap, nameof(partitionMap)); sharding = true; this.partitionMap = partitionMap; partitionMap.ValidateOrThrow(); return(this); }
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); }
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)); }