public void LoadTestDeletePointMapping() { try { ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager( Globals.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy); ListShardMap <int> lsm = smm.GetListShardMap <int>(ShardMapManagerLoadTests.s_listShardMapName); Assert.IsNotNull(lsm); PointMapping <int> p1 = this.GetRandomPointMapping(lsm); if (p1 != null) { Debug.WriteLine("Trying to delete point mapping for key {0}", p1.Key); PointMappingUpdate pu = new PointMappingUpdate(); pu.Status = MappingStatus.Offline; PointMapping <int> mappingToDelete = lsm.UpdateMapping(p1, pu); lsm.DeleteMapping(mappingToDelete); } } catch (ShardManagementException sme) { Debug.WriteLine("Exception caught: {0}", sme.Message); } }
public void LoadTestRemoveShardFromListShardMap() { try { ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager( Globals.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy); ListShardMap <int> lsm = smm.GetListShardMap <int>(ShardMapManagerLoadTests.s_listShardMapName); Assert.IsNotNull(lsm); List <Shard> existingShards = lsm.GetShards().ToList(); if (existingShards.Count == 0) { return; } // If there is already a shard marked as offline, chose that one to delete. // This can happend if earlier remove operation was terminated for some reason - ex. killing connections. Shard offlineShard = existingShards.Find(e => e.Status == ShardStatus.Offline); if (offlineShard == null) { offlineShard = existingShards[_r.Next(existingShards.Count)]; // First mark shard as offline so that other test threads will not add new mappings to it. offlineShard = lsm.UpdateShard(offlineShard, new ShardUpdate { Status = ShardStatus.Offline }); } Debug.WriteLine("Trying to remove shard at location {0}", offlineShard.Location); PointMappingUpdate pu = new PointMappingUpdate(); pu.Status = MappingStatus.Offline; // Remove all mappings from this shard for given shard map. foreach (PointMapping <int> p in lsm.GetMappings(offlineShard)) { PointMapping <int> mappingToDelete = lsm.UpdateMapping(p, pu); lsm.DeleteMapping(mappingToDelete); } // Shard object is changed as mappings are removed, get it again. Shard deleteShard = lsm.GetShard(offlineShard.Location); // now remove shard. lsm.DeleteShard(deleteShard); Debug.WriteLine("Removed shard at location {0} from shard map {1}", deleteShard.Location, lsm); } catch (ShardManagementException sme) { Debug.WriteLine("Exception caught: {0}", sme.Message); } }
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 DateDeletePointMappingNonExisting() { ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager( Globals.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy); 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); PointMappingUpdate ru = new PointMappingUpdate(); ru.Status = MappingStatus.Offline; // The mapping must be made offline before it can be deleted. p1 = lsm.UpdateMapping(p1, ru); lsm.DeleteMapping(p1); bool removeFailed = false; try { lsm.DeleteMapping(p1); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.MappingDoesNotExist, sme.ErrorCode); removeFailed = true; } Assert.IsTrue(removeFailed); }
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 UpdatePointMappingIdempotency() { ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), new CacheStore(), 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); // Online -> Offline - No Location Change PointMappingUpdate pu = new PointMappingUpdate { Status = MappingStatus.Offline }; PointMapping<int> presult = lsm.UpdateMapping(p1, pu); Assert.IsNotNull(presult); Assert.IsTrue(presult.Status == MappingStatus.Offline); // Offline -> Offline - No Location Change pu = new PointMappingUpdate { Status = MappingStatus.Offline }; presult = lsm.UpdateMapping(presult, pu); Assert.IsNotNull(presult); Assert.IsTrue(presult.Status == MappingStatus.Offline); // Offline -> Offline - Location Change pu = new PointMappingUpdate { Shard = s2 }; presult = lsm.UpdateMapping(presult, pu); Assert.IsNotNull(presult); Assert.IsTrue(presult.Status == MappingStatus.Offline); Assert.AreEqual(s2.Location, presult.Shard.Location); // Offline -> Online - No Location Change pu = new PointMappingUpdate { Status = MappingStatus.Online }; presult = lsm.UpdateMapping(presult, pu); Assert.IsNotNull(presult); Assert.IsTrue(presult.Status == MappingStatus.Online); // Online -> Offline - Location Change pu = new PointMappingUpdate { Status = MappingStatus.Offline, Shard = s1 }; presult = lsm.UpdateMapping(presult, pu); Assert.IsNotNull(presult); Assert.IsTrue(presult.Status == MappingStatus.Offline); Assert.AreEqual(s1.Location, presult.Shard.Location); // Offline -> Online - Location Change pu = new PointMappingUpdate { Status = MappingStatus.Online, Shard = s2 }; presult = lsm.UpdateMapping(presult, pu); Assert.IsNotNull(presult); Assert.IsTrue(presult.Status == MappingStatus.Online); Assert.AreEqual(s2.Location, presult.Shard.Location); // Online -> Online - No Location Change pu = new PointMappingUpdate { Status = MappingStatus.Online }; presult = lsm.UpdateMapping(presult, pu); Assert.IsNotNull(presult); Assert.IsTrue(presult.Status == MappingStatus.Online); // Online -> Online - Location Change pu = new PointMappingUpdate { Shard = s1 }; bool failed = false; try { presult = lsm.UpdateMapping(presult, pu); } catch (ShardManagementException sme) { failed = true; Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.MappingIsNotOffline, sme.ErrorCode); } Assert.IsTrue(failed); }
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 KillConnectionOnOfflinePointMapping() { ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), new StoreOperationFactory(), new CacheStore(), 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); using (SqlConnection conn = lsm.OpenConnectionForKeyAsync(1, Globals.ShardUserConnectionString).Result) { Assert.AreEqual(ConnectionState.Open, conn.State); PointMappingUpdate pu = new PointMappingUpdate(); pu.Status = MappingStatus.Offline; PointMapping<int> pNew = lsm.UpdateMapping(p1, pu); Assert.IsNotNull(pNew); bool failed = false; try { using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select 1"; cmd.CommandType = CommandType.Text; using (SqlDataReader rdr = cmd.ExecuteReader()) { } } } catch (SqlException) { failed = true; } Assert.AreEqual(true, failed); Assert.AreEqual(ConnectionState.Closed, conn.State); failed = false; // Open 2nd connection. try { using (SqlConnection conn2 = lsm.OpenConnectionForKeyAsync(1, Globals.ShardUserConnectionString).Result) { } } catch (AggregateException ex) { var sme = ex.InnerException as ShardManagementException; if (sme != null) { failed = true; Assert.AreEqual(ShardManagementErrorCode.MappingIsOffline, sme.ErrorCode); } } Assert.AreEqual(true, failed); // 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); failed = false; // Open 3rd connection. This should succeed. try { using (SqlConnection conn3 = lsm.OpenConnectionForKey(1, Globals.ShardUserConnectionString)) { } } catch (ShardManagementException) { failed = true; } Assert.AreEqual(false, failed); } }
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 DeletePointMappingVersionMismatch() { ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager( Globals.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy); 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); PointMappingUpdate pu = new PointMappingUpdate(); pu.Status = MappingStatus.Offline; PointMapping<int> pNew = lsm.UpdateMapping(p1, pu); Assert.IsNotNull(pNew); bool removeFailed = false; try { lsm.DeleteMapping(p1); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.MappingDoesNotExist, sme.ErrorCode); removeFailed = true; } Assert.IsTrue(removeFailed); }
public void UpdatePointMappingLocationAbortLSM() { bool shouldThrow = false; IStoreOperationFactory sof = new StubStoreOperationFactory() { CallBase = true, CreateUpdateMappingOperationShardMapManagerStoreOperationCodeIStoreShardMapIStoreMappingIStoreMappingStringGuid = (_smm, _opcode, _ssm, _sms, _smt, _p, _loid) => { StubUpdateMappingOperation op = new StubUpdateMappingOperation(_smm, _opcode, _ssm, _sms, _smt, _p, _loid); op.CallBase = true; if (shouldThrow) { // Abort on target. op.DoLocalTargetExecuteIStoreTransactionScope = (ts) => { throw new StoreException("", ShardMapFaultHandlingTests.TransientSqlException); }; } return op; } }; ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), sof, new CacheStore(), 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 pu1 = new PointMappingUpdate(); // Take the mapping offline first before the shard location can be updated. pu1.Status = MappingStatus.Offline; PointMapping<int> pNew = lsm.UpdateMapping(p1, pu1); PointMappingUpdate pu2 = new PointMappingUpdate(); pu2.Shard = s2; shouldThrow = true; bool storeOperationFailed = false; try { pNew = lsm.UpdateMapping(pNew, pu2); Assert.IsNotNull(pNew); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.StorageOperationFailure, sme.ErrorCode); storeOperationFailed = true; } Assert.IsTrue(storeOperationFailed); // validation: validate location of the mapping. PointMapping<int> pValidate = lsm.GetMappingForKey(1); Assert.AreEqual(p1.Shard.Id, pValidate.Shard.Id); }
public void DeletePointMappingAbortLSM() { IStoreOperationFactory sof = new StubStoreOperationFactory() { CallBase = true, CreateRemoveMappingOperationShardMapManagerStoreOperationCodeIStoreShardMapIStoreMappingGuid = (_smm, _opcode, _ssm, _sm, _loid) => { StubRemoveMappingOperation op = new StubRemoveMappingOperation(_smm, _opcode, _ssm, _sm, _loid); op.CallBase = true; op.DoLocalSourceExecuteIStoreTransactionScope = (ts) => { throw new StoreException("", ShardMapFaultHandlingTests.TransientSqlException); }; return op; } }; ShardMapManager smm = new ShardMapManager( new SqlShardMapManagerCredentials(Globals.ShardMapManagerConnectionString), new SqlStoreConnectionFactory(), sof, new CacheStore(), 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 ru = new PointMappingUpdate(); ru.Status = MappingStatus.Offline; // The mapping must be made offline before it can be deleted. p1 = lsm.UpdateMapping(p1, ru); Assert.AreEqual(MappingStatus.Offline, p1.Status); bool storeOperationFailed = false; try { lsm.DeleteMapping(p1); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.StorageOperationFailure, sme.ErrorCode); storeOperationFailed = true; } Assert.IsTrue(storeOperationFailed); // validation: Lookup point will succeed. PointMapping<int> pNew = lsm.GetMappingForKey(1); Assert.IsNotNull(pNew); }
public void DateDeletePointMappingNonExisting() { ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager( Globals.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy); 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); PointMappingUpdate ru = new PointMappingUpdate(); ru.Status = MappingStatus.Offline; // The mapping must be made offline before it can be deleted. p1 = lsm.UpdateMapping(p1, ru); lsm.DeleteMapping(p1); bool removeFailed = false; try { lsm.DeleteMapping(p1); } catch (ShardManagementException sme) { Assert.AreEqual(ShardManagementErrorCategory.ListShardMap, sme.ErrorCategory); Assert.AreEqual(ShardManagementErrorCode.MappingDoesNotExist, sme.ErrorCode); removeFailed = true; } Assert.IsTrue(removeFailed); }
public void LoadTestRemoveShardFromListShardMap() { try { ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager( Globals.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy); ListShardMap<int> lsm = smm.GetListShardMap<int>(ShardMapManagerLoadTests.s_listShardMapName); Assert.IsNotNull(lsm); List<Shard> existingShards = lsm.GetShards().ToList(); if (existingShards.Count == 0) return; // If there is already a shard marked as offline, chose that one to delete. // This can happend if earlier remove operation was terminated for some reason - ex. killing connections. Shard offlineShard = existingShards.Find(e => e.Status == ShardStatus.Offline); if (offlineShard == null) { offlineShard = existingShards[_r.Next(existingShards.Count)]; // First mark shard as offline so that other test threads will not add new mappings to it. offlineShard = lsm.UpdateShard(offlineShard, new ShardUpdate { Status = ShardStatus.Offline }); } Debug.WriteLine("Trying to remove shard at location {0}", offlineShard.Location); PointMappingUpdate pu = new PointMappingUpdate(); pu.Status = MappingStatus.Offline; // Remove all mappings from this shard for given shard map. foreach (PointMapping<int> p in lsm.GetMappings(offlineShard)) { PointMapping<int> mappingToDelete = lsm.UpdateMapping(p, pu); lsm.DeleteMapping(mappingToDelete); } // Shard object is changed as mappings are removed, get it again. Shard deleteShard = lsm.GetShard(offlineShard.Location); // now remove shard. lsm.DeleteShard(deleteShard); Debug.WriteLine("Removed shard at location {0} from shard map {1}", deleteShard.Location, lsm); } catch (ShardManagementException sme) { Debug.WriteLine("Exception caught: {0}", sme.Message); } }
public void LoadTestDeletePointMapping() { try { ShardMapManager smm = ShardMapManagerFactory.GetSqlShardMapManager( Globals.ShardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy); ListShardMap<int> lsm = smm.GetListShardMap<int>(ShardMapManagerLoadTests.s_listShardMapName); Assert.IsNotNull(lsm); PointMapping<int> p1 = this.GetRandomPointMapping(lsm); if (p1 != null) { Debug.WriteLine("Trying to delete point mapping for key {0}", p1.Key); PointMappingUpdate pu = new PointMappingUpdate(); pu.Status = MappingStatus.Offline; PointMapping<int> mappingToDelete = lsm.UpdateMapping(p1, pu); lsm.DeleteMapping(mappingToDelete); } } catch (ShardManagementException sme) { Debug.WriteLine("Exception caught: {0}", sme.Message); } }