Search in sources :

Example 1 with ServerFailureException

use of org.neo4j.com.ServerFailureException 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);
    }
}
Also used : ReadableByteChannel(java.nio.channels.ReadableByteChannel) ServerFailureException(org.neo4j.com.ServerFailureException) PagedFile(org.neo4j.io.pagecache.PagedFile) Resource(org.neo4j.graphdb.Resource) IOException(java.io.IOException) StoreFileMetadata(org.neo4j.storageengine.api.StoreFileMetadata) ByteBuffer(java.nio.ByteBuffer) SimpleTriggerInfo(org.neo4j.kernel.impl.transaction.log.checkpoint.SimpleTriggerInfo) PagedFile(org.neo4j.io.pagecache.PagedFile) FileUtils.getMostCanonicalFile(org.neo4j.io.fs.FileUtils.getMostCanonicalFile) File(java.io.File)

Aggregations

File (java.io.File)1 IOException (java.io.IOException)1 ByteBuffer (java.nio.ByteBuffer)1 ReadableByteChannel (java.nio.channels.ReadableByteChannel)1 ServerFailureException (org.neo4j.com.ServerFailureException)1 Resource (org.neo4j.graphdb.Resource)1 FileUtils.getMostCanonicalFile (org.neo4j.io.fs.FileUtils.getMostCanonicalFile)1 PagedFile (org.neo4j.io.pagecache.PagedFile)1 SimpleTriggerInfo (org.neo4j.kernel.impl.transaction.log.checkpoint.SimpleTriggerInfo)1 StoreFileMetadata (org.neo4j.storageengine.api.StoreFileMetadata)1