diff --git a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java index 64491efd6e17e..88cfae97136fa 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java @@ -148,11 +148,13 @@ import org.neo4j.kernel.lifecycle.Lifecycles; import org.neo4j.kernel.monitoring.Monitors; import org.neo4j.kernel.monitoring.tracing.Tracers; -import org.neo4j.kernel.recovery.DefaultRecoverySPI; +import org.neo4j.kernel.recovery.DefaultRecoveryService; import org.neo4j.kernel.recovery.LogTailScanner; import org.neo4j.kernel.recovery.LoggingLogTailScannerMonitor; import org.neo4j.kernel.recovery.PositionToRecoverFrom; import org.neo4j.kernel.recovery.Recovery; +import org.neo4j.kernel.recovery.RecoveryMonitor; +import org.neo4j.kernel.recovery.RecoveryService; import org.neo4j.kernel.recovery.TransactionLogPruner; import org.neo4j.kernel.spi.explicitindex.IndexImplementation; import org.neo4j.kernel.spi.explicitindex.IndexProviders; @@ -463,7 +465,7 @@ public void start() throws IOException buildRecovery( fs, transactionIdStore, tailScanner, - monitors.newMonitor( Recovery.Monitor.class ), + monitors.newMonitor( RecoveryMonitor.class ), monitors.newMonitor( PositionToRecoverFrom.Monitor.class ), logFiles, startupStatistics, storageEngine, transactionLogModule.logicalTransactionStore() @@ -684,14 +686,15 @@ private void buildRecovery( final FileSystemAbstraction fileSystemAbstraction, TransactionIdStore transactionIdStore, LogTailScanner tailScanner, - Recovery.Monitor recoveryMonitor, + RecoveryMonitor recoveryMonitor, PositionToRecoverFrom.Monitor positionMonitor, final PhysicalLogFiles logFiles, final StartupStatisticsProvider startupStatistics, StorageEngine storageEngine, LogicalTransactionStore logicalTransactionStore ) { - Recovery.SPI spi = new DefaultRecoverySPI( storageEngine, tailScanner, transactionIdStore, logicalTransactionStore, positionMonitor ); + RecoveryService + spi = new DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, logicalTransactionStore, positionMonitor ); TransactionLogPruner logPruner = new TransactionLogPruner( storeDir, logFiles, fileSystemAbstraction ); Recovery recovery = new Recovery( spi, startupStatistics, logPruner, recoveryMonitor ); life.add( recovery ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/LoggingLogFileMonitor.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/LoggingLogFileMonitor.java index dbcee181e2bdf..10c88cc8df243 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/LoggingLogFileMonitor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/LoggingLogFileMonitor.java @@ -24,15 +24,14 @@ import org.neo4j.kernel.impl.transaction.log.entry.LogEntryCommit; import org.neo4j.kernel.impl.transaction.log.rotation.LogRotation; import org.neo4j.kernel.recovery.PositionToRecoverFrom; -import org.neo4j.kernel.recovery.Recovery; +import org.neo4j.kernel.recovery.RecoveryMonitor; import org.neo4j.logging.Log; import static java.lang.String.format; public class LoggingLogFileMonitor implements PhysicalLogFile.Monitor, - LogRotation.Monitor, - Recovery.Monitor, + LogRotation.Monitor, RecoveryMonitor, PositionToRecoverFrom.Monitor { private long firstTransactionRecovered = -1; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/recovery/DefaultRecoverySPI.java b/community/kernel/src/main/java/org/neo4j/kernel/recovery/DefaultRecoveryService.java similarity index 97% rename from community/kernel/src/main/java/org/neo4j/kernel/recovery/DefaultRecoverySPI.java rename to community/kernel/src/main/java/org/neo4j/kernel/recovery/DefaultRecoveryService.java index 759bc6d548a80..5ea5a6e91ce0b 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/recovery/DefaultRecoverySPI.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/recovery/DefaultRecoveryService.java @@ -31,20 +31,19 @@ import org.neo4j.kernel.impl.transaction.log.TransactionIdStore; import org.neo4j.kernel.impl.transaction.log.entry.LogEntryCommit; import org.neo4j.kernel.impl.transaction.log.entry.LogEntryStart; -import org.neo4j.kernel.recovery.Recovery.RecoveryApplier; import org.neo4j.storageengine.api.StorageEngine; import org.neo4j.storageengine.api.TransactionApplicationMode; import static org.neo4j.kernel.impl.transaction.log.Commitment.NO_COMMITMENT; -public class DefaultRecoverySPI implements Recovery.SPI +public class DefaultRecoveryService implements RecoveryService { private final PositionToRecoverFrom positionToRecoverFrom; private final StorageEngine storageEngine; private final TransactionIdStore transactionIdStore; private final LogicalTransactionStore logicalTransactionStore; - public DefaultRecoverySPI( + public DefaultRecoveryService( StorageEngine storageEngine, LogTailScanner logTailScanner, TransactionIdStore transactionIdStore, LogicalTransactionStore logicalTransactionStore, diff --git a/community/kernel/src/main/java/org/neo4j/kernel/recovery/Recovery.java b/community/kernel/src/main/java/org/neo4j/kernel/recovery/Recovery.java index 4570ea4dcc9a0..a2bef047ef125 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/recovery/Recovery.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/recovery/Recovery.java @@ -19,9 +19,6 @@ */ package org.neo4j.kernel.recovery; -import java.io.IOException; - -import org.neo4j.helpers.collection.Visitor; import org.neo4j.kernel.impl.core.StartupStatisticsProvider; import org.neo4j.kernel.impl.transaction.CommittedTransactionRepresentation; import org.neo4j.kernel.impl.transaction.log.LogPosition; @@ -29,7 +26,6 @@ import org.neo4j.kernel.impl.transaction.log.TransactionIdStore; import org.neo4j.kernel.impl.transaction.log.entry.LogEntryCommit; import org.neo4j.kernel.lifecycle.LifecycleAdapter; -import org.neo4j.storageengine.api.TransactionApplicationMode; import static org.neo4j.storageengine.api.TransactionApplicationMode.RECOVERY; import static org.neo4j.storageengine.api.TransactionApplicationMode.REVERSE_RECOVERY; @@ -40,67 +36,17 @@ */ public class Recovery extends LifecycleAdapter { - // TODO - public interface Monitor - { - default void recoveryRequired( LogPosition recoveryPosition ) - { // no-op by default - } - - default void transactionRecovered( long txId ) - { // no-op by default - } - - default void recoveryCompleted( int numberOfRecoveredTransactions ) - { // no-op by default - } - - default void reverseStoreRecoveryCompleted( long lowestRecoveredTxId ) - { // no-op by default - } - - default void failToRecoverTransactionsAfterCommit( Throwable t, LogEntryCommit commitEntry, - LogPosition recoveryToPosition ) - { - // no-op - } - - default void failToRecoverTransactionsAfterPosition( Throwable t, LogPosition recoveryFromPosition ) - { - // no-op - } - } - - public interface RecoveryApplier extends Visitor, AutoCloseable - { - } - - public interface SPI - { - TransactionCursor getTransactions( LogPosition recoveryFromPosition ) throws IOException; - - TransactionCursor getTransactionsInReverseOrder( LogPosition recoveryFromPosition ) throws IOException; - - LogPosition getPositionToRecoverFrom() throws IOException; - - void startRecovery(); - - RecoveryApplier getRecoveryApplier( TransactionApplicationMode mode ) throws Exception; - - void transactionsRecovered( CommittedTransactionRepresentation lastRecoveredTransaction, - LogPosition positionAfterLastRecoveredTransaction ); - } - private final SPI spi; - private final Monitor monitor; + private final RecoveryService recoveryService; + private final RecoveryMonitor monitor; private final StartupStatisticsProvider startupStatistics; private final TransactionLogPruner logPruner; private int numberOfRecoveredTransactions; - public Recovery( SPI spi, StartupStatisticsProvider startupStatistics, TransactionLogPruner logPruner, - Monitor monitor ) + public Recovery( RecoveryService recoveryService, StartupStatisticsProvider startupStatistics, + TransactionLogPruner logPruner, RecoveryMonitor monitor ) { - this.spi = spi; + this.recoveryService = recoveryService; this.monitor = monitor; this.startupStatistics = startupStatistics; this.logPruner = logPruner; @@ -109,14 +55,14 @@ public Recovery( SPI spi, StartupStatisticsProvider startupStatistics, Transacti @Override public void init() throws Throwable { - LogPosition recoveryFromPosition = spi.getPositionToRecoverFrom(); + LogPosition recoveryFromPosition = recoveryService.getPositionToRecoverFrom(); if ( LogPosition.UNSPECIFIED.equals( recoveryFromPosition ) ) { return; } monitor.recoveryRequired( recoveryFromPosition ); - spi.startRecovery(); + recoveryService.startRecovery(); LogPosition recoveryToPosition = recoveryFromPosition; CommittedTransactionRepresentation lastTransaction = null; @@ -124,8 +70,8 @@ public void init() throws Throwable try { long lowestRecoveredTxId = TransactionIdStore.BASE_TX_ID; - try ( TransactionCursor transactionsToRecover = spi.getTransactionsInReverseOrder( recoveryFromPosition ); - RecoveryApplier recoveryVisitor = spi.getRecoveryApplier( REVERSE_RECOVERY ) ) + try ( TransactionCursor transactionsToRecover = recoveryService.getTransactionsInReverseOrder( recoveryFromPosition ); + RecoveryApplier recoveryVisitor = recoveryService.getRecoveryApplier( REVERSE_RECOVERY ) ) { while ( transactionsToRecover.next() ) { @@ -141,8 +87,8 @@ public void init() throws Throwable monitor.reverseStoreRecoveryCompleted( lowestRecoveredTxId ); - try ( TransactionCursor transactionsToRecover = spi.getTransactions( recoveryFromPosition ); - RecoveryApplier recoveryVisitor = spi.getRecoveryApplier( RECOVERY ) ) + try ( TransactionCursor transactionsToRecover = recoveryService.getTransactions( recoveryFromPosition ); + RecoveryApplier recoveryVisitor = recoveryService.getRecoveryApplier( RECOVERY ) ) { while ( transactionsToRecover.next() ) { @@ -170,7 +116,7 @@ public void init() throws Throwable } logPruner.prune( recoveryToPosition ); - spi.transactionsRecovered( lastTransaction, recoveryToPosition ); + recoveryService.transactionsRecovered( lastTransaction, recoveryToPosition ); startupStatistics.setNumberOfRecoveredTransactions( numberOfRecoveredTransactions ); monitor.recoveryCompleted( numberOfRecoveredTransactions ); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryApplier.java b/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryApplier.java new file mode 100644 index 0000000000000..4a5283db212cc --- /dev/null +++ b/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryApplier.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2002-2017 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.neo4j.kernel.recovery; + +import org.neo4j.helpers.collection.Visitor; +import org.neo4j.kernel.impl.transaction.CommittedTransactionRepresentation; + +/** + * Recovery transaction applier that will apply all recovered transaction to underlying store. + */ +public interface RecoveryApplier extends Visitor, AutoCloseable +{ +} diff --git a/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryMonitor.java b/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryMonitor.java new file mode 100644 index 0000000000000..6decff0098345 --- /dev/null +++ b/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryMonitor.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2002-2017 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.neo4j.kernel.recovery; + +import org.neo4j.kernel.impl.transaction.log.LogPosition; +import org.neo4j.kernel.impl.transaction.log.entry.LogEntryCommit; + +public interface RecoveryMonitor +{ + default void recoveryRequired( LogPosition recoveryPosition ) + { + // noop + } + + default void transactionRecovered( long txId ) + { + //noop + } + + default void recoveryCompleted( int numberOfRecoveredTransactions ) + { + //noop + } + + default void reverseStoreRecoveryCompleted( long lowestRecoveredTxId ) + { + //noop + } + + default void failToRecoverTransactionsAfterCommit( Throwable t, LogEntryCommit commitEntry, + LogPosition recoveryToPosition ) + { + //noop + } + + default void failToRecoverTransactionsAfterPosition( Throwable t, LogPosition recoveryFromPosition ) + { + //noop + } +} diff --git a/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryService.java b/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryService.java new file mode 100644 index 0000000000000..15d2c2b05ba76 --- /dev/null +++ b/community/kernel/src/main/java/org/neo4j/kernel/recovery/RecoveryService.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2002-2017 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.neo4j.kernel.recovery; + +import java.io.IOException; + +import org.neo4j.kernel.impl.transaction.CommittedTransactionRepresentation; +import org.neo4j.kernel.impl.transaction.log.LogPosition; +import org.neo4j.kernel.impl.transaction.log.TransactionCursor; +import org.neo4j.storageengine.api.TransactionApplicationMode; + +public interface RecoveryService +{ + void startRecovery(); + + TransactionCursor getTransactions( LogPosition recoveryFromPosition ) throws IOException; + + TransactionCursor getTransactionsInReverseOrder( LogPosition recoveryFromPosition ) throws IOException; + + LogPosition getPositionToRecoverFrom() throws IOException; + + RecoveryApplier getRecoveryApplier( TransactionApplicationMode mode ) throws Exception; + + void transactionsRecovered( CommittedTransactionRepresentation lastRecoveredTransaction, + LogPosition positionAfterLastRecoveredTransaction ); +} diff --git a/community/kernel/src/test/java/org/neo4j/kernel/RecoveryCorruptedTransactionLogIT.java b/community/kernel/src/test/java/org/neo4j/kernel/RecoveryCorruptedTransactionLogIT.java index b31f2c36dacfd..064e3d71549be 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/RecoveryCorruptedTransactionLogIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/RecoveryCorruptedTransactionLogIT.java @@ -68,7 +68,6 @@ import org.neo4j.kernel.lifecycle.Lifespan; import org.neo4j.kernel.monitoring.Monitors; import org.neo4j.kernel.recovery.LogTailScanner; -import org.neo4j.kernel.recovery.Recovery; import org.neo4j.logging.AssertableLogProvider; import org.neo4j.storageengine.api.StorageCommand; import org.neo4j.test.TestGraphDatabaseFactory; @@ -490,7 +489,7 @@ public void writeStartEntry( int masterId, int authorId, long timeWritten, long } } - private static class RecoveryMonitor implements Recovery.Monitor + private static class RecoveryMonitor implements org.neo4j.kernel.recovery.RecoveryMonitor { private List recoveredTransactions = new ArrayList<>(); private int numberOfRecoveredTransactions; diff --git a/community/kernel/src/test/java/org/neo4j/kernel/RecoveryIT.java b/community/kernel/src/test/java/org/neo4j/kernel/RecoveryIT.java index bd121ef84b5a2..9ec97761c5aa2 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/RecoveryIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/RecoveryIT.java @@ -34,7 +34,6 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; - import javax.annotation.Nonnull; import org.neo4j.adversaries.ClassGuardedAdversary; @@ -81,7 +80,7 @@ import org.neo4j.kernel.internal.DatabaseHealth; import org.neo4j.kernel.internal.GraphDatabaseAPI; import org.neo4j.kernel.monitoring.Monitors; -import org.neo4j.kernel.recovery.Recovery; +import org.neo4j.kernel.recovery.RecoveryMonitor; import org.neo4j.logging.NullLog; import org.neo4j.logging.NullLogProvider; import org.neo4j.storageengine.api.StorageEngine; @@ -93,6 +92,9 @@ import org.neo4j.test.rule.TestDirectory; import org.neo4j.test.rule.fs.DefaultFileSystemRule; +import static java.lang.Long.max; +import static java.util.Arrays.asList; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.hamcrest.Matchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -100,11 +102,6 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; - -import static java.lang.Long.max; -import static java.util.Arrays.asList; -import static java.util.concurrent.TimeUnit.SECONDS; - import static org.neo4j.graphdb.RelationshipType.withName; import static org.neo4j.helpers.ArrayUtil.array; import static org.neo4j.helpers.collection.Iterables.asList; @@ -358,7 +355,7 @@ public void shouldSeeTheSameRecordsAtCheckpointAsAfterReverseRecovery() throws E Monitors monitors = new Monitors(); AtomicReference pageCache = new AtomicReference<>(); AtomicReference reversedFs = new AtomicReference<>(); - monitors.addMonitorListener( new Recovery.Monitor() + monitors.addMonitorListener( new RecoveryMonitor() { @Override public void reverseStoreRecoveryCompleted( long checkpointTxId ) diff --git a/community/kernel/src/test/java/org/neo4j/kernel/RecoveryTest.java b/community/kernel/src/test/java/org/neo4j/kernel/RecoveryTest.java index 1670db688d477..4c99f2058f97d 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/RecoveryTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/RecoveryTest.java @@ -60,10 +60,11 @@ import org.neo4j.kernel.impl.transaction.log.entry.VersionAwareLogEntryReader; import org.neo4j.kernel.lifecycle.LifeSupport; import org.neo4j.kernel.monitoring.Monitors; -import org.neo4j.kernel.recovery.DefaultRecoverySPI; +import org.neo4j.kernel.recovery.DefaultRecoveryService; import org.neo4j.kernel.recovery.LogTailScanner; import org.neo4j.kernel.recovery.Recovery; -import org.neo4j.kernel.recovery.Recovery.RecoveryApplier; +import org.neo4j.kernel.recovery.RecoveryApplier; +import org.neo4j.kernel.recovery.RecoveryMonitor; import org.neo4j.kernel.recovery.TransactionLogPruner; import org.neo4j.logging.AssertableLogProvider; import org.neo4j.storageengine.api.StorageEngine; @@ -142,7 +143,7 @@ public void shouldRecoverExistingData() throws Exception } ); LifeSupport life = new LifeSupport(); - Recovery.Monitor monitor = mock( Recovery.Monitor.class ); + RecoveryMonitor monitor = mock( RecoveryMonitor.class ); final AtomicBoolean recoveryRequired = new AtomicBoolean(); try { @@ -159,7 +160,7 @@ public void shouldRecoverExistingData() throws Exception AssertableLogProvider logProvider = new AssertableLogProvider( true ); TransactionLogPruner logPruner = new TransactionLogPruner( storeDir, logFiles, fileSystemRule.get() ); - life.add( new Recovery( new DefaultRecoverySPI( storageEngine, tailScanner, transactionIdStore, txStore, NO_MONITOR ) + life.add( new Recovery( new DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, txStore, NO_MONITOR ) { private int nr; @@ -248,7 +249,7 @@ public void shouldSeeThatACleanDatabaseShouldNotRequireRecovery() throws Excepti } ); LifeSupport life = new LifeSupport(); - Recovery.Monitor monitor = mock( Recovery.Monitor.class ); + RecoveryMonitor monitor = mock( RecoveryMonitor.class ); try { StorageEngine storageEngine = mock( StorageEngine.class ); @@ -264,7 +265,7 @@ public void shouldSeeThatACleanDatabaseShouldNotRequireRecovery() throws Excepti AssertableLogProvider logProvider = new AssertableLogProvider( true ); TransactionLogPruner logPruner = new TransactionLogPruner( storeDir, logFiles, fileSystemRule.get() ); - life.add( new Recovery( new DefaultRecoverySPI( storageEngine, tailScanner, transactionIdStore, txStore, NO_MONITOR ) + life.add( new Recovery( new DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, txStore, NO_MONITOR ) { @Override public void startRecovery() @@ -389,7 +390,7 @@ public void shouldTellTransactionIdStoreAfterSuccessfullRecovery() throws Except private boolean recover( File storeDir, PhysicalLogFiles logFiles ) { LifeSupport life = new LifeSupport(); - Recovery.Monitor monitor = mock( Recovery.Monitor.class ); + RecoveryMonitor monitor = mock( RecoveryMonitor.class ); final AtomicBoolean recoveryRequired = new AtomicBoolean(); try { @@ -406,7 +407,7 @@ private boolean recover( File storeDir, PhysicalLogFiles logFiles ) AssertableLogProvider logProvider = new AssertableLogProvider( true ); TransactionLogPruner logPruner = new TransactionLogPruner( storeDir, logFiles, fileSystemRule.get() ); - life.add( new Recovery( new DefaultRecoverySPI( storageEngine, tailScanner, transactionIdStore, txStore, NO_MONITOR ) + life.add( new Recovery( new DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, txStore, NO_MONITOR ) { @Override public void startRecovery() diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/PhysicalLogicalTransactionStoreTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/PhysicalLogicalTransactionStoreTest.java index 19d08b4ac2a0a..9fea3c170bdc3 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/PhysicalLogicalTransactionStoreTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/PhysicalLogicalTransactionStoreTest.java @@ -45,7 +45,9 @@ import org.neo4j.kernel.lifecycle.LifeSupport; import org.neo4j.kernel.monitoring.Monitors; import org.neo4j.kernel.recovery.Recovery; -import org.neo4j.kernel.recovery.Recovery.RecoveryApplier; +import org.neo4j.kernel.recovery.RecoveryApplier; +import org.neo4j.kernel.recovery.RecoveryMonitor; +import org.neo4j.kernel.recovery.RecoveryService; import org.neo4j.kernel.recovery.TransactionLogPruner; import org.neo4j.logging.AssertableLogProvider; import org.neo4j.storageengine.api.StorageCommand; @@ -198,7 +200,7 @@ public void shouldOpenAndRecoverExistingData() throws Exception transactionIdStore, BYPASS, DATABASE_HEALTH ) ); AssertableLogProvider logProvider = new AssertableLogProvider( true ); TransactionLogPruner logPruner = new TransactionLogPruner( testDir, logFiles, fileSystemRule.get() ); - life.add( new Recovery( new Recovery.SPI() + life.add( new Recovery( new RecoveryService() { @Override public void startRecovery() @@ -235,7 +237,7 @@ public void transactionsRecovered( CommittedTransactionRepresentation lastRecove LogPosition positionAfterLastRecoveredTransaction ) { } - }, new StartupStatisticsProvider(), logPruner, mock( Recovery.Monitor.class ) ) ); + }, new StartupStatisticsProvider(), logPruner, mock( RecoveryMonitor.class ) ) ); // WHEN try