Пример #1
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldNotStartIfCurrentlyRunning() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldNotStartIfCurrentlyRunning()
        {
            // given
            CoreStateDownloader coreStateDownloader = mock(typeof(CoreStateDownloader));
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.core.state.CommandApplicationProcess applicationProcess = mock(org.neo4j.causalclustering.core.state.CommandApplicationProcess.class);
            CommandApplicationProcess applicationProcess = mock(typeof(CommandApplicationProcess));

            when(coreStateDownloader.DownloadSnapshot(any())).thenReturn(false);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.logging.Log log = mock(org.neo4j.logging.Log.class);
            Log       log     = mock(typeof(Log));
            NoTimeout timeout = new NoTimeout();
            PersistentSnapshotDownloader persistentSnapshotDownloader = new PersistentSnapshotDownloader(_catchupAddressProvider, applicationProcess, coreStateDownloader, log, timeout, () => _dbHealth, new Monitors());

            Thread thread = new Thread(persistentSnapshotDownloader);

            // when
            thread.Start();
            AwaitOneIteration(timeout);
            persistentSnapshotDownloader.Run();
            persistentSnapshotDownloader.Stop();
            thread.Join();

            // then
            verify(applicationProcess, times(1)).pauseApplier(OPERATION_NAME);
            verify(applicationProcess, times(1)).resumeApplier(OPERATION_NAME);
        }
Пример #2
0
 public CoreStateDownloaderService(JobScheduler jobScheduler, CoreStateDownloader downloader, CommandApplicationProcess applicationProcess, LogProvider logProvider, Org.Neo4j.causalclustering.helper.TimeoutStrategy_Timeout downloaderPauseStrategy, System.Func <DatabaseHealth> dbHealth, Monitors monitors)
 {
     this._jobScheduler       = jobScheduler;
     this._downloader         = downloader;
     this._applicationProcess = applicationProcess;
     this._log = logProvider.getLog(this.GetType());
     this._downloaderPauseStrategy = downloaderPauseStrategy;
     this._dbHealth = dbHealth;
     this._monitors = monitors;
 }
Пример #3
0
 internal PersistentSnapshotDownloader(CatchupAddressProvider addressProvider, CommandApplicationProcess applicationProcess, CoreStateDownloader downloader, Log log, Org.Neo4j.causalclustering.helper.TimeoutStrategy_Timeout pauseStrategy, System.Func <DatabaseHealth> dbHealth, Monitors monitors)
 {
     this._applicationProcess = applicationProcess;
     this._addressProvider    = addressProvider;
     this._downloader         = downloader;
     this._log         = log;
     this._timeout     = pauseStrategy;
     this._dbHealth    = dbHealth;
     this._monitor     = monitors.NewMonitor(typeof(Monitor));
     this._state       = State.Initiated;
     this._keepRunning = true;
 }
Пример #4
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private void waitForApplierToResume(org.neo4j.causalclustering.core.state.CommandApplicationProcess applicationProcess) throws java.util.concurrent.TimeoutException
        private void WaitForApplierToResume(CommandApplicationProcess applicationProcess)
        {
            Predicates.await(() =>
            {
                try
                {
                    verify(applicationProcess, times(1)).resumeApplier(OPERATION_NAME);
                    return(true);
                }
                catch (Exception)
                {
                    return(false);
                }
            }, 20, TimeUnit.SECONDS);
        }
