public override void Dispose() { foreach (var disposable in _toDispose) disposable.Dispose(); foreach (var server in Servers) { if (IsGlobalServer(server)) continue; // must not dispose the global server if (ServersForDisposal.Contains(server) == false) ServersForDisposal.Add(server); } base.Dispose(); }
public async Task CanSnapshotManyCompareExchangeWithExpirationToManyNodes() { var count = 3 * 1024; var nodesCount = 7; using var leader = GetNewServer(); using (var store = GetDocumentStore(new Options { Server = leader })) { var now = DateTime.UtcNow; var expiry = now.AddMinutes(2); var compareExchanges = new Dictionary <string, User>(); await AddCompareExchangesWithExpire(count, compareExchanges, store, expiry); for (int i = 0; i < nodesCount; i++) { var follower = GetNewServer(); ServersForDisposal.Add(follower); using (var requestExecutor = ClusterRequestExecutor.CreateForSingleNode(leader.WebUrl, null)) using (requestExecutor.ContextPool.AllocateOperationContext(out var ctx)) { await requestExecutor.ExecuteAsync(new AddClusterNodeCommand(follower.WebUrl, watcher : true), ctx); } await follower.ServerStore.Engine.WaitForTopology(Leader.TopologyModification.NonVoter); } leader.ServerStore.Observer.Time.UtcDateTime = () => now.AddMinutes(3); var val = await WaitForValueAsync(async() => { var stats = await store.Maintenance.SendAsync(new GetDetailedStatisticsOperation()); return(stats.CountOfCompareExchange); }, 0); Assert.Equal(0, val); } }