/*package*/ void setState(int rootIdx, long nodeBlkLimit, long recordsBlkLimit) { currentRoot(rootIdx) ; nodeBlocksLimit(nodeBlkLimit) ; recordsBlocksLimit(recordsBlkLimit) ; log("Set") ; setDirtyFlag() ; // But don't write it. } @Override
@Override public void recover(ByteBuffer ref) { stateManager.setState(ref) ; rootIdx = stateManager.getRoot() ; nodeManager.resetAlloc(stateManager.getNodeBlocksLimit()) ; recordsMgr.resetAlloc(stateManager.getRecordsBlocksLimit()) ; }
private void log(String operation) { if ( LOGGING ) FmtLog.info(log, "%s state: root=%d // node block limit = %d // records block limit %d", operation, currentRoot(), nodeBlocksLimit(), recordsBlocksLimit()) ; }
BPTStateMgr stateMgr = new BPTStateMgr(rootData) ; blkMgrNodes.resetAlloc(stateMgr.getNodeBlocksLimit()); blkMgrRecords.resetAlloc(stateMgr.getRecordsBlocksLimit());
@Override protected ByteBuffer _commitPrepare(TxnId txnId, BptTxnState state) { nodeManager.getBlockMgr().sync(); recordsMgr.getBlockMgr().sync(); long nodeLimit = nodeManager.allocLimit() ; long recordsLimit = recordsMgr.allocLimit() ; // But don't write it yet. stateManager.setState(state.getRoot(), nodeLimit, recordsLimit); return stateManager.getState() ; }
@Override protected void writeStateEvent() { log("Write") ; }
@Override public void close() { nodeManager.close() ; recordsMgr.close() ; stateManager.close() ; }
/*package*/ void init(BPTStateMgr stateManager, BPTreeNodeMgr nodeManager, BPTreeRecordsMgr recordsMgr) { // Second part of creating. // Some of these point to the BPlusTree object so we create te BPlusTree as // absic structure then initialize fully here. this.rootIdx = stateManager.getRoot() ; this.stateManager = stateManager ; this.nodeManager = nodeManager ; this.recordsMgr = recordsMgr ; }
/** Reset an existing B+Tree with different storage units. * For each, null means "use same as original" */ public static BPlusTree rebuild(BPlusTree bpt, BufferChannel chan, BlockMgr blkMgrNodes, BlockMgr blkMgrLeaves) { if ( chan == null ) chan = bpt.getStateManager().getBufferChannel() ; if ( blkMgrNodes == null ) blkMgrNodes = bpt.getNodeManager().getBlockMgr() ; if ( blkMgrLeaves == null ) blkMgrLeaves = bpt.getNodeManager().getBlockMgr() ; BPlusTree bpt2 = attach(bpt.getComponentId(), bpt.getParams(), true, chan, blkMgrNodes, blkMgrLeaves) ; return bpt2 ; }
public int getRoot() { return currentRoot() ; }
public long getNodeBlocksLimit() { return nodeBlocksLimit() ; }
private void log(String operation) { if ( LOGGING ) FmtLog.info(log, "%s state: root=%d // node block limit = %d // records block limit %d", operation, currentRoot(), nodeBlocksLimit(), recordsBlocksLimit()) ; }
BPTStateMgr stateMgr = new BPTStateMgr(rootData) ; blkMgrNodes.resetAlloc(stateMgr.getNodeBlocksLimit()); blkMgrRecords.resetAlloc(stateMgr.getRecordsBlocksLimit());
@Override protected ByteBuffer _commitPrepare(TxnId txnId, BptTxnState state) { nodeManager.getBlockMgr().sync(); recordsMgr.getBlockMgr().sync(); long nodeLimit = nodeManager.allocLimit() ; long recordsLimit = recordsMgr.allocLimit() ; // But don't write it yet. stateManager.setState(state.getRoot(), nodeLimit, recordsLimit); return stateManager.getState() ; }
@Override protected void readStateEvent() { log("Read") ; }
@Override public void close() { nodeManager.close() ; recordsMgr.close() ; stateManager.close() ; }
/*package*/ void init(BPTStateMgr stateManager, BPTreeNodeMgr nodeManager, BPTreeRecordsMgr recordsMgr) { // Second part of creating. // Some of these point to the BPlusTree object so we create te BPlusTree as // absic structure then initialize fully here. this.rootIdx = stateManager.getRoot() ; this.stateManager = stateManager ; this.nodeManager = nodeManager ; this.recordsMgr = recordsMgr ; }
/** Reset an existing B+Tree with different storage units. * For each, null means "use same as original" */ public static BPlusTree rebuild(BPlusTree bpt, BufferChannel chan, BlockMgr blkMgrNodes, BlockMgr blkMgrLeaves) { if ( chan == null ) chan = bpt.getStateManager().getBufferChannel() ; if ( blkMgrNodes == null ) blkMgrNodes = bpt.getNodeManager().getBlockMgr() ; if ( blkMgrLeaves == null ) blkMgrLeaves = bpt.getNodeManager().getBlockMgr() ; BPlusTree bpt2 = attach(bpt.getComponentId(), bpt.getParams(), true, chan, blkMgrNodes, blkMgrLeaves) ; return bpt2 ; }