//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldFailToPublishMismatchingStoredClusterId() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldFailToPublishMismatchingStoredClusterId() { // given ClusterId previouslyBoundClusterId = new ClusterId(System.Guid.randomUUID()); CoreTopologyService topologyService = mock(typeof(CoreTopologyService)); when(topologyService.SetClusterId(previouslyBoundClusterId, "default")).thenReturn(false); StubSimpleStorage <ClusterId> clusterIdStorage = new StubSimpleStorage <ClusterId>(this); clusterIdStorage.WriteState(previouslyBoundClusterId); ClusterBinder binder = ClusterBinder(clusterIdStorage, topologyService); // when try { binder.BindToCluster(); fail("Should have thrown exception"); } catch (BindingException) { // expected } }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldBootstrapWhenBootstrappable() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldBootstrapWhenBootstrappable() { // given //JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter: IDictionary <MemberId, CoreServerInfo> members = IntStream.range(0, _minCoreHosts).mapToObj(i => Pair.of(new MemberId(System.Guid.randomUUID()), TestTopology.addressesForCore(i, false))).collect(Collectors.toMap(Pair::first, Pair::other)); CoreTopology bootstrappableTopology = new CoreTopology(null, true, members); CoreTopologyService topologyService = mock(typeof(CoreTopologyService)); when(topologyService.LocalCoreServers()).thenReturn(bootstrappableTopology); when(topologyService.SetClusterId(any(), eq("default"))).thenReturn(true); CoreSnapshot snapshot = mock(typeof(CoreSnapshot)); when(_coreBootstrapper.bootstrap(any())).thenReturn(snapshot); ClusterBinder binder = ClusterBinder(new StubSimpleStorage <ClusterId>(this), topologyService); // when BoundState boundState = binder.BindToCluster(); // then verify(_coreBootstrapper).bootstrap(any()); Optional <ClusterId> clusterId = binder.Get(); assertTrue(clusterId.Present); verify(topologyService).setClusterId(clusterId.get(), "default"); assertTrue(boundState.Snapshot().Present); assertEquals(boundState.Snapshot().get(), snapshot); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldReturnNoWriteEndpointsIfThereIsNoAddressForTheLeader() throws Exception //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldReturnNoWriteEndpointsIfThereIsNoAddressForTheLeader() { // given //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopologyService topologyService = mock(org.neo4j.causalclustering.discovery.CoreTopologyService.class); CoreTopologyService topologyService = mock(typeof(CoreTopologyService)); IDictionary <MemberId, CoreServerInfo> coreMembers = new Dictionary <MemberId, CoreServerInfo>(); coreMembers[member(0)] = addressesForCore(0, false); when(topologyService.LocalCoreServers()).thenReturn(new CoreTopology(_clusterId, false, coreMembers)); when(topologyService.LocalReadReplicas()).thenReturn(new ReadReplicaTopology(emptyMap())); LeaderLocator leaderLocator = mock(typeof(LeaderLocator)); when(leaderLocator.Leader).thenReturn(member(1)); LegacyGetServersProcedure procedure = new LegacyGetServersProcedure(topologyService, leaderLocator, Config, Instance); // when ClusterView clusterView = Run(procedure); // then ClusterView.Builder builder = new ClusterView.Builder(); builder.ReadAddress(addressesForCore(0, false).connectors().boltAddress()); builder.RouteAddress(addressesForCore(0, false).connectors().boltAddress()); assertEquals(builder.Build(), clusterView); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldPublishStoredClusterIdIfPreviouslyBound() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldPublishStoredClusterIdIfPreviouslyBound() { // given ClusterId previouslyBoundClusterId = new ClusterId(System.Guid.randomUUID()); CoreTopologyService topologyService = mock(typeof(CoreTopologyService)); when(topologyService.SetClusterId(previouslyBoundClusterId, "default")).thenReturn(true); StubSimpleStorage <ClusterId> clusterIdStorage = new StubSimpleStorage <ClusterId>(this); clusterIdStorage.WriteState(previouslyBoundClusterId); ClusterBinder binder = ClusterBinder(clusterIdStorage, topologyService); // when binder.BindToCluster(); // then verify(topologyService).setClusterId(previouslyBoundClusterId, "default"); Optional <ClusterId> clusterId = binder.Get(); assertTrue(clusterId.Present); assertEquals(previouslyBoundClusterId, clusterId.get()); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void ttlShouldBeInSeconds() throws Exception //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void TtlShouldBeInSeconds() { // given //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopologyService coreTopologyService = mock(org.neo4j.causalclustering.discovery.CoreTopologyService.class); CoreTopologyService coreTopologyService = mock(typeof(CoreTopologyService)); LeaderLocator leaderLocator = mock(typeof(LeaderLocator)); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopology clusterTopology = new org.neo4j.causalclustering.discovery.CoreTopology(clusterId, false, new java.util.HashMap<>()); CoreTopology clusterTopology = new CoreTopology(_clusterId, false, new Dictionary <MemberId, CoreServerInfo>()); when(coreTopologyService.LocalCoreServers()).thenReturn(clusterTopology); when(coreTopologyService.LocalReadReplicas()).thenReturn(new ReadReplicaTopology(emptyMap())); // set the TTL in minutes Config.augment(cluster_routing_ttl, "10m"); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, config, getInstance()); LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, Config, Instance); // when IList <object[]> results = new IList <object[]> { proc.Apply(null, new object[0], null) }; // then object[] rows = results[0]; long ttlInSeconds = ( long )rows[0]; assertEquals(600, ttlInSeconds); }
private Callable <Void> SharedClientStarter(CoreTopologyService topologyService, ISet <MemberId> expectedTargetSet) { return(() => { try { RaftMachine raftMock = mock(typeof(RaftMachine)); RaftCoreTopologyConnector tc = new RaftCoreTopologyConnector(topologyService, raftMock, CausalClusteringSettings.database.DefaultValue); topologyService.init(); topologyService.start(); tc.start(); assertEventually("should discover complete target set", () => { ArgumentCaptor <ISet <MemberId> > targetMembers = ArgumentCaptor.forClass((Type <ISet <MemberId> >)expectedTargetSet.GetType()); verify(raftMock, atLeastOnce()).TargetMembershipSet = targetMembers.capture(); return targetMembers.Value; }, equalTo(expectedTargetSet), TIMEOUT_MS, MILLISECONDS); } catch (Exception throwable) { fail(throwable.Message); } return null; }); }
public virtual int NumberOfCoreMembersReportedByTopology() { //JAVA TO C# CONVERTER TODO TASK: Method reference constructor syntax is not converted by Java to C# Converter: CoreClusterMember aCoreGraphDb = _coreMembers.Values.Where(member => member.database() != null).First().orElseThrow(System.ArgumentException::new); CoreTopologyService coreTopologyService = aCoreGraphDb.Database().DependencyResolver.resolveDependency(typeof(CoreTopologyService)); return(coreTopologyService.LocalCoreServers().members().Count); }
private Callable <Void> CreateDiscoveryJob(MemberId member, DiscoveryServiceFactory discoveryServiceFactory, ISet <MemberId> expectedTargetSet) { JobScheduler jobScheduler = createInitialisedScheduler(); Config config = config(); InitialDiscoveryMembersResolver remoteMemberResolver = new InitialDiscoveryMembersResolver(new NoOpHostnameResolver(), config); CoreTopologyService topologyService = discoveryServiceFactory.CoreTopologyService(config, member, jobScheduler, _logProvider, _userLogProvider, remoteMemberResolver, new TopologyServiceNoRetriesStrategy(), new Monitors()); return(SharedClientStarter(topologyService, expectedTargetSet)); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldReturnEndpointsInDifferentOrders() throws Exception //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldReturnEndpointsInDifferentOrders() { // given //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopologyService coreTopologyService = mock(org.neo4j.causalclustering.discovery.CoreTopologyService.class); CoreTopologyService coreTopologyService = mock(typeof(CoreTopologyService)); LeaderLocator leaderLocator = mock(typeof(LeaderLocator)); when(leaderLocator.Leader).thenReturn(member(0)); IDictionary <MemberId, CoreServerInfo> coreMembers = new Dictionary <MemberId, CoreServerInfo>(); coreMembers[member(0)] = addressesForCore(0, false); coreMembers[member(1)] = addressesForCore(1, false); coreMembers[member(2)] = addressesForCore(2, false); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopology clusterTopology = new org.neo4j.causalclustering.discovery.CoreTopology(clusterId, false, coreMembers); CoreTopology clusterTopology = new CoreTopology(_clusterId, false, coreMembers); when(coreTopologyService.LocalCoreServers()).thenReturn(clusterTopology); when(coreTopologyService.LocalReadReplicas()).thenReturn(new ReadReplicaTopology(emptyMap())); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, config, getInstance()); LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, _config, Instance); // when object[] endpoints = GetEndpoints(proc); //then object[] endpointsInDifferentOrder = GetEndpoints(proc); for (int i = 0; i < 100; i++) { if (Arrays.deepEquals(endpointsInDifferentOrder, endpoints)) { endpointsInDifferentOrder = GetEndpoints(proc); } else { //Different order of servers, no need to retry. break; } } assertFalse(Arrays.deepEquals(endpoints, endpointsInDifferentOrder)); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test(expected = java.util.concurrent.TimeoutException.class) public void shouldTimeoutIfPublishContinuallyFailsWithTransientErrors() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldTimeoutIfPublishContinuallyFailsWithTransientErrors() { // given //JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter: IDictionary <MemberId, CoreServerInfo> members = IntStream.range(0, _minCoreHosts).mapToObj(i => Pair.of(new MemberId(System.Guid.randomUUID()), TestTopology.addressesForCore(i, false))).collect(Collectors.toMap(Pair::first, Pair::other)); CoreTopology bootstrappableTopology = new CoreTopology(null, true, members); CoreTopologyService topologyService = mock(typeof(CoreTopologyService)); when(topologyService.SetClusterId(any(), anyString())).thenThrow(typeof(OperationTimeoutException)); // Causes a retry when(topologyService.LocalCoreServers()).thenReturn(bootstrappableTopology); ClusterBinder binder = ClusterBinder(new StubSimpleStorage <ClusterId>(this), topologyService); // when binder.BindToCluster(); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldBindToClusterIdPublishedByAnotherMember() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldBindToClusterIdPublishedByAnotherMember() { // given ClusterId publishedClusterId = new ClusterId(System.Guid.randomUUID()); CoreTopology unboundTopology = new CoreTopology(null, false, emptyMap()); CoreTopology boundTopology = new CoreTopology(publishedClusterId, false, emptyMap()); CoreTopologyService topologyService = mock(typeof(CoreTopologyService)); when(topologyService.LocalCoreServers()).thenReturn(unboundTopology).thenReturn(boundTopology); ClusterBinder binder = ClusterBinder(new StubSimpleStorage <ClusterId>(this), topologyService); // when binder.BindToCluster(); // then Optional <ClusterId> clusterId = binder.Get(); assertTrue(clusterId.Present); assertEquals(publishedClusterId, clusterId.get()); verify(topologyService, atLeast(2)).localCoreServers(); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldTimeoutWhenNotBootstrappableAndNobodyElsePublishesClusterId() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldTimeoutWhenNotBootstrappableAndNobodyElsePublishesClusterId() { // given CoreTopology unboundTopology = new CoreTopology(null, false, emptyMap()); CoreTopologyService topologyService = mock(typeof(CoreTopologyService)); when(topologyService.LocalCoreServers()).thenReturn(unboundTopology); ClusterBinder binder = ClusterBinder(new StubSimpleStorage <ClusterId>(this), topologyService); try { // when binder.BindToCluster(); fail("Should have timed out"); } catch (TimeoutException) { // expected } // then verify(topologyService, atLeast(2)).localCoreServers(); }
public RaftCoreTopologyConnector(CoreTopologyService coreTopologyService, RaftMachine raftMachine, string dbName) { this._coreTopologyService = coreTopologyService; this._raftMachine = raftMachine; this._dbName = dbName; }
private ClusterBinder ClusterBinder(SimpleStorage <ClusterId> clusterIdStorage, CoreTopologyService topologyService) { return(new ClusterBinder(clusterIdStorage, new StubSimpleStorage <DatabaseName>(this), topologyService, _clock, () => _clock.forward(1, TimeUnit.SECONDS), Duration.of(3_000, MILLIS), _coreBootstrapper, _dbName, _minCoreHosts, new Monitors())); }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are ignored unless the option to convert to C# 7.2 'in' parameters is selected: //ORIGINAL LINE: public EnterpriseCoreEditionModule(final org.neo4j.graphdb.factory.module.PlatformModule platformModule, final org.neo4j.causalclustering.discovery.DiscoveryServiceFactory discoveryServiceFactory) public EnterpriseCoreEditionModule(PlatformModule platformModule, DiscoveryServiceFactory discoveryServiceFactory) { //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.kernel.impl.util.Dependencies dependencies = platformModule.dependencies; Dependencies dependencies = platformModule.Dependencies; Config = platformModule.Config; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.logging.internal.LogService logging = platformModule.logging; LogService logging = platformModule.Logging; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.io.fs.FileSystemAbstraction fileSystem = platformModule.fileSystem; FileSystemAbstraction fileSystem = platformModule.FileSystem; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.io.layout.DatabaseLayout databaseLayout = platformModule.storeLayout.databaseLayout(config.get(org.neo4j.graphdb.factory.GraphDatabaseSettings.active_database)); DatabaseLayout databaseLayout = platformModule.StoreLayout.databaseLayout(Config.get(GraphDatabaseSettings.active_database)); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.kernel.lifecycle.LifeSupport life = platformModule.life; LifeSupport life = platformModule.Life; CoreMonitor.register(logging.InternalLogProvider, logging.UserLogProvider, platformModule.Monitors); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final java.io.File dataDir = config.get(org.neo4j.graphdb.factory.GraphDatabaseSettings.data_directory); File dataDir = Config.get(GraphDatabaseSettings.data_directory); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.causalclustering.core.state.ClusterStateDirectory clusterStateDirectory = new org.neo4j.causalclustering.core.state.ClusterStateDirectory(dataDir, databaseLayout.databaseDirectory(), false); ClusterStateDirectory clusterStateDirectory = new ClusterStateDirectory(dataDir, databaseLayout.DatabaseDirectory(), false); try { clusterStateDirectory.Initialize(fileSystem); } catch (ClusterStateException e) { throw new Exception(e); } dependencies.SatisfyDependency(clusterStateDirectory); AvailabilityGuard globalGuard = GetGlobalAvailabilityGuard(platformModule.Clock, logging, platformModule.Config); ThreadToTransactionBridgeConflict = dependencies.SatisfyDependency(new ThreadToStatementContextBridge(globalGuard)); LogProvider = logging.InternalLogProvider; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final System.Func<org.neo4j.kernel.internal.DatabaseHealth> databaseHealthSupplier = () -> platformModule.dataSourceManager.getDataSource().getDependencyResolver().resolveDependency(org.neo4j.kernel.internal.DatabaseHealth.class); System.Func <DatabaseHealth> databaseHealthSupplier = () => platformModule.DataSourceManager.DataSource.DependencyResolver.resolveDependency(typeof(DatabaseHealth)); WatcherServiceFactoryConflict = directory => CreateFileSystemWatcherService(fileSystem, directory, logging, platformModule.JobScheduler, Config, FileWatcherFileNameFilter()); dependencies.SatisfyDependencies(WatcherServiceFactoryConflict); LogFiles logFiles = BuildLocalDatabaseLogFiles(platformModule, fileSystem, databaseLayout); LocalDatabase localDatabase = new LocalDatabase(databaseLayout, new StoreFiles(fileSystem, platformModule.PageCache), logFiles, platformModule.DataSourceManager, databaseHealthSupplier, globalGuard, LogProvider); IdentityModule identityModule = new IdentityModule(platformModule, clusterStateDirectory.Get()); ClusteringModule clusteringModule = GetClusteringModule(platformModule, discoveryServiceFactory, clusterStateDirectory, identityModule, dependencies, databaseLayout); // We need to satisfy the dependency here to keep users of it, such as BoltKernelExtension, happy. dependencies.SatisfyDependency(SslPolicyLoader.create(Config, LogProvider)); PipelineWrapper clientPipelineWrapper = PipelineWrapperFactory().forClient(Config, dependencies, LogProvider, CausalClusteringSettings.SslPolicy); PipelineWrapper serverPipelineWrapper = PipelineWrapperFactory().forServer(Config, dependencies, LogProvider, CausalClusteringSettings.SslPolicy); PipelineWrapper backupServerPipelineWrapper = PipelineWrapperFactory().forServer(Config, dependencies, LogProvider, OnlineBackupSettings.ssl_policy); NettyPipelineBuilderFactory clientPipelineBuilderFactory = new NettyPipelineBuilderFactory(clientPipelineWrapper); NettyPipelineBuilderFactory serverPipelineBuilderFactory = new NettyPipelineBuilderFactory(serverPipelineWrapper); NettyPipelineBuilderFactory backupServerPipelineBuilderFactory = new NettyPipelineBuilderFactory(backupServerPipelineWrapper); _topologyService = clusteringModule.TopologyService(); long logThresholdMillis = Config.get(CausalClusteringSettings.UnknownAddressLoggingThrottle).toMillis(); SupportedProtocolCreator supportedProtocolCreator = new SupportedProtocolCreator(Config, LogProvider); ApplicationSupportedProtocols supportedRaftProtocols = supportedProtocolCreator.CreateSupportedRaftProtocol(); ICollection <ModifierSupportedProtocols> supportedModifierProtocols = supportedProtocolCreator.CreateSupportedModifierProtocols(); ApplicationProtocolRepository applicationProtocolRepository = new ApplicationProtocolRepository(Org.Neo4j.causalclustering.protocol.Protocol_ApplicationProtocols.values(), supportedRaftProtocols); ModifierProtocolRepository modifierProtocolRepository = new ModifierProtocolRepository(Org.Neo4j.causalclustering.protocol.Protocol_ModifierProtocols.values(), supportedModifierProtocols); ProtocolInstallerRepository <Org.Neo4j.causalclustering.protocol.ProtocolInstaller_Orientation_Client> protocolInstallerRepository = new ProtocolInstallerRepository <Org.Neo4j.causalclustering.protocol.ProtocolInstaller_Orientation_Client>(asList(new RaftProtocolClientInstallerV2.Factory(clientPipelineBuilderFactory, LogProvider), new RaftProtocolClientInstallerV1.Factory(clientPipelineBuilderFactory, LogProvider)), Org.Neo4j.causalclustering.protocol.ModifierProtocolInstaller_Fields.AllClientInstallers); Duration handshakeTimeout = Config.get(CausalClusteringSettings.HandshakeTimeout); HandshakeClientInitializer channelInitializer = new HandshakeClientInitializer(applicationProtocolRepository, modifierProtocolRepository, protocolInstallerRepository, clientPipelineBuilderFactory, handshakeTimeout, LogProvider, platformModule.Logging.UserLogProvider); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.causalclustering.messaging.SenderService raftSender = new org.neo4j.causalclustering.messaging.SenderService(channelInitializer, logProvider); SenderService raftSender = new SenderService(channelInitializer, LogProvider); life.Add(raftSender); this._clientInstalledProtocols = raftSender.installedProtocols; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.causalclustering.logging.MessageLogger<org.neo4j.causalclustering.identity.MemberId> messageLogger = createMessageLogger(config, life, identityModule.myself()); MessageLogger <MemberId> messageLogger = CreateMessageLogger(Config, life, identityModule.Myself()); RaftOutbound raftOutbound = new RaftOutbound(_topologyService, raftSender, clusteringModule.ClusterIdentity(), LogProvider, logThresholdMillis); Outbound <MemberId, Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage> loggingOutbound = new LoggingOutbound <MemberId, Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage>(raftOutbound, identityModule.Myself(), messageLogger); _consensusModule = new ConsensusModule(identityModule.Myself(), platformModule, loggingOutbound, clusterStateDirectory.Get(), _topologyService); dependencies.SatisfyDependency(_consensusModule.raftMachine()); _replicationModule = new ReplicationModule(_consensusModule.raftMachine(), identityModule.Myself(), platformModule, Config, loggingOutbound, clusterStateDirectory.Get(), fileSystem, LogProvider, globalGuard, localDatabase); _coreStateMachinesModule = new CoreStateMachinesModule(identityModule.Myself(), platformModule, clusterStateDirectory.Get(), Config, _replicationModule.Replicator, _consensusModule.raftMachine(), dependencies, localDatabase); IdContextFactoryConflict = IdContextFactoryBuilder.of(_coreStateMachinesModule.idTypeConfigurationProvider, platformModule.JobScheduler).withIdGenerationFactoryProvider(ignored => _coreStateMachinesModule.idGeneratorFactory).withFactoryWrapper(generator => new FreeIdFilteredIdGeneratorFactory(generator, _coreStateMachinesModule.freeIdCondition)).build(); // TODO: this is broken, coreStateMachinesModule.tokenHolders should be supplier, somehow... this.TokenHoldersProviderConflict = databaseName => _coreStateMachinesModule.tokenHolders; this.LocksSupplierConflict = _coreStateMachinesModule.locksSupplier; this.CommitProcessFactoryConflict = _coreStateMachinesModule.commitProcessFactory; this.AccessCapabilityConflict = new LeaderCanWrite(_consensusModule.raftMachine()); InstalledProtocolHandler serverInstalledProtocolHandler = new InstalledProtocolHandler(); this._coreServerModule = new CoreServerModule(identityModule, platformModule, _consensusModule, _coreStateMachinesModule, clusteringModule, _replicationModule, localDatabase, databaseHealthSupplier, clusterStateDirectory.Get(), clientPipelineBuilderFactory, serverPipelineBuilderFactory, backupServerPipelineBuilderFactory, serverInstalledProtocolHandler); TypicallyConnectToRandomReadReplicaStrategy defaultStrategy = new TypicallyConnectToRandomReadReplicaStrategy(2); defaultStrategy.Inject(_topologyService, Config, LogProvider, identityModule.Myself()); UpstreamDatabaseStrategySelector catchupStrategySelector = CreateUpstreamDatabaseStrategySelector(identityModule.Myself(), Config, LogProvider, _topologyService, defaultStrategy); Org.Neo4j.causalclustering.catchup.CatchupAddressProvider_PrioritisingUpstreamStrategyBasedAddressProvider catchupAddressProvider = new Org.Neo4j.causalclustering.catchup.CatchupAddressProvider_PrioritisingUpstreamStrategyBasedAddressProvider(_consensusModule.raftMachine(), _topologyService, catchupStrategySelector); RaftServerModule.CreateAndStart(platformModule, _consensusModule, identityModule, _coreServerModule, localDatabase, serverPipelineBuilderFactory, messageLogger, catchupAddressProvider, supportedRaftProtocols, supportedModifierProtocols, serverInstalledProtocolHandler); _serverInstalledProtocols = serverInstalledProtocolHandler.installedProtocols; EditionInvariants(platformModule, dependencies, Config, logging, life); life.Add(_coreServerModule.membershipWaiterLifecycle); }