1. 09 Apr, 2008 1 commit
    • inaam's avatar
      branches/zip: · 448ea971
      inaam authored
      Introduced a new session level config param innodb_strict_mode.
      If it is set we do extra checking at time of table creation
      and fail if any invalid combination of KEY_BLOCK_SIZE
      or ROW_FORMAT is specified.
      
      Reviewed by: Sunny
      448ea971
  2. 07 Apr, 2008 2 commits
  3. 04 Apr, 2008 5 commits
  4. 28 Mar, 2008 6 commits
    • marko's avatar
      branches/zip: i_s_cmpmem_fill_low(): Do not reset all buddy allocator · 3b102cf2
      marko authored
      statistics, but only the cumulated count and duration of relocation
      operations.
      3b102cf2
    • marko's avatar
      branches/zip: Minor change to the formatting of integer fields · d7585cea
      marko authored
      in INFORMATION_SCHEMA.INNODB_CMP*.
      
      i_s_cmp_fields_info, i_s_cmpmem_fields_info: Define the field lengths
      as MY_INT32_NUM_DECIMAL_DIGITS or MY_INT64_NUM_DECIMAL_DIGITS.
      
      i_s_cmpmem_fields_info: Define "relocation_ops" as MYSQL_TYPE_LONGLONG.
      d7585cea
    • marko's avatar
      branches/zip: Rename the compression-related INFORMATION_SCHEMA tables · 6d0b76d8
      marko authored
      and columns as suggested by Ken.
      
      INNODB_COMPRESSION, INNODB_COMPRESSION_RESET:
      Rename to INNODB_CMP, INNODB_CMP_RESET, with the following columns:
      page_size
      compress_ops
      compress_ops_ok
      compress_time
      uncompress_ops
      uncompress_time
      
      INNODB_COMPRESSION_BUDDY, INNODB_COMPRESSION_BUDDY_RESET:
      Rename to INNODB_CMPMEM, INNODB_CMPMEM_RESET, with the following columns:
      page_size
      pages_used
      pages_free
      relocation_ops
      relocation_time
      6d0b76d8
    • marko's avatar
      branches/zip: Implement the INFORMATION_SCHEMA tables · caa6afcf
      marko authored
      INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
      
      buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
      Statistics of the buddy system grouped by block size.
      
      i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
      New INFORMATION_SCHEMA plugins.
      
      i_s_compression_buddy_fields_info[]: Define the fields:
      size, used, free, relocated, relocated_sec.
      
      i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
      i_s_compression_buddy_reset_fill(): Fill the fields.
      
      i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
      Initialize the tables.
      caa6afcf
    • marko's avatar
      branches/zip: Correct minor mistakes made in r2390. · 9cf9b9c3
      marko authored
      i_s_compression_fill_low(): Do not acquire or release the buffer pool
      mutex.  The page_zip_stat[] is not protected by any mutex.
      
      i_s_innodb_compression, i_s_innodb_compression_reset: Change the
      description to say "compression" instead of "compressed buffer pool".
      9cf9b9c3
    • marko's avatar
      branches/zip: Rename the INFORMATION_SCHEMA tables · bd8d5d3e
      marko authored
      INNODB_ZIP and INNODB_ZIP_RESET to
      INNODB_COMPRESSION and INNODB_COMPRESSION_RESET,
      and remove the statistics of the buddy system.
      
      This change was discussed with Ken.  It makes the tables shorter
      and easier to understand.  The removed data will be represented in
      the tables INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET
      that will be added later.
      
      i_s_innodb_zip, i_s_innodb_zip_reset, i_s_zip_fields_info[],
      i_s_zip_fill_low(), i_s_zip_fill(), i_s_zip_reset_fill(),
      i_s_zip_init(), i_s_zip_reset_init(): Replace "zip" with "compression".
      
      i_s_compression_fields_info[]: Remove "used", "free",
      "relocated", "relocated_usec".  In "compressed_usec" and "decompressed_usec",
      replace microseconds with seconds ("usec" with "sec").
      
      page_zip_decompress(): Correct a typo in the function comment.
      
      PAGE_ZIP_SSIZE_BITS, PAGE_ZIP_NUM_SSIZE: New constants.
      
      page_zip_stat_t, page_zip_stat: Statistics of the compression, grouped
      by page size.
      
      page_zip_simple_validate(): Assert that page_zip->ssize is reasonable.
      bd8d5d3e
  5. 27 Mar, 2008 1 commit
    • vasil's avatar
      branches/zip: · f8eba2fa
      vasil authored
      Add the prototype of check_global_access() if MySQL version is less than
      5.1.24 to make zip compile with 5.1.23. This was removed when MySQL added
      the prototype in their code in 5.1.24 but we still need zip to compile with
      older versions.
      f8eba2fa
  6. 26 Mar, 2008 1 commit
  7. 19 Mar, 2008 1 commit
    • marko's avatar
      branches/zip: Remove innodb.patch. · ab7b62e7
      marko authored
      This patch tries to enable resizeable buffer pool by polling the configuration
      parameter for the buffer pool size, which is not a good solution.  The
      right way could be to have an update function callback of a settable
      MySQL variable to send an event to the master thread.
      
      It could also make sense to expose the buffer pool chunks to the user.
      The first chunk would never be freed.  Other chunks than the first one
      would only be used for allocating page frames (uncompressed or compressed)
      and block descriptors of of compressed pages (buf_page_t).  That is, other
      users of the buffer pool, such as mem_heap_create_block() and the lock
      table, would be restricted to the first chunk.  This would allow other
      chunks to be freed by simply flushing any dirty blocks that they contain.
      
      It might also be worthwhile to create multiple chunks initially, based on
      the initial buffer pool size and the HugeTLB page size.  In that way, the
      buffer pool could be reduced from the initial configuration at runtime.
      ab7b62e7
  8. 18 Mar, 2008 2 commits
    • marko's avatar
      branches/zip: Pass the tablespace flags correctly when creating or opening · 8dafbcef
      marko authored
      single-table tablespaces.  This bug was reported by Sunny as Mantis issue #26.
      
      fil_space_create(), fil_create_new_single_table_tablespace(),
      fil_open_single_table_tablespace(), fsp_header_init_fields():
      Add ut_a(flags != DICT_TF_COMPACT).
      
      dict_build_table_def_step(), row_import_tablespace_for_mysql(),
      row_truncate_table_for_mysql(): Pass correct flags to
      fil_create_new_single_table_tablespace() or fil_open_single_table_tablespace().
      8dafbcef
    • marko's avatar
      branches/zip: dict_load_table(): Remove a redundant check for !flags. · 09b38fab
      marko authored
      The function dict_sys_tables_get_flags() already ensures that the
      table flags are 0 unless ROW_FORMAT=COMPACT.
      09b38fab
  9. 17 Mar, 2008 6 commits
  10. 14 Mar, 2008 1 commit
  11. 13 Mar, 2008 4 commits
    • marko's avatar
      branches/zip: Implement ROW_FORMAT=COMPRESSED and ROW_FORMAT=DYNAMIC. · 7afea563
      marko authored
      Throw warnings, not errors for wrong ROW_FORMAT or KEY_BLOCK_SIZE,
      so that any table dump can be loaded.
      
      As of this change, InnoDB supports the following table formats:
      
      ROW_FORMAT=REDUNDANT
      	the only format before MySQL/InnoDB 5.0.3
      ROW_FORMAT=COMPACT
      	the new default format of MySQL/InnoDB 5.0.3
      ROW_FORMAT=DYNAMIC
      	uncompressed, no prefix in the clustered index record for BLOBs
      ROW_FORMAT=COMPRESSED
      	like ROW_FORMAT=DYNAMIC, but zlib compressed B-trees and BLOBs;
      	the compressed page size is specified by KEY_BLOCK_SIZE in
      	kilobytes (1, 2, 4, 8, or 16; default 8)
      
      KEY_BLOCK_SIZE=1, 2, 4, 8, or 16: implies ROW_FORMAT=COMPRESSED;
      ignored if ROW_FORMAT is not COMPRESSED
      
      KEY_BLOCK_SIZE=anything else: ignored
      
      The InnoDB row format is displayed in the 4th column (Row_format) of
      the output of SHOW TABLE STATUS.  The Create_options column may show
      ROW_FORMAT= and KEY_BLOCK_SIZE=, but they do not necessarily have
      anything to do with InnoDB.
      
      The table format can also be queried like this:
      
      SELECT table_schema, table_name, row_format
      FROM information_schema.tables
      WHERE engine='innodb' and row_format in ('Compressed','Dynamic');
      
      When Row_format='Compressed', KEY_BLOCK_SIZE should usually correspond
      to the compressed page size.  But the .frm file could be manipulated
      to show any KEY_BLOCK_SIZE.
      
      For some reason, INFORMATION_SCHEMA.TABLES.CREATE_OPTIONS does not
      include KEY_BLOCK_SIZE.  It does include row_format (spelled in
      lowercase).  This looks like a MySQL bug, because the table
      INFORMATION_SCHEMA.TABLES probably tries to replace SHOW TABLE STATUS.
      I reported this as Bug #35275 <http://bugs.mysql.com/35275>.
      
      ha_innobase::get_row_type(): Add ROW_TYPE_COMPRESSED, ROW_TYPE_DYNAMIC.
      
      ha_innobase::create(): Implement ROW_FORMAT=COMPRESSED and
      ROW_FORMAT=DYNAMIC.  Do not throw errors for wrong ROW_FORMAT or
      KEY_BLOCK_SIZE, but issue warnings instead.
      
      ha_innobase::check_if_incompatible_data(): Return COMPATIBLE_DATA_NO
      if KEY_BLOCK_SIZE has been specified.
      
      innodb.result: Adjust the result for the warning issued for ROW_FORMAT=FIXED.
      
      innodb-zip.test: Add tests.  Query INFORMATION_SCHEMA.TABLES for ROW_FORMAT.
      7afea563
    • marko's avatar
      branches/zip: row_upd_index_replace_new_col_val(): Fix the function · ec257218
      marko authored
      parameters that were somehow wrong in r2363.
      ec257218
    • marko's avatar
      branches/zip: Fix a bug in the retrieval of old versions of records containing · 5dfe4d50
      marko authored
      externally stored columns.
      
      innodb-zip.test: Correct the test case.  Without the fixes, the test
      would fail, because the BLOB would be prepended with a 768-byte prefix
      of the data.
      
      row_upd_index_replace_new_col_vals_index_pos(),
      row_upd_index_replace_new_col_vals(): Use only one "heap"
      parameter that must be non-NULL.  When fetching externally
      stored columns, use upd_field_t::orig_len.
      
      upd_get_field_by_field_no(): New accessor function, for retrieving
      an field from an update vector by field_no.
      
      row_upd_index_replace_new_col_val(): New function, for replacing the
      value from an update vector.  This used to be duplicated code in
      row_upd_index_replace_new_col_vals_index_pos() and
      row_upd_index_replace_new_col_vals().
      5dfe4d50
    • marko's avatar
      branches/zip: Non-functional change: Add some missing const qualifiers. · aacaca62
      marko authored
      btr_index_rec_validate_report(), btr_index_rec_validate(): Add const
      qualifiers to page, rec, index.
      
      row_vers_old_has_index_entry(), row_vers_build_for_consistent_read():
      Add const qualifier to rec.
      
      row_vers_build_for_semi_consistent_read(): Add const qualifier to rec
      and old_vers.
      
      row_sel_store_row_id_to_prebuilt(): Add const qualifiers to
      index_rec, index, offsets.
      
      row_sel_build_prev_vers_for_mysql(): Add const qualifier to rec.
      
      row_sel_get_clust_rec_for_mysql(): Add const qualifier to rec and out_rec.
      
      row_sel_try_search_shortcut_for_mysql(): Add const qualifier to out_rec.
      aacaca62
  12. 11 Mar, 2008 1 commit
  13. 10 Mar, 2008 1 commit
    • marko's avatar
      branches/zip: Implement the configuration parameter and settable global · a9ae7311
      marko authored
      variable innodb_file_format.  Implement file format version stamping of
      *.ibd files and SYS_TABLES.TYPE.
      
      This change breaks introduces an incompatible change for for
      compressed tables.  We can do this, as we have not released yet.
      
      innodb-zip.test: Add tests for stricter KEY_BLOCK_SIZE and ROW_FORMAT
      checks.
      
      DICT_TF_COMPRESSED_MASK, DICT_TF_COMPRESSED_SHIFT: Replace with
      DICT_TF_ZSSIZE_MASK, DICT_TF_ZSSIZE_SHIFT.
      
      DICT_TF_FORMAT_MASK, DICT_TF_FORMAT_SHIFT, DICT_TF_FORMAT_51,
      DICT_TF_FORMAT_ZIP: File format version, stored in table->flags,
      in the .ibd file header, and in SYS_TABLES.TYPE.
      
      dict_create_sys_tables_tuple(): Write the table flags to SYS_TABLES.TYPE
      if the format is at least DICT_TF_FORMAT_ZIP.  For old formats
      (DICT_TF_FORMAT_51), write DICT_TABLE_ORDINARY as the table type.
      
      DB_TABLE_ZIP_NO_IBD: Remove the error code.  The error handling is done
      in ha_innodb.cc; as a failsafe measure, dict_build_table_def_step() will
      silently clear the compression and format flags instead of returning this
      error.
      
      dict_mem_table_create(): Assert that no extra bits are set in the flags.
      
      dict_sys_tables_get_zip_size(): Rename to dict_sys_tables_get_flags().
      Check all flag bits, and return ULINT_UNDEFINED if the combination is
      unsupported.
      
      dict_boot(): Document the SYS_TABLES columns N_COLS and TYPE.
      
      dict_table_get_format(), dict_table_set_format(),
      dict_table_flags_to_zip_size(): New accessors to table->flags.
      
      dtuple_convert_big_rec(): Introduce the auxiliary variables
      local_len, local_prefix_len.  Store a 768-byte prefix locally
      if the file format is less than DICT_TF_FORMAT_ZIP.
      
      dtuple_convert_back_big_rec(): Restore the columns.
      
      srv_file_format: New variable: innodb_file_format.
      
      fil_create_new_single_table_tablespace(): Replace the parameter zip_size
      with table->flags.
      
      fil_open_single_table_tablespace(): Replace the parameter zip_size_in_k
      with table->flags.  Check the flags.
      
      fil_space_struct, fil_space_create(), fil_op_write_log():
      Replace zip_size with flags.
      
      fil_node_open_file(): Note a TODO item for InnoDB Hot Backup.
      Check that the tablespace flags match.
      
      fil_space_get_zip_size(): Rename to fil_space_get_flags().  Add a
      wrapper for fil_space_get_zip_size().
      
      fsp_header_get_flags(): New function.
      
      fsp_header_init_fields(): Replace zip_size with flags.
      
      FSP_SPACE_FLAGS: New name for the tablespace flags.  This field used
      to be called FSP_PAGE_ZIP_SIZE, or FSP_LOWEST_NO_WRITE.  It has always
      been written as 0 in MySQL/InnoDB versions 4.1 to 5.1.
      
      MLOG_ZIP_FILE_CREATE: Rename to MLOG_FILE_CREATE2.  Add a 32-bit
      parameter for the tablespace flags.
      
      ha_innobase::create(): Check the table attributes ROW_FORMAT and
      KEY_BLOCK_SIZE.  Issue errors if they are inappropriate, or warnings
      if the inherited attributes (in ALTER TABLE) will be ignored.
      
      PAGE_ZIP_MIN_SIZE_SHIFT: New constant: the 2-logarithm of PAGE_ZIP_MIN_SIZE.
      a9ae7311
  14. 07 Mar, 2008 2 commits
    • marko's avatar
      innodb-zip.test: Now that innodb_file_per_table is a settable variable · 7d465216
      marko authored
      as of r2355, remove the special startup options innodb-zip-master.opt
      and set the variable in innodb-zip.test instead.
      7d465216
    • marko's avatar
      branches/zip: Make innodb_file_per_table a settable global variable. · 9f962b0d
      marko authored
      There is one consideration: fil_init() chooses the tablespace hash size
      based on the initial value of srv_file_per_table.  However, this is nothing
      new: InnoDB could be started with innodb_file_per_table=0 even though
      *.ibd files exist.
      
      srv_file_per_table: Declare as my_bool instead of ibool, because
      MYSQL_SYSVAR_BOOL() expects a pointer to my_bool.  Document the
      variable also in srv0srv.h.
      
      innobase_start_or_create_for_mysql(): Note why it is OK to temporarily
      clear srv_file_per_table.
      
      innobase_file_per_table: Remove.
      9f962b0d
  15. 06 Mar, 2008 1 commit
  16. 05 Mar, 2008 5 commits