public void CreateRangeShardMapDefault() { CountingCacheStore cacheStore = new CountingCacheStore( new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); RangeShardMap <int> rsm = smm.CreateRangeShardMap <int>(ShardMapManagerTests.s_shardMapName); Assert.IsNotNull(rsm); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, rsm.Name); ShardMap smLookup = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNotNull(smLookup); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, smLookup.Name); Assert.AreEqual(1, cacheStore.LookupShardMapCount); Assert.AreEqual(1, cacheStore.LookupShardMapHitCount); }
public void RemoveListShardMapNoCacheUpdate() { // Counting store that does not perform deletions of shard maps. CountingCacheStore cacheStore = new CountingCacheStore( new StubCacheStore() { CallBase = true, DeleteShardMapIStoreShardMap = (csm) => { } } ); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); ShardMap sm = smm.CreateListShardMap <int>(ShardMapManagerTests.s_shardMapName); Assert.IsNotNull(sm); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, sm.Name); smm.DeleteShardMap(sm); Assert.AreEqual(1, cacheStore.DeleteShardMapCount); ShardMap smLookup = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNotNull(smLookup); Assert.AreEqual(1, cacheStore.LookupShardMapHitCount); }
public void AddListShardMapNoCacheUpdate() { // Create a cache store that always misses. CountingCacheStore cacheStore = new CountingCacheStore( new StubCacheStore() { CallBase = true, LookupMappingByKeyIStoreShardMapShardKey = (ssm, sk) => null, LookupShardMapByNameString = (n) => null }); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); ShardMap sm = smm.CreateListShardMap <int>(ShardMapManagerTests.s_shardMapName); Assert.IsNotNull(sm); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, sm.Name); Assert.AreEqual(1, cacheStore.AddShardMapCount); cacheStore.ResetCounters(); ShardMap smLookup = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNotNull(smLookup); Assert.AreEqual(1, cacheStore.AddShardMapCount); Assert.AreEqual(1, cacheStore.LookupShardMapMissCount); }
public void DateDeletePointMappingDefault() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); ListShardMap <DateTime> lsm = smm.GetListShardMap <DateTime>(DateTimeShardMapperTests.s_listShardMapName); Assert.IsNotNull(lsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, DateTimeShardMapperTests.s_shardedDBs[0]); Shard s = lsm.CreateShard(sl); Assert.IsNotNull(s); DateTime val = DateTime.Now; PointMapping <DateTime> p1 = lsm.CreatePointMapping(val, s); PointMapping <DateTime> p2 = lsm.GetMappingForKey(val); Assert.IsNotNull(p2); Assert.AreEqual(0, countingCache.LookupMappingHitCount); // The mapping must be made offline first before it can be deleted. PointMappingUpdate ru = new PointMappingUpdate(); ru.Status = MappingStatus.Offline; PointMapping <DateTime> mappingToDelete = lsm.UpdateMapping(p1, ru); lsm.DeleteMapping(mappingToDelete); // Try to get from store. Because the mapping is missing from the store, we will try to // invalidate the cache, but since it is also missing from cache there will be an cache miss. bool lookupFailed = false; try { PointMapping <DateTime> pLookup = lsm.GetMappingForKey(val); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.MappingNotFoundForKey, sme.ErrorCode); lookupFailed = true; } Assert.IsTrue(lookupFailed); Assert.AreEqual(1, countingCache.LookupMappingMissCount); }
public void DateAddPointMappingDuplicate() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); ListShardMap <DateTime> lsm = smm.GetListShardMap <DateTime>(DateTimeShardMapperTests.s_listShardMapName); Assert.IsNotNull(lsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, DateTimeShardMapperTests.s_shardedDBs[0]); Shard s = lsm.CreateShard(sl); Assert.IsNotNull(s); DateTime val = DateTime.Now; PointMapping <DateTime> p1 = lsm.CreatePointMapping(val, s); Assert.IsNotNull(p1); bool addFailed = false; try { // add same point mapping again. PointMapping <DateTime> pNew = lsm.CreatePointMapping(val, s); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.MappingPointAlreadyMapped, sme.ErrorCode); addFailed = true; } Assert.IsTrue(addFailed); PointMapping <DateTime> p2 = lsm.GetMappingForKey(val); Assert.IsNotNull(p2); Assert.AreEqual(0, countingCache.LookupMappingHitCount); }
public void DateAddPointMappingDefault() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); ListShardMap <DateTime> lsm = smm.GetListShardMap <DateTime>(DateTimeShardMapperTests.s_listShardMapName); Assert.IsNotNull(lsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, DateTimeShardMapperTests.s_shardedDBs[0]); Shard s = lsm.CreateShard(sl); Assert.IsNotNull(s); DateTime val = DateTime.Now; PointMapping <DateTime> p1 = lsm.CreatePointMapping(val, s); Assert.IsNotNull(p1); PointMapping <DateTime> p2 = lsm.GetMappingForKey(val); Assert.IsNotNull(p2); Assert.AreEqual(0, countingCache.LookupMappingCount); Assert.AreEqual(0, countingCache.LookupMappingHitCount); // Validate mapping by trying to connect using (SqlConnection conn = lsm.OpenConnection( p1, Globals.ShardUserConnectionString, ConnectionOptions.Validate)) { } }
public void DeleteListShardMap() { CountingCacheStore cacheStore = new CountingCacheStore( new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); ShardMap sm = smm.CreateListShardMap <int>(ShardMapManagerTests.s_shardMapName); Assert.IsNotNull(sm); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, sm.Name); ShardMap smLookup = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNotNull(smLookup); Assert.AreEqual(1, cacheStore.LookupShardMapCount); Assert.AreEqual(1, cacheStore.LookupShardMapHitCount); smm.DeleteShardMap(sm); Assert.AreEqual(1, cacheStore.DeleteShardMapCount); cacheStore.ResetCounters(); // Verify that shard map is removed from cache. ShardMap smLookupFailure = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNull(smLookupFailure); Assert.AreEqual(1, cacheStore.LookupShardMapCount); Assert.AreEqual(1, cacheStore.LookupShardMapMissCount); }
public void AddRangeMappingDefault() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); RangeShardMap<int> rsm = smm.GetRangeShardMap<int>(ShardMapperTests.s_rangeShardMapName); Assert.IsNotNull(rsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s = rsm.CreateShard(sl); Assert.IsNotNull(s); RangeMapping<int> r1 = rsm.CreateRangeMapping(new Range<int>(1, 10), s); Assert.IsNotNull(r1); RangeMapping<int> rLookup = rsm.GetMappingForKey(1); Assert.AreEqual(ShardKeyType.Int32, rLookup.Range.KeyType); Assert.IsNotNull(rLookup); Assert.AreEqual(0, countingCache.LookupMappingHitCount); }
public void UpdatePointMappingLocation() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); ListShardMap<int> lsm = smm.GetListShardMap<int>(ShardMapperTests.s_listShardMapName); Assert.IsNotNull(lsm); Shard s1 = lsm.CreateShard(new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0])); Assert.IsNotNull(s1); Shard s2 = lsm.CreateShard(new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[1])); Assert.IsNotNull(s2); PointMapping<int> p1 = lsm.CreatePointMapping(1, s1); PointMappingUpdate pu = new PointMappingUpdate(); pu.Status = MappingStatus.Offline; // Shard location in a mapping cannot be changed unless it is offline. PointMapping<int> pOffline = lsm.UpdateMapping(p1, pu); Assert.IsNotNull(pOffline); Assert.AreEqual(pu.Status, pOffline.Status); pu.Shard = s2; PointMapping<int> pNew = lsm.UpdateMapping(pOffline, pu); Assert.IsNotNull(pNew); PointMapping<int> p2 = lsm.GetMappingForKey(1); Assert.IsNotNull(p2); Assert.AreEqual(0, countingCache.LookupMappingHitCount); Assert.AreEqual(s2.Id, p2.Shard.Id); }
public void UpdatePointMappingDefault() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); ListShardMap<int> lsm = smm.GetListShardMap<int>(ShardMapperTests.s_listShardMapName); Assert.IsNotNull(lsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s = lsm.CreateShard(sl); Assert.IsNotNull(s); PointMapping<int> p1 = lsm.CreatePointMapping(1, s); PointMappingUpdate pu = new PointMappingUpdate(); pu.Status = MappingStatus.Offline; PointMapping<int> pNew = lsm.UpdateMapping(p1, pu); Assert.IsNotNull(pNew); PointMapping<int> p2 = lsm.GetMappingForKey(1); Assert.IsNotNull(p2); Assert.AreEqual(0, countingCache.LookupMappingHitCount); // Mark the mapping online again so that it will be cleaned up pu.Status = MappingStatus.Online; PointMapping<int> pUpdated = lsm.UpdateMapping(pNew, pu); Assert.IsNotNull(pUpdated); }
public void DeletePointMappingDefault() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); ListShardMap<int> lsm = smm.GetListShardMap<int>(ShardMapperTests.s_listShardMapName); Assert.IsNotNull(lsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s = lsm.CreateShard(sl); Assert.IsNotNull(s); PointMapping<int> p1 = lsm.CreatePointMapping(1, s); PointMapping<int> p2 = lsm.GetMappingForKey(1); Assert.IsNotNull(p2); Assert.AreEqual(0, countingCache.LookupMappingHitCount); // The mapping must be made offline first before it can be deleted. PointMappingUpdate ru = new PointMappingUpdate(); ru.Status = MappingStatus.Offline; PointMapping<int> mappingToDelete = lsm.UpdateMapping(p1, ru); lsm.DeleteMapping(mappingToDelete); // Verify that the mapping is removed from cache. bool lookupFailed = false; try { PointMapping<int> pLookup = lsm.GetMappingForKey(1); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.MappingNotFoundForKey, sme.ErrorCode); lookupFailed = true; } Assert.IsTrue(lookupFailed); Assert.AreEqual(0, countingCache.LookupMappingMissCount); }
public void AddListShardMapNoCacheUpdate() { // Create a cache store that always misses. CountingCacheStore cacheStore = new CountingCacheStore( new StubCacheStore() { CallBase = true, LookupMappingByKeyIStoreShardMapShardKey = (ssm, sk) => null, LookupShardMapByNameString = (n) => null }); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); ShardMap sm = smm.CreateListShardMap<int>(ShardMapManagerTests.s_shardMapName); Assert.IsNotNull(sm); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, sm.Name); Assert.AreEqual(1, cacheStore.AddShardMapCount); cacheStore.ResetCounters(); ShardMap smLookup = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNotNull(smLookup); Assert.AreEqual(1, cacheStore.AddShardMapCount); Assert.AreEqual(1, cacheStore.LookupShardMapMissCount); }
public void AddRangeMappingNoCacheUpdate() { // Create a cache store that never inserts. CountingCacheStore cacheStore = new CountingCacheStore( new StubCacheStore() { CallBase = true, AddOrUpdateMappingIStoreMappingCacheStoreMappingUpdatePolicy = (ssm, p) => { } }); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); RangeShardMap<int> rsm = smm.GetRangeShardMap<int>(ShardMapperTests.s_rangeShardMapName); Assert.IsNotNull(rsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s = rsm.CreateShard(sl); Assert.IsNotNull(s); RangeMapping<int> r1 = rsm.CreateRangeMapping(new Range<int>(1, 10), s); Assert.IsNotNull(r1); RangeMapping<int> r2 = rsm.GetMappingForKey(2); Assert.IsNotNull(r2); Assert.AreEqual(0, cacheStore.LookupMappingMissCount); }
public void UpdateRangeMappingLocation() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); RangeShardMap<int> rsm = smm.GetRangeShardMap<int>(ShardMapperTests.s_rangeShardMapName); Assert.IsNotNull(rsm); ShardLocation sl1 = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s1 = rsm.CreateShard(sl1); Assert.IsNotNull(s1); ShardLocation sl2 = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[1]); Shard s2 = rsm.CreateShard(sl2); Assert.IsNotNull(s2); RangeMapping<int> r1 = rsm.CreateRangeMapping(new Range<int>(1, 20), s1); RangeMappingUpdate ru = new RangeMappingUpdate(); // Shard location in a mapping cannot be updated when online. ru.Status = MappingStatus.Offline; RangeMapping<int> rOffline = rsm.UpdateMapping(r1, ru); Assert.IsNotNull(rOffline); Assert.AreEqual(ru.Status, rOffline.Status); ru.Shard = s2; RangeMapping<int> rNew = rsm.UpdateMapping(rOffline, ru); Assert.IsNotNull(rNew); // Bring the mapping back online. ru.Status = MappingStatus.Online; rNew = rsm.UpdateMapping(rNew, ru); Assert.IsNotNull(rNew); RangeMapping<int> r2 = rsm.GetMappingForKey(1); Assert.IsNotNull(r2); Assert.AreEqual(0, countingCache.LookupMappingHitCount); Assert.AreEqual(s2.Id, r2.Shard.Id); }
public void UpdateRangeMappingDefault() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); RangeShardMap<int> rsm = smm.GetRangeShardMap<int>(ShardMapperTests.s_rangeShardMapName); Assert.IsNotNull(rsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s = rsm.CreateShard(sl); Assert.IsNotNull(s); RangeMapping<int> r1 = rsm.CreateRangeMapping(new Range<int>(1, 20), s); // Lock the mapping MappingLockToken mappingLockToken = MappingLockToken.Create(); rsm.LockMapping(r1, mappingLockToken); RangeMappingUpdate ru = new RangeMappingUpdate() { Status = MappingStatus.Offline }; RangeMapping<int> rNew = rsm.UpdateMapping(r1, ru, mappingLockToken); Assert.IsNotNull(rNew); MappingLockToken storeMappingLockToken = rsm.GetMappingLockOwner(rNew); Assert.AreEqual(storeMappingLockToken, mappingLockToken, "LockownerId does not match that in store!"); rsm.UnlockMapping(rNew, mappingLockToken); RangeMapping<int> r2 = rsm.GetMappingForKey(1); Assert.AreEqual(0, countingCache.LookupMappingHitCount); Assert.AreNotEqual(r1.Id, r2.Id); }
public void DeleteRangeMappingDefault() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); RangeShardMap<int> rsm = smm.GetRangeShardMap<int>(ShardMapperTests.s_rangeShardMapName); Assert.IsNotNull(rsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s = rsm.CreateShard(sl); Assert.IsNotNull(s); RangeMapping<int> r1 = rsm.CreateRangeMapping(new Range<int>(1, 10), s); Assert.IsNotNull(r1); MappingLockToken mappingLockToken = MappingLockToken.Create(); rsm.LockMapping(r1, mappingLockToken); RangeMapping<int> rLookup = rsm.GetMappingForKey(1); Assert.IsNotNull(rLookup); Assert.AreEqual(0, countingCache.LookupMappingHitCount); // The mapping must be made offline first before it can be deleted. RangeMappingUpdate ru = new RangeMappingUpdate(); ru.Status = MappingStatus.Offline; // Should throw if the correct lock owner id isn't passed ShardManagementException exception = AssertExtensions.AssertThrows<ShardManagementException> (() => rsm.UpdateMapping(r1, ru)); Assert.IsTrue( exception.ErrorCode == ShardManagementErrorCode.MappingLockOwnerIdDoesNotMatch && exception.ErrorCategory == ShardManagementErrorCategory.RangeShardMap); RangeMapping<int> mappingToDelete = rsm.UpdateMapping(r1, ru, mappingLockToken); exception = AssertExtensions.AssertThrows<ShardManagementException> (() => rsm.DeleteMapping(mappingToDelete)); Assert.IsTrue( exception.ErrorCode == ShardManagementErrorCode.MappingLockOwnerIdDoesNotMatch && exception.ErrorCategory == ShardManagementErrorCategory.RangeShardMap); rsm.DeleteMapping(mappingToDelete, mappingLockToken); exception = AssertExtensions.AssertThrows<ShardManagementException> (() => rsm.GetMappingForKey(1)); Assert.IsTrue( exception.ErrorCode == ShardManagementErrorCode.MappingNotFoundForKey && exception.ErrorCategory == ShardManagementErrorCategory.RangeShardMap); Assert.AreEqual(0, countingCache.LookupMappingMissCount); }
public void DeleteListShardMap() { CountingCacheStore cacheStore = new CountingCacheStore( new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); ShardMap sm = smm.CreateListShardMap<int>(ShardMapManagerTests.s_shardMapName); Assert.IsNotNull(sm); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, sm.Name); ShardMap smLookup = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNotNull(smLookup); Assert.AreEqual(1, cacheStore.LookupShardMapCount); Assert.AreEqual(1, cacheStore.LookupShardMapHitCount); smm.DeleteShardMap(sm); Assert.AreEqual(1, cacheStore.DeleteShardMapCount); cacheStore.ResetCounters(); // Verify that shard map is removed from cache. ShardMap smLookupFailure = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNull(smLookupFailure); Assert.AreEqual(1, cacheStore.LookupShardMapCount); Assert.AreEqual(1, cacheStore.LookupShardMapMissCount); }
public void AddPointMappingDefault() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); ListShardMap<int> lsm = smm.GetListShardMap<int>(ShardMapperTests.s_listShardMapName); Assert.IsNotNull(lsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s = lsm.CreateShard(sl); Assert.IsNotNull(s); PointMapping<int> p1 = lsm.CreatePointMapping(2, s); Assert.IsNotNull(p1); PointMapping<int> p2 = lsm.GetMappingForKey(2); Assert.IsNotNull(p2); Assert.AreEqual(0, countingCache.LookupMappingCount); Assert.AreEqual(0, countingCache.LookupMappingHitCount); // Validate mapping by trying to connect using (SqlConnection conn = lsm.OpenConnection( p1, Globals.ShardUserConnectionString, ConnectionOptions.Validate)) { } }
public void RemoveListShardMapNoCacheUpdate() { // Counting store that does not perform deletions of shard maps. CountingCacheStore cacheStore = new CountingCacheStore( new StubCacheStore() { CallBase = true, DeleteShardMapIStoreShardMap = (csm) => { } } ); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); ShardMap sm = smm.CreateListShardMap<int>(ShardMapManagerTests.s_shardMapName); Assert.IsNotNull(sm); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, sm.Name); smm.DeleteShardMap(sm); Assert.AreEqual(1, cacheStore.DeleteShardMapCount); ShardMap smLookup = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNotNull(smLookup); Assert.AreEqual(1, cacheStore.LookupShardMapHitCount); }
public void AddPointMappingDuplicate() { CountingCacheStore countingCache = new CountingCacheStore(new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), countingCache, ShardMapManagerLoadPolicy.Lazy, new RetryPolicy(1, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero), RetryBehavior.DefaultRetryBehavior); ListShardMap<int> lsm = smm.GetListShardMap<int>(ShardMapperTests.s_listShardMapName); Assert.IsNotNull(lsm); ShardLocation sl = new ShardLocation(Globals.ShardMapManagerTestsDatasourceName, ShardMapperTests.s_shardedDBs[0]); Shard s = lsm.CreateShard(sl); Assert.IsNotNull(s); PointMapping<int> p1 = lsm.CreatePointMapping(1, s); Assert.IsNotNull(p1); bool addFailed = false; try { // add same point mapping again. PointMapping<int> pNew = lsm.CreatePointMapping(1, s); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.MappingPointAlreadyMapped, sme.ErrorCode); addFailed = true; } Assert.IsTrue(addFailed); PointMapping<int> p2 = lsm.GetMappingForKey(1); Assert.IsNotNull(p2); Assert.AreEqual(0, countingCache.LookupMappingHitCount); }
public void CreateRangeShardMapDefault() { CountingCacheStore cacheStore = new CountingCacheStore( new CacheStore()); ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), cacheStore, ShardMapManagerLoadPolicy.Lazy, RetryPolicy.DefaultRetryPolicy, RetryBehavior.DefaultRetryBehavior); RangeShardMap<int> rsm = smm.CreateRangeShardMap<int>(ShardMapManagerTests.s_shardMapName); Assert.IsNotNull(rsm); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, rsm.Name); ShardMap smLookup = smm.LookupShardMapByName("LookupShardMapByName", ShardMapManagerTests.s_shardMapName, true); Assert.IsNotNull(smLookup); Assert.AreEqual(ShardMapManagerTests.s_shardMapName, smLookup.Name); Assert.AreEqual(1, cacheStore.LookupShardMapCount); Assert.AreEqual(1, cacheStore.LookupShardMapHitCount); }