use of org.neo4j.kernel.impl.transaction.log.checkpoint.SimpleTriggerInfo in project neo4j by neo4j.
the class TestRecoveryMultipleDataSources method main.
public static void main(String[] args) throws IOException {
if (args.length != 1) {
exit(1);
}
File storeDir = new File(args[0]);
GraphDatabaseService db = new TestGraphDatabaseFactory().newEmbeddedDatabase(storeDir);
try (Transaction tx = db.beginTx()) {
db.createNode().createRelationshipTo(db.createNode(), MyRelTypes.TEST);
tx.success();
}
((GraphDatabaseAPI) db).getDependencyResolver().resolveDependency(CheckPointer.class).forceCheckPoint(new SimpleTriggerInfo("test"));
try (Transaction tx = db.beginTx()) {
db.index().forNodes("index").add(db.createNode(), storeDir.getAbsolutePath(), db.createNode());
tx.success();
}
exit(0);
}
use of org.neo4j.kernel.impl.transaction.log.checkpoint.SimpleTriggerInfo in project neo4j by neo4j.
the class StoreCopyServer method flushStoresAndStreamStoreFiles.
/**
* Trigger store flush (checkpoint) and write {@link NeoStoreDataSource#listStoreFiles(boolean) store files} to the
* given {@link StoreWriter}.
*
* @param triggerName name of the component asks for store files.
* @param writer store writer to write files to.
* @param includeLogs <code>true</code> if transaction logs should be copied, <code>false</code> otherwise.
* @return a {@link RequestContext} specifying at which point the store copy started.
*/
public RequestContext flushStoresAndStreamStoreFiles(String triggerName, StoreWriter writer, boolean includeLogs) {
try {
ThrowingAction<IOException> checkPointAction = () -> {
monitor.startTryCheckPoint();
checkPointer.tryCheckPoint(new SimpleTriggerInfo(triggerName));
monitor.finishTryCheckPoint();
};
// Copy the store files
long lastAppliedTransaction;
try (Resource lock = mutex.storeCopy(checkPointAction);
ResourceIterator<StoreFileMetadata> files = dataSource.listStoreFiles(includeLogs)) {
lastAppliedTransaction = checkPointer.lastCheckPointedTransactionId();
monitor.startStreamingStoreFiles();
ByteBuffer temporaryBuffer = ByteBuffer.allocateDirect((int) ByteUnit.mebiBytes(1));
while (files.hasNext()) {
StoreFileMetadata meta = files.next();
File file = meta.file();
int recordSize = meta.recordSize();
// Read from paged file if mapping exists. Otherwise read through file system.
// A file is mapped if it is a store, and we have a running database, which will be the case for
// both online backup, and when we are the master of an HA cluster.
final Optional<PagedFile> optionalPagedFile = pageCache.getExistingMapping(file);
if (optionalPagedFile.isPresent()) {
try (PagedFile pagedFile = optionalPagedFile.get()) {
long fileSize = pagedFile.fileSize();
try (ReadableByteChannel fileChannel = pagedFile.openReadableByteChannel()) {
doWrite(writer, temporaryBuffer, file, recordSize, fileChannel, fileSize);
}
}
} else {
try (ReadableByteChannel fileChannel = fileSystem.open(file, "r")) {
long fileSize = fileSystem.getFileSize(file);
doWrite(writer, temporaryBuffer, file, recordSize, fileChannel, fileSize);
}
}
}
} finally {
monitor.finishStreamingStoreFiles();
}
return anonymous(lastAppliedTransaction);
} catch (IOException e) {
throw new ServerFailureException(e);
}
}
use of org.neo4j.kernel.impl.transaction.log.checkpoint.SimpleTriggerInfo in project neo4j by neo4j.
the class DefaultMasterImplSPITest method flushStoreFilesWithCorrectCheckpointTriggerName.
@Test
public void flushStoreFilesWithCorrectCheckpointTriggerName() throws IOException {
CheckPointer checkPointer = mock(CheckPointer.class);
NeoStoreDataSource dataSource = mock(NeoStoreDataSource.class);
when(dataSource.listStoreFiles(anyBoolean())).thenReturn(Iterators.emptyIterator());
DefaultMasterImplSPI master = new DefaultMasterImplSPI(mock(GraphDatabaseAPI.class, RETURNS_MOCKS), mock(FileSystemAbstraction.class), new Monitors(), mock(LabelTokenHolder.class), mock(PropertyKeyTokenHolder.class), mock(RelationshipTypeTokenHolder.class), mock(IdGeneratorFactory.class), mock(TransactionCommitProcess.class), checkPointer, mock(TransactionIdStore.class), mock(LogicalTransactionStore.class), dataSource, mock(PageCache.class), new StoreCopyCheckPointMutex());
master.flushStoresAndStreamStoreFiles(mock(StoreWriter.class));
TriggerInfo expectedTriggerInfo = new SimpleTriggerInfo(DefaultMasterImplSPI.STORE_COPY_CHECKPOINT_TRIGGER);
verify(checkPointer).tryCheckPoint(expectedTriggerInfo);
}
use of org.neo4j.kernel.impl.transaction.log.checkpoint.SimpleTriggerInfo in project neo4j by neo4j.
the class ReadReplicaStoreCopyIT method forceLogRotationAndPruning.
private static void forceLogRotationAndPruning(CoreClusterMember core) {
try {
DependencyResolver dependencyResolver = core.database().getDependencyResolver();
dependencyResolver.resolveDependency(LogRotation.class).rotateLogFile();
SimpleTriggerInfo info = new SimpleTriggerInfo("test");
dependencyResolver.resolveDependency(CheckPointer.class).forceCheckPoint(info);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
use of org.neo4j.kernel.impl.transaction.log.checkpoint.SimpleTriggerInfo in project neo4j by neo4j.
the class MetricsKernelExtensionFactoryIT method shouldUseEventBasedReportingCorrectly.
@Test
public void shouldUseEventBasedReportingCorrectly() throws Throwable {
// GIVEN
addNodes(100);
// WHEN
CheckPointer checkPointer = db.getDependencyResolver().resolveDependency(CheckPointer.class);
checkPointer.checkPointIfNeeded(new SimpleTriggerInfo("test"));
// wait for the file to be written before shutting down the cluster
File metricFile = metricsCsv(outputPath, CheckPointingMetrics.CHECK_POINT_DURATION);
long result = readLongValueAndAssert(metricFile, (newValue, currentValue) -> newValue > 0);
// THEN
assertThat(result, greaterThanOrEqualTo(0L));
}
Aggregations