/** * Update the array of seen pages. */ private static void updateCheckedPages( int[] checkedPages, int pageSize, PageIO... pageIos ) { for ( PageIO pageIO : pageIos ) { long offset = pageIO.getOffset(); setCheckedPage( rm, checkedPages, offset ); } }
/** * Dump the free pages */ private void dumpFreePages( long freePageOffset ) throws EndOfFileExceededException, IOException { System.out.println( "\n FreePages : " ); int pageNb = 1; while ( freePageOffset != NO_PAGE ) { PageIO pageIo = fetchPage( freePageOffset ); System.out.println( " freePage[" + pageNb + "] : 0x" + Long.toHexString( pageIo.getOffset() ) ); freePageOffset = pageIo.getNextPage(); pageNb++; } }
/** * Add a PageIO to the list of free PageIOs * * @param pageIo The page to free * @throws IOException If we weren't capable of updating the file */ /* no qualifier */ void free( PageIO pageIo ) throws IOException { freePageLock.lock(); // We add the Page's PageIOs before the // existing free pages. // Link it to the first free page pageIo.setNextPage( firstFreePage ); LOG.debug( "Flushing the first free page" ); // And flush it to disk //FIXME can be flushed last after releasing the lock flushPages( pageIo ); // We can update the firstFreePage offset firstFreePage = pageIo.getOffset(); freePageLock.unlock(); }
System.out.println( "PageIO[" + Long.toHexString( pageIo.getOffset() ) + "], size = " + size + ", NEXT PageIO:" + Long.toHexString( nextOffset ) ); System.out.println( " 0 1 2 3 4 5 6 7 8 9 A B C D E F " );
sb.append( pageIo.getOffset() ); current = pageIo.getNextPage();
sb.append( Long.toHexString( pageIo.getOffset() ) ).append( "/" ); sb.append( pageIo.getSize() ); pageNb++;
/** * Write the page in a serialized form. * * @param btree The persistedBtree we will create a new PageHolder for * @param newPage The page to write on disk * @param newRevision The page's revision * @return A PageHolder containing the copied page * @throws IOException If the page can't be written on disk */ /* No qualifier*/<K, V> PageHolder<K, V> writePage( BTree<K, V> btree, Page<K, V> newPage, long newRevision ) throws IOException { // We first need to save the new page on disk PageIO[] pageIos = serializePage( btree, newRevision, newPage ); if ( LOG_PAGES.isDebugEnabled() ) { LOG_PAGES.debug( "Write data for '{}' btree", btree.getName() ); logPageIos( pageIos ); } // Write the page on disk flushPages( pageIos ); // Build the resulting reference long offset = pageIos[0].getOffset(); long lastOffset = pageIos[pageIos.length - 1].getOffset(); PersistedPageHolder<K, V> pageHolder = new PersistedPageHolder<K, V>( btree, newPage, offset, lastOffset ); return pageHolder; }
long btreeHeaderOffset = btreeHeaderPageIos[0].getOffset();
sb.append( "0x" ).append( Long.toHexString( pageIo.getOffset() ) );
/** * Get as many pages as needed to store the data of the given size. The returned * PageIOs are all linked together. * * @param dataSize The data size * @return An array of pages, enough to store the full data */ private PageIO[] getFreePageIOs( int dataSize ) throws IOException { if ( dataSize == 0 ) { return new PageIO[] {}; } int nbNeededPages = computeNbPages( dataSize ); PageIO[] pageIOs = new PageIO[nbNeededPages]; // The first page : set the size pageIOs[0] = fetchNewPage(); pageIOs[0].setSize( dataSize ); for ( int i = 1; i < nbNeededPages; i++ ) { pageIOs[i] = fetchNewPage(); // Create the link pageIOs[i - 1].setNextPage( pageIOs[i].getOffset() ); } return pageIOs; }
long rootPageOffset = rootPageIos[0].getOffset();
long rootPageOffset = rootPageIos[0].getOffset();
long btreeInfoOffset = btreeHeaderPageIos[0].getOffset();