/** */ package com.sleepycat.je.recovery; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.dbi.DatabaseImpl; import com.sleepycat.je.log.LogManager; import com.sleepycat.je.tree.ChildReference; import com.sleepycat.je.tree.IN; import com.sleepycat.je.tree.WithRootLatched; import de.ovgu.cide.jakutil.*; class RootFlusher implements WithRootLatched { private DatabaseImpl db; private boolean flushed; private boolean stillRoot; private LogManager logManager; private long targetNodeId; RootFlusher( DatabaseImpl db, LogManager logManager, long targetNodeId){ this.db=db; flushed=false; this.logManager=logManager; this.targetNodeId=targetNodeId; stillRoot=false; } /** * Flush the rootIN if dirty. */ public IN doWork( ChildReference root) throws DatabaseException { if (root == null) { return null; } IN rootIN=(IN)root.fetchTarget(db,null); this.hook599(root,rootIN); return null; } boolean getFlushed(){ return flushed; } boolean stillRoot(){ return stillRoot; } protected void hook599( ChildReference root, IN rootIN) throws DatabaseException { if (rootIN.getNodeId() == targetNodeId) { stillRoot=true; if (rootIN.getDirty()) { long newLsn=rootIN.log(logManager); root.setLsn(newLsn); flushed=true; } } } }