1. 09 Jan, 2008 1 commit
    • marko's avatar
      branches/zip: Clean up index->to_be_dropped after a failed DROP INDEX. · 4c8c6f37
      marko authored
      ha_innobase::final_drop_index(): If row_merge_drop_table() fails, clear
      the to_be_dropped flags.  This was the error fixed in this commit; the rest
      is just additional safety.
      
      ha_innobase::final_drop_index(): After dropping the flagged indexes,
      assert that none of the remaining indexes are flagged to_be_dropped.
      
      ha_innobase::prepare_drop_index(): Assert that no index has been flagged
      for deletion.  When checking foreign key constraints, simply traverse the
      list of indexes and check if any of the indexes that were just flagged
      to_be_dropped.  On error, clear the to_be_dropped flags with simple list
      traversal.
      4c8c6f37
  2. 07 Jan, 2008 2 commits
  3. 04 Jan, 2008 4 commits
  4. 03 Jan, 2008 2 commits
  5. 20 Dec, 2007 7 commits
    • marko's avatar
      branches/zip: Allow a build with UNIV_PAGE_SIZE set to 4096. · dfe13a1c
      marko authored
      TRX_RSEG_N_SLOTS: Make the definition dependent of UNIV_PAGE_SIZE.
      
      FSP_EXTENT_SIZE: Define as 1 megabyte, as assumed by the code elsewhere.
      
      fseg_create_general(): Add a debug assertion against page overflow.
      dfe13a1c
    • marko's avatar
      branches/zip: Fix some things to allow InnoDB to be built with smaller · f19db3bb
      marko authored
      UNIV_PAGE_SIZE than the default 16384.
      
      MEM_BLOCK_STANDARD_SIZE: Cap to MEM_MAX_ALLOC_IN_BUF when UNIV_PAGE_SIZE
      is less than 16384.
      
      ha_create_func(): Invoke mem_heap_create_in_btr_search() with
      ut_min(4096, MEM_MAX_ALLOC_IN_BUF) instead of 4096.  The memory
      will be allocated from the buffer pool, and with UNIV_PAGE_SIZE
      defined to 4096, there would not be any space for the mem_heap
      data structure overhead.
      f19db3bb
    • vasil's avatar
      branches/zip: · 85b6ef6d
      vasil authored
      Change the format of TRX_IDs in INFORMATION_SCHEMA tables from DEC to
      HEX.
      
      The current TRX_IDs are hard to remember and track down: 426355, 428466,
      428566, etc.
      
      In HEX:
      * there are less "digits", the strings are shorter;
      * since there are 16 instead of 10 "digits", the chance of having
        repeating ones are smaller.
      
      The above look like 68173, 689B2, 68A16 in HEX.
      
      Discussed with:	Ken
      Approved by:	Heikki (via IM)
      85b6ef6d
    • vasil's avatar
      branches/zip: · 1ae59d9e
      vasil authored
      Change the output format of transaction ids from 2 32bit numbers separated
      by space to a single hex number.
      
      Suggested by:	Heikki
      Approved by:	Heikki
      1ae59d9e
    • marko's avatar
      branches/zip: trx0sys.h: Add a compile-time check that UNIV_PAGE_SIZE · 15cc2608
      marko authored
      is at least 4 kilobytes.
      15cc2608
    • marko's avatar
      branches/zip: Allow the uncompressed page size to be settable by setting · 5c7fb887
      marko authored
      just one parameter: UNIV_PAGE_SIZE_SHIFT.
      
      UNIV_PAGE_SIZE, BUF_BUDDY_SIZES: Define in terms of UNIV_PAGE_SIZE_SHIFT.
      
      BUF_BUDDY_LOW_SHIFT: New macro, to simplify the definition of BUF_BUDDY_LOW
      and BUF_BUDDY_SIZES.
      
      PAGE_ZIP_DIR_SLOT_MASK: Relax the compile-time check.  This bitmask must be
      one less than a power of two, and at least UNIV_PAGE_SIZE - 1.
      5c7fb887
    • marko's avatar
      branches/zip: Add some clarifying comments. · 8c852371
      marko authored
      btr_copy_blob_prefix(), btr_copy_externally_stored_field_prefix_low():
      Document the return value as "number of bytes written", not "bytes written".
      
      trx_undo_page_fetch_ext(): Explain the assertion ut_a(ext_len).
      
      row_build_index_entry(): Explain the assertion ut_a(!ext).
      8c852371
  6. 19 Dec, 2007 4 commits
    • marko's avatar
      branches/zip: Minor cleanup. · 2c4aaa9e
      marko authored
      row_create_index_graph_for_mysql(): Move from row0mysql.c to row0merge.c
      and rename to row_merge_create_index_graph().  Also change the function
      comment to say that the function will create and execute the query graph
      for creating the index.
      
      row_merge_create_index(): Remove redundant assignment to trx->error_state.
      2c4aaa9e
    • marko's avatar
      branches/zip: Fast index creation: Lock the data dictionary only after · acf84dfb
      marko authored
      acquiring the table lock.  The data dictionary should not be locked for
      long periods.  Before this change, in the worst case, the dictionary
      would be locked until the expiration of innodb_lock_wait_timeout.
      
      Virtually, transaction-level locks (locks on database objects, such
      as records and tables) have a latching order level of SYNC_USER_TRX_LOCK,
      which is above any InnoDB rw-locks or mutexes.  However, the latching
      order of SYNC_USER_TRX_LOCK is never checked, not even by UNIV_SYNC_DEBUG.
      
      ha_innobase::add_index(), ha_innobase::final_drop_index(): Invoke
      row_mysql_lock_data_dictionary(trx) only after row_merge_lock_table().
      acf84dfb
    • marko's avatar
      branches/zip: Implement a limit for the size of undo log records. · adbb92be
      marko authored
      innodb-index.test: Add a test with a large number of externally stored
      columns.  Check that there may not be prefix indexes on too many columns.
      
      dict_index_too_big_for_undo(): New function: Check if the undo log may
      overflow.
      
      dict_index_add_to_cache(): Return DB_SUCCESS or DB_TOO_BIG_RECORD.
      Postpone the creation and linking of some data structures, so that
      when dict_index_too_big_for_undo() holds, it will be easier to clean up.
      Check the return status in all callers.
      adbb92be
    • marko's avatar
      branches/zip: dict0dict.c: Minor cleanup. · b99fbdf2
      marko authored
      dict_index_copy(): Remove the prototype, because this static function
      will be defined before its first use.  Add const qualifier to "table".
      
      dict_index_build_internal_clust(), dict_index_build_internal_non_clust():
      Add const qualifier to "table".  Correct the comment about setting indexed[].
      b99fbdf2
  7. 18 Dec, 2007 1 commit
    • vasil's avatar
      branches/zip: · 97025c3a
      vasil authored
      Non-functional change:
      Do not include the terminating '\0' in TRX_I_S_LOCK_ID_MAX_LEN.
      97025c3a
  8. 17 Dec, 2007 7 commits
    • marko's avatar
      branches/zip: Fast index creation: Clarify why lock waits may occur in · 807c2807
      marko authored
      row_merge_lock_table().
      
      ha_innobase::final_drop_index(): Set the dictionary operation mode to
      TRX_DICT_OP_INDEX_MAY_WAIT for the duration of the row_merge_lock_table()
      call.
      807c2807
    • marko's avatar
    • marko's avatar
      branches/zip: Fast index creation: Remove the ROW_PREBUILT_OBSOLETE nonsense. · 71a4f691
      marko authored
      Active transactions must not switch table or index definitions on the fly,
      for several reasons, including the following:
      
       * copied indexes do not carry any history or locking information;
         that is, rollbacks, read views, and record locking would be broken
      
       * huge potential for race conditions, inconsistent reads and writes,
         loss of data, and corruption
      
      Instead of trying to track down if the table was changed during a transaction,
      acquire appropriate locks that protect the creation and dropping of indexes.
      
      innodb-index.test: Test the locking of CREATE INDEX and DROP INDEX.  Test
      that consistent reads work across dropped indexes.
      
      lock_rec_insert_check_and_lock(): Relax the lock_table_has() assertion.
      When inserting a record into an index, the table must be at least IX-locked.
      However, when an index is being created, an IS-lock on the table is
      sufficient.
      
      row_merge_lock_table(): Add the parameter enum lock_mode mode, which must
      be LOCK_X or LOCK_S.
      
      row_merge_drop_table(): Assert that n_mysql_handles_opened == 0.
      Unconditionally drop the table.
      
      ha_innobase::add_index(): Acquire an X or S lock on the table, as appropriate.
      After acquiring an X lock, assert that n_mysql_handles_opened == 1.
      Remove the comments about dropping tables in the background.
      
      ha_innobase::final_drop_index(): Acquire an X lock on the table.
      
      dict_table_t: Remove version_number, to_be_dropped, and prebuilts.
      ins_node_t: Remove table_version_number.
      
      enum lock_mode: Move the definition from lock0lock.h to lock0types.h.
      
      ROW_PREBUILT_OBSOLETE, row_update_prebuilt(), row_prebuilt_table_obsolete():
      Remove.
      
      row_prebuilt_t: Remove the declaration from row0types.h.
      
      row_drop_table_for_mysql_no_commit(): Always print a warning if a table
      was added to the background drop queue.
      71a4f691
    • marko's avatar
      branches/zip: lock_rec_insert_check_and_lock(): Use the cached value · 8d54e9e6
      marko authored
      of thr_get_trx(thr).
      8d54e9e6
    • marko's avatar
      branches/zip: innobase_mysql_end_print_arbitrary_thd(): Note that · 252b24e8
      marko authored
      kernel_mutex must be released before calling this function.
      
      innobase_mysql_end_print_arbitrary_thd(),
      innobase_mysql_prepare_print_arbitrary_thd(): Assert that the
      kernel_mutex is not being held by the current thread.
      252b24e8
    • vasil's avatar
      branches/zip: · a6e940f5
      vasil authored
       
      Bugfix: Lock the MySQL mutex LOCK_thread_count before accessing
      trx->mysql_query_str to avoid race conditions where MySQL sets it to
      NULL after we have checked that it is not NULL and before we access it.
       
      Approved by:	Marko
      a6e940f5
    • vasil's avatar
      branches/zip: · 6367b36c
      vasil authored
      Non-functional change: add "out:" comment for the return value.
      6367b36c
  9. 16 Dec, 2007 1 commit
    • vasil's avatar
      branches/zip: · dbc6cbe3
      vasil authored
       
      Non-functional change:
       
      Move the prototypes of
      innobase_mysql_prepare_print_arbitrary_thd() and
      innobase_mysql_end_print_arbitrary_thd() from lock0lock.c to
      ha_prototypes.h
      
      Suggested by:	Marko
      Approved by:	Marko
      dbc6cbe3
  10. 13 Dec, 2007 5 commits
    • marko's avatar
      branches/zip: page_zip_decompress(): Implement a proper check if there · 9e26020c
      marko authored
      is an overlap between BLOB pointers and the modification log or the
      zlib stream.
      
      page_zip_decompress_clust_ext(): Remove the improper check.  The
      d_stream->avail_in cannot be decremented here, because we do not know
      at this point if the record is deleted.  No space is reserved for the
      BLOB pointers in deleted records.
      
      page_zip_decompress_clust(): Check for the overlap here, right before
      copying the BLOB pointers.
      
      page_zip_decompress_clust(): Also check that the target column is long
      enough, and return FALSE instead of ut_ad() failure.
      9e26020c
    • vasil's avatar
      branches/zip: · 85f1c90d
      vasil authored
      Add some clarification to a comment.
      85f1c90d
    • marko's avatar
      branches/zip: page_zip_decompress_node_ptrs(): Remove the local variable · c2505f9b
      marko authored
      is_clust, to avoid a warning about unused variable when the definition
      of page_zip_fail() is empty.
      c2505f9b
    • marko's avatar
      branches/zip: page0zip.c: Add more page_zip_fail() diagnostics to · 3802ff3f
      marko authored
      some decompression functions.
      
      page_zip_apply_log_ext(), page_zip_apply_log(): Call page_zip_fail()
      with appropriate diagnostics before returning NULL.
      
      page_zip_decompress_node_ptrs(), page_zip_decompress_sec(),
      page_zip_decompress_clust(): When detecting that the zlib stream
      followed by the modification log overlaps the trailer, do not
      let an assertion fail, but invoke page_zip_fail() and return FALSE.
      Corrupt data should never lead into assertion failures in decompression
      functions.
      3802ff3f
    • marko's avatar
      branches/zip: page0zip.c: Define and use the auxiliary macros · 48eb4c4b
      marko authored
      ASSERT_ZERO() and ASSERT_ZERO_BLOB() for asserting that certain
      blocks of memory are filled with zero.
      48eb4c4b
  11. 12 Dec, 2007 2 commits
  12. 10 Dec, 2007 3 commits
  13. 07 Dec, 2007 1 commit
    • marko's avatar
      branches/zip: rec_convert_dtuple_to_rec_comp(): Allow externally stored · 15ef4c8f
      marko authored
      columns to be up to REC_MAX_INDEX_COL_LEN + BTR_EXTERN_FIELD_REF_SIZE
      bytes in a debug assertion.  This assertion could fail since r2159 in
      trx_undo_prev_version_build(), because the undo log records for updates
      and deletes would contain longer prefixes of externally stored columns.
      
      The assertion failure was reported by Sunny.
      15ef4c8f