Пример #5
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldRunPersistentDownloader() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldRunPersistentDownloader()
        {
            CoreStateDownloader coreStateDownloader = mock(typeof(CoreStateDownloader));

            when(coreStateDownloader.DownloadSnapshot(any())).thenReturn(true);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.core.state.CommandApplicationProcess applicationProcess = mock(org.neo4j.causalclustering.core.state.CommandApplicationProcess.class);
            CommandApplicationProcess applicationProcess = mock(typeof(CommandApplicationProcess));

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.logging.Log log = mock(org.neo4j.logging.Log.class);
            Log log = mock(typeof(Log));
            CoreStateDownloaderService coreStateDownloaderService = new CoreStateDownloaderService(_centralJobScheduler, coreStateDownloader, applicationProcess, LogProvider(log), new NoTimeout(), () => _dbHealth, new Monitors());

            coreStateDownloaderService.ScheduleDownload(_catchupAddressProvider);
            WaitForApplierToResume(applicationProcess);

            verify(applicationProcess, times(1)).pauseApplier(OPERATION_NAME);
            verify(applicationProcess, times(1)).resumeApplier(OPERATION_NAME);
            verify(coreStateDownloader, times(1)).downloadSnapshot(any());
        }
Пример #6
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldPauseAndResumeApplicationProcessIfDownloadIsSuccessful() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldPauseAndResumeApplicationProcessIfDownloadIsSuccessful()
        {
            // given
            CoreStateDownloader coreStateDownloader = mock(typeof(CoreStateDownloader));

            when(coreStateDownloader.DownloadSnapshot(any())).thenReturn(true);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.core.state.CommandApplicationProcess applicationProcess = mock(org.neo4j.causalclustering.core.state.CommandApplicationProcess.class);
            CommandApplicationProcess applicationProcess = mock(typeof(CommandApplicationProcess));
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.logging.Log log = mock(org.neo4j.logging.Log.class);
            Log log = mock(typeof(Log));
            PersistentSnapshotDownloader persistentSnapshotDownloader = new PersistentSnapshotDownloader(_catchupAddressProvider, applicationProcess, coreStateDownloader, log, new NoTimeout(), () => _dbHealth, new Monitors());

            // when
            persistentSnapshotDownloader.Run();

            // then
            verify(applicationProcess, times(1)).pauseApplier(OPERATION_NAME);
            verify(applicationProcess, times(1)).resumeApplier(OPERATION_NAME);
            verify(coreStateDownloader, times(1)).downloadSnapshot(any());
            assertTrue(persistentSnapshotDownloader.HasCompleted());
        }
Пример #7
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldEventuallySucceed()
        public virtual void ShouldEventuallySucceed()
        {
            // given
            CoreStateDownloader coreStateDownloader = new EventuallySuccessfulDownloader(this, 3);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.core.state.CommandApplicationProcess applicationProcess = mock(org.neo4j.causalclustering.core.state.CommandApplicationProcess.class);
            CommandApplicationProcess applicationProcess = mock(typeof(CommandApplicationProcess));
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.logging.Log log = mock(org.neo4j.logging.Log.class);
            Log       log     = mock(typeof(Log));
            NoTimeout timeout = new NoTimeout();
            PersistentSnapshotDownloader persistentSnapshotDownloader = new PersistentSnapshotDownloader(_catchupAddressProvider, applicationProcess, coreStateDownloader, log, timeout, () => _dbHealth, new Monitors());

            // when
            persistentSnapshotDownloader.Run();

            // then
            verify(applicationProcess, times(1)).pauseApplier(OPERATION_NAME);
            verify(applicationProcess, times(1)).resumeApplier(OPERATION_NAME);
            assertEquals(3, timeout.CurrentCount());
            assertTrue(persistentSnapshotDownloader.HasCompleted());
        }
