Skip to content

Commit

Permalink
Make sure that monitor listeners registered by starting a NeoStoreDat…
Browse files Browse the repository at this point in the history
…aSource, are also removed when the NSDS is stopped.

This avoids leakin memory when the NSDS is started and stopped many times, which for instance can happen when a causal cluster member needs to catch up.
  • Loading branch information
chrisvest committed May 16, 2019
1 parent e4cdff5 commit 3ecf366
Showing 1 changed file with 15 additions and 5 deletions.
Expand Up @@ -279,7 +279,6 @@ public NeoStoreDataSource( DatabaseCreationContext context )
this.lockService = new ReentrantLockService();
this.commitProcessFactory = context.getCommitProcessFactory();
this.pageCache = context.getPageCache();
this.monitors.addMonitorListener( new LoggingLogFileMonitor( msgLog ) );
this.collectionsFactorySupplier = context.getCollectionsFactorySupplier();
this.databaseAvailability = context.getDatabaseAvailability();
this.failOnCorruptedLogFiles = context.getConfig().get( GraphDatabaseSettings.fail_on_corrupted_log_files );
Expand Down Expand Up @@ -332,11 +331,22 @@ public void start() throws IOException
.withConfig( config )
.withDependencies( dataSourceDependencies ).build();

LoggingLogFileMonitor logFileMonitor = new LoggingLogFileMonitor( msgLog );
LoggingLogTailScannerMonitor tailMonitor = new LoggingLogTailScannerMonitor( logService.getInternalLog( LogTailScanner.class ) );
ReverseTransactionCursorLoggingMonitor reverseCursorMonitor =
new ReverseTransactionCursorLoggingMonitor( logService.getInternalLog( ReversedSingleFileTransactionCursor.class ) );
monitors.addMonitorListener( logFileMonitor );
monitors.addMonitorListener( tailMonitor );
monitors.addMonitorListener( reverseCursorMonitor );
life.add( LifecycleAdapter.onShutdown( () ->
{
// We might be started and stopped multiple times, so make sure we clean up after ourselves when we're stopped.
monitors.removeMonitorListener( logFileMonitor );
monitors.removeMonitorListener( tailMonitor );
monitors.removeMonitorListener( reverseCursorMonitor );
} ) );

LogTailScanner tailScanner = new LogTailScanner( logFiles, logEntryReader, monitors, failOnCorruptedLogFiles );
monitors.addMonitorListener(
new LoggingLogTailScannerMonitor( logService.getInternalLog( LogTailScanner.class ) ) );
monitors.addMonitorListener( new ReverseTransactionCursorLoggingMonitor(
logService.getInternalLog( ReversedSingleFileTransactionCursor.class ) ) );
LogVersionUpgradeChecker.check( tailScanner, config );

// Upgrade the store before we begin
Expand Down

0 comments on commit 3ecf366

Please sign in to comment.