public async Task TopologyUpdateDuringFailoverShouldntFaileCommand() { const int nodesAmount = 5; var leader = await this.CreateRaftClusterAndGetLeader(nodesAmount); var defaultDatabase = GetDatabaseName(); await CreateDatabaseInCluster(defaultDatabase, nodesAmount, leader.WebUrl).ConfigureAwait(false); using (var store = new DocumentStore { Urls = new[] { leader.WebUrl }, Database = defaultDatabase }.Initialize()) { var reqEx = store.GetRequestExecutor(); Topology topology = null; while (reqEx.Topology == null) { await Task.Delay(100); } topology = reqEx.Topology; var serverNode1 = topology.Nodes[0]; await reqEx.UpdateTopologyAsync(new RequestExecutor.UpdateTopologyParameters(serverNode1) { TimeoutInMs = 10_000 });
public async Task SubscriptionWorkerShouldNotFailoverToErroredNodes() { var cluster = await CreateRaftCluster(numberOfNodes : 3); using (var store = GetDocumentStore(new Options { ReplicationFactor = 3, Server = cluster.Leader, DeleteDatabaseOnDispose = false })) { Servers.ForEach(x => x.ForTestingPurposesOnly().GatherVerboseDatabaseDisposeInformation = true); var mre = new AsyncManualResetEvent(); using (var subscriptionManager = new DocumentSubscriptions(store)) { var reqEx = store.GetRequestExecutor(); var name = subscriptionManager.Create(new SubscriptionCreationOptions <User>()); var subs = await SubscriptionFailoverWithWaitingChains.GetSubscription(name, store.Database, cluster.Nodes); Assert.NotNull(subs); await Cluster.WaitForRaftIndexToBeAppliedOnClusterNodesAsync(subs.SubscriptionId, cluster.Nodes); await ActionWithLeader(async l => await WaitForResponsibleNode(l.ServerStore, store.Database, name, toBecomeNull: false)); Assert.True(WaitForValue(() => reqEx.Topology != null, true)); var topology = reqEx.Topology; var serverNode1 = topology.Nodes[0]; await reqEx.UpdateTopologyAsync(new RequestExecutor.UpdateTopologyParameters(serverNode1) { TimeoutInMs = 10_000 });