package org.neo4j.onlinebackup; import java.io.File; import java.io.IOException; import org.junit.Before; import org.junit.Test; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.Transaction; import org.neo4j.kernel.EmbeddedGraphDatabase; import org.neo4j.kernel.impl.transaction.XaDataSourceManager; import org.neo4j.kernel.impl.transaction.xaframework.XaDataSource; /** * Try to backup Neo to another running Neo instance. */ public class TestApplyNewLogs { private static final String FILE_SEP = System.getProperty( "file.separator" ); private static final String TARGET_DIR = "target"; private static final String VAR = TARGET_DIR + FILE_SEP + "var"; private static final String STORE_LOCATION_DIR = VAR + FILE_SEP + "neo-db"; private static final String BACKUP_LOCATION_DIR = VAR + FILE_SEP + "neo-backup"; private enum RelTypes implements RelationshipType { TEST } @Before public void clean() throws IOException { Util.deleteDir( new File( VAR ) ); System.out.println( "setting up simple database and backup-copy" ); EmbeddedGraphDatabase graphDb = new EmbeddedGraphDatabase( STORE_LOCATION_DIR ); graphDb.shutdown(); Util.copyDir( STORE_LOCATION_DIR, BACKUP_LOCATION_DIR ); graphDb = new EmbeddedGraphDatabase( STORE_LOCATION_DIR ); // IndexService index = new LuceneIndexService( graphDb ); XaDataSourceManager xaDsMgr = graphDb.getConfig().getTxModule().getXaDataSourceManager(); for ( XaDataSource xaDs : xaDsMgr.getAllRegisteredDataSources() ) { xaDs.keepLogicalLogs( true ); } Transaction tx = graphDb.beginTx(); try { Node node1 = graphDb.createNode(); graphDb.getReferenceNode().createRelationshipTo( node1, RelTypes.TEST ); node1.setProperty( "test", 1 ); // index.index( node1, "backup_test", "1" ); tx.success(); } finally { tx.finish(); } for ( XaDataSource xaDs : xaDsMgr.getAllRegisteredDataSources() ) { xaDs.rotateLogicalLog(); } tx = graphDb.beginTx(); try { Node node2 = graphDb.createNode(); graphDb.getReferenceNode().createRelationshipTo( node2, RelTypes.TEST ); node2.setProperty( "test", 2 ); // index.index( node2, "backup_test", "2" ); tx.success(); } finally { tx.finish(); } // index.shutdown(); graphDb.shutdown(); Util.copyLogs( STORE_LOCATION_DIR, BACKUP_LOCATION_DIR ); } @Test public void backup() throws IOException { String dest = "target/var/neo-backup"; ApplyNewLogs.main( new String[] { dest } ); GraphDatabaseService graphDb = new EmbeddedGraphDatabase( dest ); // IndexService index = new LuceneIndexService( graphDb ); Transaction tx = graphDb.beginTx(); try { // Assert.assertNotNull( index.getSingleNode( "backup_test", "1" ) ); // Assert.assertNotNull( index.getSingleNode( "backup_test", "2" ) ); // assertNotNull( index.getSingleNode( "backup_test", "1" ) ); // assertNotNull( index.getSingleNode( "backup_test", "2" ) ); } finally { tx.finish(); } // index.shutdown(); graphDb.shutdown(); } }