Пример #8
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldOnlyScheduleOnePersistentDownloaderTaskAtTheTime() throws InterruptedException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldOnlyScheduleOnePersistentDownloaderTaskAtTheTime()
        {
            AtomicInteger        schedules            = new AtomicInteger();
            CountingJobScheduler countingJobScheduler = new CountingJobScheduler(schedules, _centralJobScheduler);
            Semaphore            blockDownloader      = new Semaphore(0);
            CoreStateDownloader  coreStateDownloader  = new BlockingCoreStateDownloader(blockDownloader);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.core.state.CommandApplicationProcess applicationProcess = mock(org.neo4j.causalclustering.core.state.CommandApplicationProcess.class);
            CommandApplicationProcess applicationProcess = mock(typeof(CommandApplicationProcess));

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.logging.Log log = mock(org.neo4j.logging.Log.class);
            Log log = mock(typeof(Log));
            CoreStateDownloaderService coreStateDownloaderService = new CoreStateDownloaderService(countingJobScheduler, coreStateDownloader, applicationProcess, LogProvider(log), new NoTimeout(), () => _dbHealth, new Monitors());

            coreStateDownloaderService.ScheduleDownload(_catchupAddressProvider);
            Thread.Sleep(50);
            coreStateDownloaderService.ScheduleDownload(_catchupAddressProvider);
            coreStateDownloaderService.ScheduleDownload(_catchupAddressProvider);
            coreStateDownloaderService.ScheduleDownload(_catchupAddressProvider);

            assertEquals(1, schedules.get());
            blockDownloader.release();
        }
