void writePage ( ByteBuffer page , long pageIndex ) throws IOException { synchronized ( lockObject ) { lastAccessTime = System . nanoTime ( ) ; if ( pageIndex >= firstCachedPage && pageIndex <= firstCachedPage + pageCache . size ( ) ) { if ( pageIndex < firstCachedPage + pageCache . size ( ) ) { pageCache . set ( ( int ) ( pageIndex - firstCachedPage ) , page ) ; } else { pageCache . add ( page ) ; } } else if ( pageCache . isEmpty ( ) ) { pageCache . add ( page ) ; firstCachedPage = pageIndex ; } lastWrittenPage = page ; lastWrittenPageIndex = pageIndex ; if ( pageCache . size ( ) * OWALPage . PAGE_SIZE >= bufferSize + OWALPage . PAGE_SIZE ) { flushAllBufferPagesExceptLastOne ( ) ; } } }
Writes page with given page index to the cache and eventually writes it to the file .