class BackupImpl implements TheBackupInterface {

    @Override
    public Response<Void> fullBackup( StoreWriter writer, boolean forensics )
    {
        String backupIdentifier = getBackupIdentifier();
        try ( StoreWriter storeWriter = writer )
        {
            logger.log( "%s: Full backup started...", backupIdentifier );
            RequestContext copyStartContext = storeCopyServer.flushStoresAndStreamStoreFiles(
                    FULL_BACKUP_CHECKPOINT_TRIGGER, storeWriter, forensics );
            ResponsePacker responsePacker = new StoreCopyResponsePacker( logicalTransactionStore, transactionIdStore,
                    logFileInformation, storeId, copyStartContext.lastAppliedTransaction() + 1,
                    storeCopyServer.monitor() );
            long optionalTransactionId = copyStartContext.lastAppliedTransaction();
            return responsePacker.packTransactionStreamResponse( anonymous( optionalTransactionId ), null/*no response object*/ );
        }
        finally
        {
            logger.log( "%s: Full backup finished.", backupIdentifier );
        }
    }

    public  BackupImpl( StoreCopyServer storeCopyServer,
                       LogicalTransactionStore logicalTransactionStore, TransactionIdStore transactionIdStore,
                       LogFileInformation logFileInformation, Supplier<StoreId> storeId, LogProvider logProvider );

}