public SqlServerStore(string connectionStringOrConnectionStringName) { var fromConfig = ConfigurationManager.ConnectionStrings[connectionStringOrConnectionStringName]; if (fromConfig != null) { _connectionString = fromConfig.ConnectionString; } else { _connectionString = connectionStringOrConnectionStringName; } Exception outConn; if (!ConnectionHelper.TestConnection(_connectionString, out outConn)) { throw new ArgumentNullException("connection", outConn); } _pageIdProvider = new CachedPageIdProvider(new SqlPageIdProvider(_connectionString)); _requestsWriter = new RequestsWriter(_connectionString, _pageIdProvider); _requestsReader = new RequestsReader(_connectionString); _allPagesStore = new AllPagesStore(_connectionString, _pageIdProvider); _distributionStore = new DistributionStore(_connectionString, _pageIdProvider, _requestsReader); _trendStore = new TrendStore(_connectionString, _pageIdProvider, _requestsReader); _scheduler = new Scheduler(_allPagesStore, _distributionStore, _trendStore, this); }
/// <remarks> /// * Validation is done by running the loop in parallel using 'Parallel.For(..'. /// * Keys are generated in clustered distribution using 'Guid(a,b,c,d,e,f,g,h,j,k)' by changing the 'c'. /// The sample size is run twice, first time in order to populate and second time to compare with the /// results of the first run. /// </remarks> public static DistributionStore<int> ShouldGetPartitionsForKeys(this IPartitionConnectionProvider provider, short sampleSize) { var partitionDistribution = new DistributionStore<int>(); var partitionMap = new ConcurrentDictionary<Guid, int>(); // should populate (most likely as there is only slight chance of clashing with keys from other specs) & return Parallel.For(0, sampleSize, i => { var key = new Guid(22, 43, (short) i, 1, 2, 3, 4, 5, 6, 7, 8); var partition = provider.GetConnection(key).Connection.ExtractPartitionFromConnection(); partitionMap[key] = partition; partitionDistribution.Add(partition); }); // should return already existing Parallel.For(0, sampleSize, i => { var key = new Guid(22, 43, (short) i, 1, 2, 3, 4, 5, 6, 7, 8); var partition = provider.GetConnection(key).Connection.ExtractPartitionFromConnection(); partitionMap.ShouldContainKeyValue(key, partition); }); return partitionDistribution; }