Question

I am using Neo4j(embedded) Enterprise edition 1.9.4 along with Scala-Neo4j wrapper in my project. I tried to backup the Neo4j data using Java like below

  def backup_data()
  {
        val backupPath: File = new File("D:/neo4j-enterprise-1.9.4/data/backup/")
        val backup = OnlineBackup.from( "127.0.0.1" )
        if(backupPath.list().length > 0)
        {
            backup.incremental( backupPath.getPath() )
        }
        else
        {
        backup.full( backupPath.getPath() );
        }
  }

It is working fine for the full backup. But the incremental backup part is throwing the Null pointer exception.

Where did I go wrong?

EDIT

Building the GraphDatabase instance through Scala-Neo4j wrapper

class MyNeo4jClass extends SomethingClass with Neo4jWrapper with EmbeddedGraphDatabaseServiceProvider {
  def neo4jStoreDir = "/tmp/temp-neo-test"
  . . .
}

Stacktrace

Exception in thread "main" java.lang.NullPointerException
    at org.neo4j.consistency.checking.OwnerChain$3.checkReference(OwnerChain.java:111)
    at org.neo4j.consistency.checking.OwnerChain$3.checkReference(OwnerChain.java:106)
    at org.neo4j.consistency.report.ConsistencyReporter$DiffReportHandler.checkReference(ConsistencyReporter.java:330)
    at org.neo4j.consistency.report.ConsistencyReporter.dispatchReference(ConsistencyReporter.java:109)
    at org.neo4j.consistency.report.PendingReferenceCheck.checkReference(PendingReferenceCheck.java:50)
    at org.neo4j.consistency.store.DirectRecordReference.dispatch(DirectRecordReference.java:39)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.forReference(ConsistencyReporter.java:236)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.dispatchForReference(ConsistencyReporter.java:228)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.invoke(ConsistencyReporter.java:192)
    at $Proxy17.forReference(Unknown Source)
    at org.neo4j.consistency.checking.OwnerChain.check(OwnerChain.java:143)
    at org.neo4j.consistency.checking.PropertyRecordCheck.checkChange(PropertyRecordCheck.java:57)
    at org.neo4j.consistency.checking.PropertyRecordCheck.checkChange(PropertyRecordCheck.java:35)
    at org.neo4j.consistency.report.ConsistencyReporter.dispatchChange(ConsistencyReporter.java:101)
    at org.neo4j.consistency.report.ConsistencyReporter.forPropertyChange(ConsistencyReporter.java:382)
    at org.neo4j.consistency.checking.incremental.StoreProcessor.checkProperty(StoreProcessor.java:61)
    at org.neo4j.consistency.checking.AbstractStoreProcessor.processProperty(AbstractStoreProcessor.java:95)
    at org.neo4j.consistency.store.DiffRecordStore$DispatchProcessor.processProperty(DiffRecordStore.java:207)
    at org.neo4j.kernel.impl.nioneo.store.PropertyStore.accept(PropertyStore.java:83)
    at org.neo4j.kernel.impl.nioneo.store.PropertyStore.accept(PropertyStore.java:43)
    at org.neo4j.consistency.store.DiffRecordStore.accept(DiffRecordStore.java:159)
    at org.neo4j.kernel.impl.nioneo.store.RecordStore$Processor.applyById(RecordStore.java:180)
    at org.neo4j.consistency.store.DiffStore.apply(DiffStore.java:73)
    at org.neo4j.kernel.impl.nioneo.store.StoreAccess.applyToAll(StoreAccess.java:174)
    at org.neo4j.consistency.checking.incremental.IncrementalDiffCheck.execute(IncrementalDiffCheck.java:43)
    at org.neo4j.consistency.checking.incremental.DiffCheck.check(DiffCheck.java:39)
    at org.neo4j.consistency.checking.incremental.intercept.CheckingTransactionInterceptor.complete(CheckingTransactionInterceptor.java:160)
    at org.neo4j.kernel.impl.transaction.xaframework.InterceptingXaLogicalLog$1.intercept(InterceptingXaLogicalLog.java:79)
    at org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog$LogDeserializer.readAndWriteAndApplyEntry(XaLogicalLog.java:1120)
    at org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog.applyTransaction(XaLogicalLog.java:1292)
    at org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.applyCommittedTransaction(XaResourceManager.java:766)
    at org.neo4j.kernel.impl.transaction.xaframework.XaDataSource.applyCommittedTransaction(XaDataSource.java:246)
    at org.neo4j.com.ServerUtil.applyReceivedTransactions(ServerUtil.java:423)
    at org.neo4j.backup.BackupService.unpackResponse(BackupService.java:453)
    at org.neo4j.backup.BackupService.incrementalWithContext(BackupService.java:388)
    at org.neo4j.backup.BackupService.doIncrementalBackup(BackupService.java:286)
    at org.neo4j.backup.BackupService.doIncrementalBackup(BackupService.java:273)
    at org.neo4j.backup.OnlineBackup.incremental(OnlineBackup.java:147)
    at Saddahaq.User_node$.backup_data(User_node.scala:1637)
    at Saddahaq.User_node$.main(User_node.scala:2461)
    at Saddahaq.User_node.main(User_node.scala)
Was it helpful?

Solution

After the backup is taken, the backed target is checked for consistency. The incremental version of the consistency checker currently suffers from a bug leading to the observed NPE.

Workaround: either always take full backups with backup.full or prevent consistency checking on incremental backups by using

backup.incremental(backupPath.getPath(), false);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top