Пример #9
0
//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 CoreServerModule(org.neo4j.causalclustering.core.IdentityModule identityModule, final org.neo4j.graphdb.factory.module.PlatformModule platformModule, org.neo4j.causalclustering.core.consensus.ConsensusModule consensusModule, org.neo4j.causalclustering.core.state.machines.CoreStateMachinesModule coreStateMachinesModule, org.neo4j.causalclustering.core.state.ClusteringModule clusteringModule, org.neo4j.causalclustering.ReplicationModule replicationModule, org.neo4j.causalclustering.catchup.storecopy.LocalDatabase localDatabase, System.Func<org.neo4j.kernel.internal.DatabaseHealth> dbHealthSupplier, java.io.File clusterStateDirectory, org.neo4j.causalclustering.protocol.NettyPipelineBuilderFactory clientPipelineBuilderFactory, org.neo4j.causalclustering.protocol.NettyPipelineBuilderFactory serverPipelineBuilderFactory, org.neo4j.causalclustering.protocol.NettyPipelineBuilderFactory backupServerPipelineBuilderFactory, org.neo4j.causalclustering.net.InstalledProtocolHandler installedProtocolsHandler)
        public CoreServerModule(IdentityModule identityModule, PlatformModule platformModule, ConsensusModule consensusModule, CoreStateMachinesModule coreStateMachinesModule, ClusteringModule clusteringModule, ReplicationModule replicationModule, LocalDatabase localDatabase, System.Func <DatabaseHealth> dbHealthSupplier, File clusterStateDirectory, NettyPipelineBuilderFactory clientPipelineBuilderFactory, NettyPipelineBuilderFactory serverPipelineBuilderFactory, NettyPipelineBuilderFactory backupServerPipelineBuilderFactory, InstalledProtocolHandler installedProtocolsHandler)
        {
            this._identityModule          = identityModule;
            this._coreStateMachinesModule = coreStateMachinesModule;
            this._consensusModule         = consensusModule;
            this._clusteringModule        = clusteringModule;
            this._localDatabase           = localDatabase;
            this._dbHealthSupplier        = dbHealthSupplier;
            this._platformModule          = platformModule;

            this._config       = platformModule.Config;
            this._jobScheduler = platformModule.JobScheduler;

//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;
//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.kernel.lifecycle.LifeSupport life = platformModule.life;
            LifeSupport life = platformModule.Life;

            this._logProvider     = logging.InternalLogProvider;
            this._userLogProvider = logging.UserLogProvider;

            CompositeSuspendable servicesToStopOnStoreCopy = new CompositeSuspendable();

            StateStorage <long> lastFlushedStorage = platformModule.Life.add(new DurableStateStorage <long>(platformModule.FileSystem, clusterStateDirectory, LAST_FLUSHED_NAME, new LongIndexMarshal(), platformModule.Config.get(CausalClusteringSettings.last_flushed_state_size), _logProvider));

            consensusModule.RaftMembershipManager().RecoverFromIndexSupplier = lastFlushedStorage.getInitialState;

            CoreState coreState = new CoreState(coreStateMachinesModule.CoreStateMachines, replicationModule.SessionTracker, lastFlushedStorage);

//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));
            _commandApplicationProcess = new CommandApplicationProcess(consensusModule.RaftLog(), platformModule.Config.get(CausalClusteringSettings.state_machine_apply_max_batch_size), platformModule.Config.get(CausalClusteringSettings.state_machine_flush_window_size), databaseHealthSupplier, _logProvider, replicationModule.ProgressTracker, replicationModule.SessionTracker, coreState, consensusModule.InFlightCache(), platformModule.Monitors);

            platformModule.Dependencies.satisfyDependency(_commandApplicationProcess);                 // lastApplied() for CC-robustness

            this._snapshotService = new CoreSnapshotService(_commandApplicationProcess, coreState, consensusModule.RaftLog(), consensusModule.RaftMachine());

            CatchUpClient       catchUpClient = CreateCatchupClient(clientPipelineBuilderFactory);
            CoreStateDownloader downloader    = CreateCoreStateDownloader(servicesToStopOnStoreCopy, catchUpClient);

            this._downloadService = new CoreStateDownloaderService(platformModule.JobScheduler, downloader, _commandApplicationProcess, _logProvider, (new ExponentialBackoffStrategy(1, 30, SECONDS)).newTimeout(), databaseHealthSupplier, platformModule.Monitors);

            this.MembershipWaiterLifecycle = CreateMembershipWaiterLifecycle();

            SupportedProtocolCreator                 supportedProtocolCreator   = new SupportedProtocolCreator(_config, _logProvider);
            ApplicationSupportedProtocols            supportedCatchupProtocols  = supportedProtocolCreator.CreateSupportedCatchupProtocol();
            ICollection <ModifierSupportedProtocols> supportedModifierProtocols = supportedProtocolCreator.CreateSupportedModifierProtocols();

            CheckPointerService  checkPointerService  = new CheckPointerService(() => localDatabase.DataSource().DependencyResolver.resolveDependency(typeof(CheckPointer)), _jobScheduler, Group.CHECKPOINT);
            CatchupServerHandler catchupServerHandler = new RegularCatchupServerHandler(platformModule.Monitors, _logProvider, localDatabase.storeId, localDatabase.dataSource, localDatabase.isAvailable, fileSystem, _snapshotService, checkPointerService);

            _catchupServer = (new CatchupServerBuilder(catchupServerHandler)).serverHandler(installedProtocolsHandler).catchupProtocols(supportedCatchupProtocols).modifierProtocols(supportedModifierProtocols).pipelineBuilder(serverPipelineBuilderFactory).userLogProvider(_userLogProvider).debugLogProvider(_logProvider).listenAddress(_config.get(transaction_listen_address)).serverName("catchup-server").build();

            TransactionBackupServiceProvider transactionBackupServiceProvider = new TransactionBackupServiceProvider(_logProvider, _userLogProvider, supportedCatchupProtocols, supportedModifierProtocols, backupServerPipelineBuilderFactory, catchupServerHandler, installedProtocolsHandler);

            _backupServer = transactionBackupServiceProvider.ResolveIfBackupEnabled(_config);

            RaftLogPruner raftLogPruner = new RaftLogPruner(consensusModule.RaftMachine(), _commandApplicationProcess, platformModule.Clock);

            dependencies.SatisfyDependency(raftLogPruner);

            life.Add(new PruningScheduler(raftLogPruner, _jobScheduler, _config.get(CausalClusteringSettings.raft_log_pruning_frequency).toMillis(), _logProvider));

            servicesToStopOnStoreCopy.Add(this._catchupServer);
            _backupServer.ifPresent(servicesToStopOnStoreCopy.add);
        }