/** */ package com.sleepycat.je.recovery; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.tree.ChildReference; import com.sleepycat.je.tree.IN; import com.sleepycat.je.tree.Tree; import com.sleepycat.je.tree.WithRootLatched; import com.sleepycat.je.utilint.DbLsn; import de.ovgu.cide.jakutil.*; class RootUpdater implements WithRootLatched { private Tree tree; private IN inFromLog; private long lsn=DbLsn.NULL_LSN; private boolean inserted=false; private boolean replaced=false; private long origLsn=DbLsn.NULL_LSN; RootUpdater( Tree tree, IN inFromLog, long lsn){ this.tree=tree; this.inFromLog=inFromLog; this.lsn=lsn; } public IN doWork( ChildReference root) throws DatabaseException { ChildReference newRoot=tree.makeRootChildReference(inFromLog,new byte[0],lsn); this.hook600(); if (root == null) { tree.setRoot(newRoot,false); inserted=true; } else { origLsn=root.getLsn(); if (DbLsn.compareTo(origLsn,lsn) < 0) { tree.setRoot(newRoot,false); replaced=true; } } return null; } boolean updateDone(){ return inserted || replaced; } boolean getInserted(){ return inserted; } boolean getReplaced(){ return replaced; } long getOriginalLsn(){ return origLsn; } protected void hook600() throws DatabaseException { } }