1. 05 Jan, 2007 7 commits
  2. 04 Jan, 2007 2 commits
    • marko's avatar
      branches/zip: Allow dirty blocks to be relocated. Allow a transition · 14b99876
      marko authored
      to BUF_BLOCK_ZIP_DIRTY (discarding the uncompressed page corresponding
      to a modified compressed page that has not been flushed to disk).
      
      buf_page_can_relocate(): New function, modelled after
      buf_flush_ready_for_replace().
      
      buf_LRU_free_block(): Allow the transition to BUF_BLOCK_ZIP_DIRTY.
      
      buf_flush_insert_into_flush_list(): Make the prototype public.
      
      buf_buddy_relocate(): Remove an unnecessary switch statement.
      Use buf_page_can_relocate() instead of buf_flush_ready_for_replace().
      
      buf_page_peek(): Made UNIV_INLINE.
      
      Document UNIV_ZIP_DEBUG.
      14b99876
    • marko's avatar
      branches/zip: Fix two bugs in the relocation of block descriptors. · 4861c59c
      marko authored
      Improve diagnostics.
      
      buf_buddy_relocate(): Do not assume all small blocks to contain only one
      buf_page_t object.  Require an exact size match, as in the case of
      compressed pages.
      
      buf_relocate(): Relocate buf_pool->LRU_old if needed.
      Validate the LRU list in debug builds.
      
      buf_LRU_block_remove_hashed_page(): Do not overwrite FIL_PAGE_OFFSET
      or FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID.  The memory will be invalidated
      in debug builds of buf_buddy_free().
      
      buf0buddy.c: Add assertions for not holding buf_pool->zip_mutex.
      The calling thread should not be holding any block->mutex, but it might
      be too time-consuming to assert against that, even #ifdef UNIV_SYNC_DEBUG.
      4861c59c
  3. 03 Jan, 2007 5 commits
    • marko's avatar
      buf_flush_validate_low(): Minor cleanup. · 903ecf37
      marko authored
      903ecf37
    • marko's avatar
      branches/zip: Before calling buf_buddy_alloc() or buf_buddy_free(), · 4b903959
      marko authored
      release any block mutexes but hold the buf_pool->mutex.
      4b903959
    • marko's avatar
      branches/zip: Use the buddy allocator for managing compressed pages. · 39e30c0b
      marko authored
      There is something wrong with the management of compressed-only blocks
      (BUF_BLOCK_ZIP_PAGE).  To disable the creation of such blocks, set zip=TRUE
      in buf_LRU_block_remove_hashed_page().
      
      buf_LRU_block_remove_hashed_page(): Release buf_pool->zip_mutex when
      freeing a compressed-only page and its control block, with buf_buddy_free().
      Adapt callers.
      
      buf_LRU_block_free_hashed_page(): Change the parameter type from buf_page_t*
      to buf_block_t*.
      
      buf_LRU_free_block(): Move below the definition of buf_LRU_add_block_low().
      Allocate block descriptor for compressed-only blocks.
      
      buf_LRU_block_free_non_file_page(): Replace ut_free() with buf_buddy_free().
      
      buf_zip_decompress(): New function, split from buf_page_io_complete().
      
      buf_page_init_for_read(): Do not allocate the compressed page until it is
      really needed, to avoid the overhead of the buddy allocator.  Decompress
      compressed-only blocks that are needed again.
      
      buf_page_create(): Do not allocate the compressed page until it is
      really needed, to avoid the overhead of the buddy allocator.
      
      buf_validate(): Replace some equality tests on the lengths of the LRU
      list and the flush lists with greater-or-equal tests, since the counted
      numbers do not include control blocks for compressed-only pages.
      39e30c0b
    • marko's avatar
      branches/zip: Add __attribute__((const)) or __attribute__((pure)) · 90b7b8ab
      marko authored
      to all fold functions.
      90b7b8ab
    • marko's avatar
      branches/zip: trx_prepare_off_kernel(): Eliminate the local variable · 2e8631ff
      marko authored
      must_flush_log, and remove warning about lsn being possibly uninitialized.
      2e8631ff
  4. 02 Jan, 2007 2 commits
  5. 29 Dec, 2006 2 commits
    • marko's avatar
      branches/zip: Minor cleanup. · 0792d705
      marko authored
      buf_buddy_get(): New function in buf0buddy.c, to replace the macro
      in buf0buddy.h.
      
      buf_buddy_get_offset(): Remove.
      
      buf_buddy_get_slot(): Remove the prototype from buf0buddy.h.  This function
      is for internal use in buf0buddy.ic.
      0792d705
    • marko's avatar
      branches/zip: Minor cleanup. · 7c94b19f
      marko authored
      buf_page_get_gen(): Cache the result of fil_space_get_zip_size().
      
      trx_commit_off_kernel(): Eliminate the flag must_flush_log.  Initialize lsn = 0
      to signify must_flush_log == FALSE.
      
      log_flush_margin(): Eliminate the flag do_flush.  Initialize lsn = 0
      to signify do_flush == FALSE.
      7c94b19f
  6. 21 Dec, 2006 1 commit
    • marko's avatar
      branches/zip: Fix two bugs in the buddy allocator. · a9f0595a
      marko authored
      buf_buddy_block_free(): Remove the block from buf_pool->zip_hash.
      
      buf_buddy_alloc_clean(): Test for buf_page_in_file() before
      invoking buf_LRU_free_block().  The LRU list also contains "half-freed"
      blocks (state == BUF_BLOCK_REMOVE_HASH).
      a9f0595a
  7. 20 Dec, 2006 4 commits
    • marko's avatar
      branches/zip: Allow the buddy allocator to work for 16-kilobyte pages, · 13049a9e
      marko authored
      twice the maximum block size of the buddy system.
      
      buf_page_t: Note that state may change from BUF_BLOCK_READY_FOR_USE
      to BUF_BLOCK_MEMORY without buf_page_get_mutex() protection
      [only buf_pool->mutex].
      
      buf_buddy_get_slot(): Extend the output to BUF_BUDDY_SIZES.
      
      buf_buddy_alloc(), buf_buddy_free(): Allow sizes up to UNIV_PAGE_SIZE.
      
      buf_buddy_alloc_low(), buf_buddy_free_low(), buf_buddy_alloc_clean():
      Allow i==BUF_BUDDY_SIZES.
      13049a9e
    • marko's avatar
      branches/zip: buf_page_get_gen(): Restore the "break" statement to a · c20a0d95
      marko authored
      "for (;;)" loop that was accidentally removed in r1090.
      c20a0d95
    • marko's avatar
      branches/zip: buf_buddy_free_low(): When trying to relocate to a block on · a03c082c
      marko authored
      the free list, remove the free block from the free list, so that the list
      item pointers will not be overwritten.
      a03c082c
    • marko's avatar
      branches/zip: Fix bugs in the buddy allocator and add assertions. · 2c668570
      marko authored
      buf_buddy_free(), buf_buddy_free_low(): Document that the data must
      not be pointed to by the buffer pool.  Add ut_ad(!buf_pool_contains_zip())
      assertions to catch pointers to freed blocks.
      
      Validate the zip_free[] lists #ifdef UNIV_DEBUG.
      
      buf_buddy_relocate(): Ensure that the size of the compressed page
      matches.  The buddy block can be split, and the control block can be
      pointing to a smaller compressed page than the one whose relocation
      is being attempted.
      2c668570
  8. 19 Dec, 2006 2 commits
  9. 18 Dec, 2006 3 commits
  10. 15 Dec, 2006 2 commits
    • marko's avatar
      branches/zip: Minor improvements. · a687ccdf
      marko authored
      buf_LRU_block_remove_hashed_page(): Return the new state of the block.
      
      Only call buf_LRU_block_free_hashed_page()
      if buf_LRU_block_remove_hashed_page() did not return BUF_BLOCK_ZIP_FREE,
      that is, the control block was not freed.
      
      buf_LRU_insert_zip_clean(): New function, for inserting a compressed-only
      block into buf_pool->zip_clean in the LRU order.
      
      buf_LRU_block_remove_hashed_page(), buf_LRU_free_block():
      Add the flag "zip" for controlling if the compressed page of an uncompressed
      page should be removed.  For now, assume zip==TRUE.
      
      buf_LRU_get_free_block(): Replace the test for UT_LIST_GET_LEN(buf_pool->free)
      with a test for the return value of buf_LRU_get_free_only().  Do not
      free zip.data, as it must already have been freed.
      
      buf_flush_insert_into_flush_list(), buf_flush_insert_sorted_into_flush_list():
      Remove compressed-only blocks from the buf_pool->zip_clean list.
      
      buf_flush_remove(): Restore compressed-only blocks to
      the buf_pool->zip_clean list.
      
      buf_page_init_for_read(): Uncompress compressed-only blocks when possible.
      Currently, there cannot be any compressed-only blocks in the buffer pool;
      they would be inserted by buf_LRU_free_block(bpage, zip=FALSE).
      a687ccdf
    • marko's avatar
      branches/zip: Minor improvements. · b6711d69
      marko authored
      buf_flush_remove(): New function, for removing a block from the flush list.
      Sliced from buf_flush_write_complete().
      
      buf_page_set_state(): Allow transitions between BUF_BLOCK_ZIP_PAGE
      and BUF_BLOCK_ZIP_DIRTY.
      b6711d69
  11. 14 Dec, 2006 1 commit
  12. 13 Dec, 2006 1 commit
    • marko's avatar
      branches/zip: Make use of the previously unused state BUF_BLOCK_MEMORY. · 2208d259
      marko authored
      buf_LRU_get_free_block(): Document that the block is in the state
      BUF_BLOCK_READY_FOR_USE.
      
      buf_block_alloc(): Change the state of the block to BUF_BLOCK_MEMORY
      and document it.
      
      Replace those invocations of buf_block_alloc() with
      buf_LRU_get_free_block() where the allocated block is used for buffer
      pool input and output.  However, temporary copies of B-tree pages
      during reorganization are not used for file I/O, and such blocks are
      still allocated with buf_block_alloc().
      2208d259
  13. 12 Dec, 2006 3 commits
  14. 11 Dec, 2006 5 commits
    • marko's avatar
      branches/zip: Make the code compile with all debugging enabled · a1b50405
      marko authored
      buf_buddy_relocate(): Replace ut_align_down() with ut_align_offset()
      in assertions.
      
      buf0buddy.h: Include buf0buf.h and sync0sync.h.
      a1b50405
    • marko's avatar
      branches/zip: Implement the whole allocation algorithm of compressed pages. · 8e3e3d16
      marko authored
      buf_LRU_free_block(): Free compressed-only pages and their
      descriptors with buf_buddy_free().
      
      buf_LRU_get_free_only(): New function for returning a block from
      buf_pool->free if one is available.  Split from buf_LRU_get_free_block().
      
      buf_buddy_alloc_zip(): Rename from buf_buddy_alloc_low() and make static.
      Remove parameter "split".  Always try to split.
      
      buf_buddy_free_block(): Rename to buf_buddy_block_free().
      
      buf_buddy_block_register(): New function for registering buf_block_t
      objects reserved by the allocator.
      
      buf_buddy_alloc_from(): New function for allocating an object from a
      bigger object, and putting the unused parts on the free list.
      
      buf_buddy_alloc_clean_zip(): New function for allocating memory by
      replacing an unmodified compressed page.
      
      buf_buddy_alloc_low(): New function for allocating memory, either from
      the free lists of compressed pages, from the global free list, or from
      unmodified pages in the buffer pool.
      8e3e3d16
    • marko's avatar
      branches/zip: buf_buddy_relocate(): Split some lines differently on · edaacca0
      marko authored
      popular demand.
      edaacca0
    • marko's avatar
      branches/zip: Add buf_pool->zip_hash for keeping track on pages allocated · 76c69c36
      marko authored
      to the buddy system for allocating compressed pages and their descriptors.
      
      buf_buddy_free_block(): New function: Deallocate the buffer frame.
      
      buf_buddy_free(), buf_buddy_free_low(): Return void instead of a pointer
      to a freed buffer frame.
      76c69c36
    • marko's avatar
      branches/zip: buf_buddy_relocate(): Relocate buf_page_t objects that represent · 2d7dc7e6
      marko authored
      clean compressed pages (BUF_BLOCK_ZIP_PAGE).
      2d7dc7e6