rm = new RecordManager(dbPath); if (rm.getManagedTrees().contains(DATA_TREE)) { database = rm.getManagedTree(DATA_TREE); } else { PersistedBTreeConfiguration<String, KrbIdentity> config = rm.manage(database);
/** * Load the full fie into a new RecordManager */ private boolean loadRm() { try { if ( rm != null ) { System.out.println( "Closing record manager" ); rm.close(); } rm = new RecordManager( dbFile.getAbsolutePath() ); System.out.println( "Loaded record manager" ); } catch ( Exception e ) { System.out.println( "Given database file seems to be corrupted. " + e.getMessage() ); return false; } return true; }
/** * Close the RecordManager and flush everything on disk */ public void close() throws IOException { beginTransaction(); // Close all the managed B-trees for ( BTree<Object, Object> tree : managedBtrees.values() ) { tree.close(); } // Close the management B-trees copiedPageBtree.close(); btreeOfBtrees.close(); managedBtrees.clear(); // Write the data fileChannel.force( true ); // And close the channel fileChannel.close(); commit(); }
PageIO[] pageIos = recordManager.readPageIOs( btreeHeader.getBTreeHeaderOffset(), -1L ); long newBtreeHeaderOffset = recordManager.writeBtreeHeader( this, newBtreeHeader ); recordManager.addInBtreeOfBtrees( getName(), revision, newBtreeHeaderOffset ); recordManager.addInCopiedPagesBtree( getName(), revision, result.getCopiedPages() ); storeRevision( newBtreeHeader, recordManager.isKeepRevisions() ); recordManager.addInCopiedPagesBtree( getName(), revision, result.getCopiedPages() ); recordManager.updateRecordManagerHeader( newBtreeHeaderOffset, -1L ); recordManager.freePages( this, revision, result.getCopiedPages() ); storeRevision( newBtreeHeader, recordManager.isKeepRevisions() ); recordManager.updateRecordManagerHeader( -1L, newBtreeHeaderOffset ); recordManager.freePages( this, revision, result.getCopiedPages() ); storeRevision( newBtreeHeader, recordManager.isKeepRevisions() );
Set<String> managed = rm.getManagedTrees(); PersistedBTree tree = ( PersistedBTree ) rm.getManagedTree( name ); PageIO[] pageIos = rm.readPageIOs( offset, -1L ); rm.free( pageIo ); rm.rollback(); LOG.warn( "Errors while reclaiming", e ); throw new RuntimeException( e );
beginTransaction(); rollback(); throw new BTreeAlreadyManagedException( name ); long btreeInfoOffset = writeBtreeInfo( btree ); BTreeHeader<K, V> btreeHeader = ( ( AbstractBTree<K, V> ) btree ).getBtreeHeader(); ( ( PersistedBTree<K, V> ) btree ).setBtreeInfoOffset( btreeInfoOffset ); PageIO[] rootPageIos = serializePage( btree, btreeHeader.getRevision(), rootPage ); flushPages( rootPageIos ); long btreeHeaderOffset = writeBtreeHeader( btree, btreeHeader ); commit(); rollback(); throw ioe;
rm.manage( btree ); PageHolder<K, V> pageHolder = rm.writePage( btree, leaf1, 1 ); System.arraycopy( values, 0, lastLeaf.values, 0, n ); PageHolder<K, V> pageHolder = rm.writePage( btree, lastLeaf, 1 ); rm.updateBtreeHeader( btree, ( ( AbstractPage<K, V> ) rootPage ).getOffset() ); rm.freePages( btree, btree.getRootPage().getRevision(), Arrays.asList( btree.getRootPage() ) );
this.recordMan = recordMan; bt = recordMan.getManagedTree( name ); recordMan.manage( bt );
/** * {@inheritDoc} */ @Override protected void doStop() throws KrbException { try { rm.close(); } catch (IOException e) { throw new KrbException("Failed to close the database", e); } } }
/** * Check a B-tree */ public void inspectBTree() { if ( rm == null ) { System.out.println( "Cannot check BTree(s)" ); return; } System.out.print( "BTree Name: " ); String name = readLine(); PersistedBTree<?, ?> pb = ( PersistedBTree<?, ?> ) rm.getManagedTree( name ); if ( pb == null ) { System.out.println( "No BTree exists with the name '" + name + "'" ); return; } System.out.println( "\nBTree offset: " + String.format( "0x%1$08x", pb.getBtreeOffset() ) ); System.out.println( "BTree _info_ offset: " + String.format( "0x%1$08x", pb.getBtreeInfoOffset() ) ); System.out.println( "BTree root page offset: " + String.format( "0x%1$08x", pb.getRootPageOffset() ) ); System.out.println( "Number of elements present: " + pb.getNbElems() ); System.out.println( "BTree Page size: " + pb.getPageSize() ); System.out.println( "BTree revision: " + pb.getRevision() ); System.out.println( "Key serializer: " + pb.getKeySerializerFQCN() ); System.out.println( "Value serializer: " + pb.getValueSerializerFQCN() ); System.out.println(); }
checkFreePages(); PageIO[] bobHeaderPageIos = readPageIOs( currentBtreeOfBtreesOffset, Long.MAX_VALUE ); loadBtree( bobHeaderPageIos, btreeOfBtrees ); PageIO[] copiedPagesPageIos = readPageIOs( currentCopiedPagesBtreeOffset, Long.MAX_VALUE ); loadBtree( copiedPagesPageIos, copiedPageBtree ); PageIO[] btreePageIos = readPageIOs( btreeOffset, Long.MAX_VALUE ); loadBtree( btreePageIos, btree );
/** * Creates a B-tree and automatically adds it to the list of managed btrees * * @param name the name of the B-tree * @param keySerializer key serializer * @param valueSerializer value serializer * @param allowDuplicates flag for allowing duplicate keys * @return a managed B-tree * @throws IOException If we weren't able to update the file on disk * @throws BTreeAlreadyManagedException If the B-tree is already managed */ @SuppressWarnings("all") public <K, V> BTree<K, V> addBTree( String name, ElementSerializer<K> keySerializer, ElementSerializer<V> valueSerializer, boolean allowDuplicates ) throws IOException, BTreeAlreadyManagedException { PersistedBTreeConfiguration config = new PersistedBTreeConfiguration(); config.setName( name ); config.setKeySerializer( keySerializer ); config.setValueSerializer( valueSerializer ); config.setAllowDuplicates( allowDuplicates ); BTree btree = new PersistedBTree( config ); manage( btree ); if ( LOG_CHECK.isDebugEnabled() ) { MavibotInspector.check( this ); } return btree; }
recordMan = new RecordManager( partitionDir.getPath() );
/** * Print the B-tree's name */ public void printBTreeNames() { if ( rm == null ) { System.out.println( "Couldn't find the number of managed btrees" ); return; } Set<String> trees = rm.getManagedTrees(); System.out.println( "\nManaged BTrees:" ); for ( String tree : trees ) { System.out.println( tree ); } System.out.println(); }
PageIO[] pageIos = recordManager.readPageIOs( btreeHeader.getBTreeHeaderOffset(), -1L ); long newBtreeHeaderOffset = recordManager.writeBtreeHeader( this, newBtreeHeader ); recordManager.addInBtreeOfBtrees( getName(), revision, newBtreeHeaderOffset ); recordManager.addInCopiedPagesBtree( getName(), revision, result.getCopiedPages() ); storeRevision( newBtreeHeader, recordManager.isKeepRevisions() ); recordManager.addInCopiedPagesBtree( getName(), revision, result.getCopiedPages() ); storeRevision( newBtreeHeader, recordManager.isKeepRevisions() ); recordManager.updateRecordManagerHeader( newBtreeHeaderOffset, -1L ); recordManager.freePages( this, revision, result.getCopiedPages() ); storeRevision( newBtreeHeader, recordManager.isKeepRevisions() ); recordManager.updateRecordManagerHeader( -1L, newBtreeHeaderOffset ); recordManager.freePages( this, revision, result.getCopiedPages() ); storeRevision( newBtreeHeader, recordManager.isKeepRevisions() );
rm.close(); br.close();
recordMan.close(); LOG.debug( "Closed record manager for {} partition.", suffixDn );