/** * {@inheritDoc} */ public void updateNewBTreeHeaders( BTreeHeader btreeHeader ) { newBTreeHeaders.put( btreeHeader.getBtree().getName(), btreeHeader ); }
/** * {@inheritDoc} */ public void updateNewBTreeHeaders( BTreeHeader btreeHeader ) { newBTreeHeaders.put( btreeHeader.getBtree().getName(), btreeHeader ); } }
/** * @see Object#toString() */ public String toString() { StringBuilder sb = new StringBuilder(); Page<K, V> page = getValue(); sb.append( btree.getName() ).append( "[" ).append( offset ).append( ", " ).append( lastOffset ) .append( "]:" ).append( page ); return sb.toString(); } }
/** * @see Object#toString() */ public String toString() { StringBuilder sb = new StringBuilder(); sb.append( "B-treeHeader " ); sb.append( ", offset[0x" ).append( Long.toHexString( btreeHeaderOffset ) ).append( "]" ); sb.append( ", name[" ).append( btree.getName() ).append( "]" ); sb.append( ", revision[" ).append( revision ).append( "]" ); sb.append( ", btreeInfoOffset[0x" ) .append( Long.toHexString( ( ( PersistedBTree<K, V> ) btree ).getBtreeInfoOffset() ) ).append( "]" ); sb.append( ", rootPageOffset[0x" ).append( Long.toHexString( rootPageOffset ) ).append( "]" ); sb.append( ", nbElems[" ).append( nbElems ).append( "]" ); sb.append( ", nbUsers[" ).append( nbUsers.get() ).append( "]" ); return sb.toString(); } }
/** * Add a newly closd transaction into the closed transaction queue */ /* no qualifier */<K, V> void releaseTransaction( ReadTransaction<K, V> readTransaction ) { RevisionName revisionName = new RevisionName( readTransaction.getRevision(), readTransaction.getBtreeHeader().getBtree().getName() ); //closedTransactionsQueue.add( revisionName ); }
RevisionName revisionName = new RevisionName( revision, btree.getName() );
/** * 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; }
/** * Store a reference to an old rootPage into the Revision B-tree * * @param btree The B-tree we want to keep an old RootPage for * @param rootPage The old rootPage * @throws IOException If we have an issue while writing on disk */ /* No qualifier */<K, V> void storeRootPage( BTree<K, V> btree, Page<K, V> rootPage ) throws IOException { if ( !isKeepRevisions() ) { return; } if ( btree == copiedPageBtree ) { return; } NameRevision nameRevision = new NameRevision( btree.getName(), rootPage.getRevision() ); ( ( AbstractBTree<NameRevision, Long> ) btreeOfBtrees ).insert( nameRevision, ( ( AbstractPage<K, V> ) rootPage ).getOffset(), 0 ); if ( LOG_CHECK.isDebugEnabled() ) { MavibotInspector.check( this ); } }
/** * Fetch the rootPage of a given B-tree for a given revision. * * @param btree The B-tree we are interested in * @param revision The revision we want to get back * @return The rootPage for this B-tree and this revision, if any * @throws KeyNotFoundException If we can't find the rootPage for this revision and this B-tree * @throws IOException If we had an ise while accessing the data on disk */ /* No qualifier */<K, V> Page<K, V> getRootPage( BTree<K, V> btree, long revision ) throws KeyNotFoundException, IOException { if ( btree.getRevision() == revision ) { // We are asking for the current revision return btree.getRootPage(); } // Get the B-tree header offset NameRevision nameRevision = new NameRevision( btree.getName(), revision ); long btreeHeaderOffset = btreeOfBtrees.get( nameRevision ); // get the B-tree rootPage Page<K, V> btreeRoot = readRootPage( btree, btreeHeaderOffset ); return btreeRoot; }
LOG.debug( "Managing the btree {}", btree.getName() ); BTreeFactory.setRecordManager( btree, this ); String name = btree.getName(); ( ( PersistedLeaf<K, V> ) rootPage ).setOffset( rootPageOffset ); LOG.debug( "Flushing the newly managed '{}' btree rootpage", btree.getName() ); flushPages( rootPageIos );
LOG.debug( "-----> Flushing the '{}' B-treeHeader", btree.getName() ); LOG.debug( " revision : " + btree.getRevision() + ", NbElems : " + btree.getNbElems() + ", btreeHeader offset : 0x" LOG.debug( "Rewriting the B-treeHeader on place for B-tree " + btree.getName() ); flushPages( pageIos ); LOG.debug( "Rewriting the B-treeHeader on place for B-tree " + btree.getName() ); flushPages( newPageIOs );
byte[] btreeNameBytes = Strings.getBytesUtf8( btree.getName() ); byte[] keySerializerBytes = Strings.getBytesUtf8( btree.getKeySerializerFQCN() ); byte[] valueSerializerBytes = Strings.getBytesUtf8( btree.getValueSerializerFQCN() ); LOG.debug( "Flushing the newly managed '{}' btree header", btree.getName() ); flushPages( btreeHeaderPageIos );
configuration.setName( btree.getName() ); configuration.setPageSize( btree.getPageSize() ); configuration.setKeySerializer( btree.getKeySerializer() );