/*public*/private static void bpt_scan_record_buffer(BlockMgr blkMgr, boolean verbose) { RecordFactory f = SystemTDB.indexRecordTripleFactory ; RecordBufferPageMgr recordPageMgr = new RecordBufferPageMgr(f, blkMgr) ; bpt_scan_record_buffer(recordPageMgr,verbose) ; }
private static Iterator<Pair<Integer, Record>> printDataBlocks(Iterator<Pair<Integer, Record>> iter, RecordBufferPageMgr recordPageMgr) { divider() ; List<Pair<Integer, Record>> x = Iter.toList(iter) ; System.out.printf(">>Packed data blocks\n") ; for (Pair<Integer, Record> pair : x ) { System.out.printf(" %s\n",pair) ; RecordBufferPage rbp = recordPageMgr.getRead(pair.car()) ; //System.out.printf("RecordBufferPage[id=%d,link=%d] %d\n", rbp.getId(), rbp.getLink(), rbp.getCount() ) ; System.out.println(rbp) ; recordPageMgr.release(rbp) ; } System.out.printf("<<Packed data blocks\n") ; System.out.printf("Blocks: %d\n", x.size()) ; return x.iterator() ; }
@Override public void finishRead() { rBuffPageMgr.finishRead() ; }
@Override public void close() { if (currentPage != null ) pageMgr.release(currentPage) ; currentPage = null ; currentIdx = -99 ; slot = null ; pageMgr.getBlockMgr().endIterator(this) ; }
@Test public void recBufferPage02() { BlockMgr blkMgr = makeBlockMgr() ; blkMgr.beginUpdate() ; RecordBufferPageMgr rpm = new RecordBufferPageMgr(factory, blkMgr) ; int x = -99 ; { RecordBufferPage page1 = rpm.create() ; fill(page1.getRecordBuffer(), 10, 20, 30) ; x = page1.getId() ; rpm.put(page1) ; page1 = null ; } blkMgr.endUpdate() ; blkMgr.beginRead() ; { RecordBufferPage page2 = rpm.getRead(x) ; assertEquals(10, get(page2, 0)) ; assertEquals(20, get(page2, 1)) ; assertEquals(30, get(page2, 2)) ; rpm.release(page2) ; } blkMgr.endRead() ; }
@Test public void recBufferPage01() { BlockMgr blkMgr = makeBlockMgr() ; blkMgr.beginUpdate() ; RecordBufferPageMgr rpm = new RecordBufferPageMgr(factory, blkMgr) ; RecordBufferPage page = rpm.create() ; fill(page.getRecordBuffer(), 10, 20, 30) ; assertEquals(10, get(page, 0)) ; assertEquals(20, get(page, 1)) ; assertEquals(30, get(page, 2)) ; rpm.release(page) ; blkMgr.endUpdate() ; }
recordBufferPage = rbMgr.create() ;
@Override protected Record rebalance(int id1, Record r1, int id2, Record r2) { RecordBufferPageMgr mgr = bpt.getRecordsMgr().getRecordBufferPageMgr() ; RecordBufferPage page1 = mgr.getWrite(id1) ; RecordBufferPage page2 = mgr.getWrite(id2) ; // Wrong calculatation. for ( int i = page2.getCount() ; i < page1.getMaxSize()/2 ; i++ ) { //shiftOneup(node1, node2) ; Record r = page1.getRecordBuffer().getHigh() ; page1.getRecordBuffer().removeTop() ; page2.getRecordBuffer().add(0, r) ; } mgr.put(page1) ; mgr.put(page2) ; Record splitPoint = page1.getRecordBuffer().getHigh() ; splitPoint = bpt.getRecordFactory().createKeyOnly(splitPoint) ; //Record splitPoint = node1.maxRecord() ; return splitPoint ; } }
pageMgr.release(currentPage) ; RecordBufferPage nextPage = pageMgr.getReadIterator(link) ;
private RecordRangeIterator(int id, Record fromRec, Record toRec, RecordBufferPageMgr pageMgr) { currentIdx = 0 ; this.pageMgr = pageMgr; this.minRec = fromRec ; this.maxRec = toRec ; if ( toRec != null && fromRec != null && Record.keyLE(toRec, fromRec) ) { currentPage = null ; return ; } pageMgr.getBlockMgr().beginIterator(this) ; currentPage = pageMgr.getReadIterator(id) ; if ( currentPage.getCount() == 0 ) { // Empty page. close() ; return ; } if ( fromRec != null ) { currentIdx = currentPage.getRecordBuffer().find(fromRec) ; if ( currentIdx < 0 ) currentIdx = decodeIndex(currentIdx) ; } }
mgr.put(rbp) ; Record r = rbp.getRecordBuffer().getHigh() ; r = bpt.getRecordFactory().createKeyOnly(r) ;
@Override public void finishUpdate() { rBuffPageMgr.finishUpdate() ; } }
BPTreeRecordsMgr(BPlusTree bpTree, RecordBufferPageMgr rBuffPageMgr) { super(bpTree, null, rBuffPageMgr.getBlockMgr()) ; this.rBuffPageMgr = rBuffPageMgr ; super.setConverter(new Block2BPTreeRecords(bpTree, bpTree.getRecordFactory())) ; }
@Test public void recBufferPage02() { BlockMgr blkMgr = makeBlockMgr() ; blkMgr.beginUpdate() ; RecordBufferPageMgr rpm = new RecordBufferPageMgr(factory, blkMgr) ; int x = -99 ; { RecordBufferPage page1 = rpm.create() ; fill(page1.getRecordBuffer(), 10, 20, 30) ; x = page1.getId() ; rpm.put(page1) ; page1 = null ; } blkMgr.endUpdate() ; blkMgr.beginRead() ; { RecordBufferPage page2 = rpm.getRead(x) ; assertEquals(10, get(page2, 0)) ; assertEquals(20, get(page2, 1)) ; assertEquals(30, get(page2, 2)) ; rpm.release(page2) ; } blkMgr.endRead() ; }
@Test public void recBufferPage01() { BlockMgr blkMgr = makeBlockMgr() ; blkMgr.beginUpdate() ; RecordBufferPageMgr rpm = new RecordBufferPageMgr(factory, blkMgr) ; RecordBufferPage page = rpm.create() ; fill(page.getRecordBuffer(), 10, 20, 30) ; assertEquals(10, get(page, 0)) ; assertEquals(20, get(page, 1)) ; assertEquals(30, get(page, 2)) ; rpm.release(page) ; blkMgr.endUpdate() ; }
private static BPTreeRecords make() { RecordBufferPage page = recordBufferPageMgr.create() ; return new BPTreeRecords(bPlusTree, page) ; }
static Iterator<Pair<Integer, Record>> summarizeDataBlocks(Iterator<Pair<Integer, Record>> iter, RecordBufferPageMgr recordPageMgr) { divider() ; List<Pair<Integer, Record>> x = Iter.toList(iter) ; for (Pair<Integer, Record> pair : x ) { RecordBufferPage rbp = recordPageMgr.getRead(pair.car()) ; System.out.printf("%s -- RecordBufferPage[id=%d,link=%d] (%d) -> [%s]\n", pair, rbp.getId(), rbp.getLink(), rbp.getCount(), rbp.getRecordBuffer().getHigh() ) ; recordPageMgr.release(rbp) ; } return x.iterator() ; }
private BPlusTree(BPlusTreeParams params, BlockMgr blkMgrNodes, BlockMgr blkMgrRecords) { // Consistency checks. this.bpTreeParams = params ; this.nodeManager = new BPTreeNodeMgr(this, blkMgrNodes) ; RecordBufferPageMgr recordPageMgr = new RecordBufferPageMgr(params.getRecordFactory(), blkMgrRecords) ; recordsMgr = new BPTreeRecordsMgr(this, recordPageMgr) ; }
private static BPTreeRecords make() { RecordBufferPage page = recordBufferPageMgr.create() ; return new BPTreeRecords(bPlusTree, page) ; }
/*public*/private static void bpt_scan_record_buffer(RecordBufferPageMgr recordPageMgr, boolean verbose) { System.out.print("[Scan Records] start\n") ; int idx = 0 ; int n = 0 ; int total = 0 ; if ( verbose ) System.out.printf("recordPageMgr = %s\n", recordPageMgr) ; // Blocks in scan order try { while ( idx >= 0 ) { if ( verbose ) System.out.printf("idx = %d\n", idx) ; RecordBufferPage page = recordPageMgr.getRead(idx) ; if ( verbose ) System.out.printf("%04d :: id=%04d -> link=%04d [count=%d, max=%d]\n", n, page.getId(), page.getLink(), page.getCount(), page.getMaxSize()) ; RecordBuffer rb = page.getRecordBuffer() ; if ( verbose ) System.out.printf(" :: %d %d\n", rb.getSize(), rb.maxSize() ) ; total += rb.size(); idx = page.getLink() ; n++ ; recordPageMgr.release(page) ; } } catch (Exception ex) { System.out.println("Exception: "+ex) ; } System.out.printf("[Scan Records] Count = %d in %d blocks (avg: %.2f)\n", total, n, ((float)total)/n) ; }