in mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java [2012:2122]
public void updateRecordManagerHeader()
{
// The page size
int position = writeData( RECORD_MANAGER_HEADER_BYTES, 0, pageSize );
// The number of managed B-tree
position = writeData( RECORD_MANAGER_HEADER_BYTES, position, nbBtree );
// The first free page
position = writeData( RECORD_MANAGER_HEADER_BYTES, position, firstFreePage );
// The offset of the current B-tree of B-trees
position = writeData( RECORD_MANAGER_HEADER_BYTES, position, currentBtreeOfBtreesOffset );
// The offset of the copied pages B-tree
position = writeData( RECORD_MANAGER_HEADER_BYTES, position, previousBtreeOfBtreesOffset );
// The offset of the current B-tree of B-trees
position = writeData( RECORD_MANAGER_HEADER_BYTES, position, currentCopiedPagesBtreeOffset );
// The offset of the copied pages B-tree
position = writeData( RECORD_MANAGER_HEADER_BYTES, position, previousCopiedPagesBtreeOffset );
// Write the RecordManager header on disk
RECORD_MANAGER_HEADER_BUFFER.put( RECORD_MANAGER_HEADER_BYTES );
RECORD_MANAGER_HEADER_BUFFER.flip();
LOG.debug( "Update RM header" );
if ( LOG_PAGES.isDebugEnabled() )
{
StringBuilder sb = new StringBuilder();
sb.append( "First free page : 0x" ).append( Long.toHexString( firstFreePage ) ).append( "\n" );
sb.append( "Current BOB header : 0x" ).append( Long.toHexString( currentBtreeOfBtreesOffset ) )
.append( "\n" );
sb.append( "Previous BOB header : 0x" ).append( Long.toHexString( previousBtreeOfBtreesOffset ) )
.append( "\n" );
sb.append( "Current CPB header : 0x" ).append( Long.toHexString( currentCopiedPagesBtreeOffset ) )
.append( "\n" );
sb.append( "Previous CPB header : 0x" ).append( Long.toHexString( previousCopiedPagesBtreeOffset ) )
.append( "\n" );
if ( firstFreePage != NO_PAGE )
{
long freePage = firstFreePage;
sb.append( "free pages list : " );
boolean isFirst = true;
while ( freePage != NO_PAGE )
{
if ( isFirst )
{
isFirst = false;
}
else
{
sb.append( " -> " );
}
sb.append( "0x" ).append( Long.toHexString( freePage ) );
try
{
PageIO[] freePageIO = readPageIOs( freePage, 8 );
freePage = freePageIO[0].getNextPage();
}
catch ( EndOfFileExceededException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch ( IOException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
LOG_PAGES.debug( "Update RM Header : \n{}", sb.toString() );
}
try
{
Integer nbTxnStarted = CONTEXT.get();
if ( ( nbTxnStarted == null ) || ( nbTxnStarted <= 1 ) )
{
//System.out.println( "Writing page at 0000" );
writeCounter.put( 0L, writeCounter.containsKey( 0L ) ? writeCounter.get( 0L ) + 1 : 1 );
fileChannel.write( RECORD_MANAGER_HEADER_BUFFER, 0 );
}
}
catch ( IOException ioe )
{
throw new FileException( ioe.getMessage() );
}
RECORD_MANAGER_HEADER_BUFFER.clear();
// Reset the old versions
previousBtreeOfBtreesOffset = -1L;
previousCopiedPagesBtreeOffset = -1L;
nbUpdateRMHeader.incrementAndGet();
}