List:Commits« Previous MessageNext Message »
From:ingo Date:May 16 2007 1:55pm
Subject:bk commit into 5.0 tree (istruewing:1.2465) BUG#23068
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of istruewing. When istruewing does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-05-16 15:55:36+02:00, istruewing@stripped +4 -0
  Bug#23068 - key_cache_block_size is not set or displayes correctly
  
  Command line and configuration file option 'key_cache_block_size'
  was mangled by the server and could take weird values.
  
  We deduced MALLOC_OVERHEAD (8 in a production server, 36 in a
  debug server) from the user supplied value and restricted it to
  the greatest multiple of 512 less or equal to the reduced value.
  We accepted values that were no power of 2 (eg. 1536), which
  could result in bad key cache behavior.
  
  This patch changes option 'key_cache_block_size' to not deduce
  MALLOC_OVERHEAD from the input value and restrict the
  result value to be a power of 2.

  mysql-test/r/key_cache.result@stripped, 2007-05-16 15:55:33+02:00, istruewing@stripped +117 -2
    Bug#23068 - key_cache_block_size is not set or displayes correctly
    Fixed old test result.
    Added new test result.

  mysql-test/t/key_cache.test@stripped, 2007-05-16 15:55:33+02:00, istruewing@stripped +62 -0
    Bug#23068 - key_cache_block_size is not set or displayes correctly
    Added new test.

  sql/mysqld.cc@stripped, 2007-05-16 15:55:33+02:00, istruewing@stripped +13 -1
    Bug#23068 - key_cache_block_size is not set or displayes correctly
    Changed option 'key_cache_block_size' to not deduce
    MALLOC_OVERHEAD from the input value.
    Added code to restrict 'key_cache_block_size' to be a power of 2.

  sql/set_var.cc@stripped, 2007-05-16 15:55:33+02:00, istruewing@stripped +7 -0
    Bug#23068 - key_cache_block_size is not set or displayes correctly
    Added code to restrict 'key_cache_block_size' to be a power of 2.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	istruewing
# Host:	chilla.local
# Root:	/home/mydev/mysql-5.0-bug23068

--- 1.607/sql/mysqld.cc	2007-05-16 15:55:43 +02:00
+++ 1.608/sql/mysqld.cc	2007-05-16 15:55:43 +02:00
@@ -5806,7 +5806,7 @@ log and this option does nothing anymore
    (gptr*) &dflt_key_cache_var.param_block_size,
    (gptr*) 0,
    0, (GET_ULONG | GET_ASK_ADDR), REQUIRED_ARG,
-   KEY_CACHE_BLOCK_SIZE , 512, 1024*16, MALLOC_OVERHEAD, 512, 0},
+   KEY_CACHE_BLOCK_SIZE, 512, 1024 * 16, 0, 512, 0},
   {"key_cache_division_limit", OPT_KEY_CACHE_DIVISION_LIMIT,
    "The minimum percentage of warm blocks in key cache",
    (gptr*) &dflt_key_cache_var.param_division_limit,
@@ -7287,6 +7287,18 @@ get_one_option(int optid, const struct m
   case OPT_LOWER_CASE_TABLE_NAMES:
     lower_case_table_names= argument ? atoi(argument) : 1;
     lower_case_table_names_used= 1;
+    break;
+  case OPT_KEY_CACHE_BLOCK_SIZE:
+    {
+      /* Get a reference to the default key cache. */
+      KEY_CACHE *key_cache= get_or_create_key_cache("", 0);
+      if (key_cache)
+      {
+        /* Set to greatest power of 2, less or equal to the input value. */
+        key_cache->param_block_size=
+          1 << my_bit_log2(key_cache->param_block_size);
+      }
+    }
     break;
   }
   return 0;

--- 1.20/mysql-test/r/key_cache.result	2007-05-16 15:55:43 +02:00
+++ 1.21/mysql-test/r/key_cache.result	2007-05-16 15:55:43 +02:00
@@ -297,7 +297,7 @@ SET GLOBAL key_cache_block_size=1536;
 INSERT INTO t1 VALUES (1);
 SELECT @@key_cache_block_size;
 @@key_cache_block_size
-1536
+1024
 CHECK TABLE t1;
 Table	Op	Msg_type	Msg_text
 test.t1	check	status	OK
@@ -329,7 +329,7 @@ COUNT(*)
 4181
 SELECT @@key_cache_block_size;
 @@key_cache_block_size
-1536
+1024
 CHECK TABLE t1;
 Table	Op	Msg_type	Msg_text
 test.t1	check	status	OK
@@ -341,3 +341,118 @@ Warning	1438	Cannot drop default keycach
 select @@global.key_buffer_size;
 @@global.key_buffer_size
 2097152
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	1024
+SET GLOBAL key_cache_block_size= 0;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	512
+SET GLOBAL key_cache_block_size= 1;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	512
+SET GLOBAL key_cache_block_size= 300;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	512
+SET GLOBAL key_cache_block_size= 511;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	512
+SET GLOBAL key_cache_block_size= 512;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	512
+SET GLOBAL key_cache_block_size= 513;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	512
+SET GLOBAL key_cache_block_size= 900;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	512
+SET GLOBAL key_cache_block_size= 1023;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	512
+SET GLOBAL key_cache_block_size= 1024;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	1024
+SET GLOBAL key_cache_block_size= 1025;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	1024
+SET GLOBAL key_cache_block_size= 1700;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	1024
+SET GLOBAL key_cache_block_size= 2047;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	1024
+SET GLOBAL key_cache_block_size= 2048;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	2048
+SET GLOBAL key_cache_block_size= 2049;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	2048
+SET GLOBAL key_cache_block_size= 3000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	2048
+SET GLOBAL key_cache_block_size= 4095;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	2048
+SET GLOBAL key_cache_block_size= 4096;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	4096
+SET GLOBAL key_cache_block_size= 4097;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	4096
+SET GLOBAL key_cache_block_size= 6000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	4096
+SET GLOBAL key_cache_block_size= 8191;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	4096
+SET GLOBAL key_cache_block_size= 8192;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	8192
+SET GLOBAL key_cache_block_size= 8193;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	8192
+SET GLOBAL key_cache_block_size= 12000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	8192
+SET GLOBAL key_cache_block_size= 16383;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	8192
+SET GLOBAL key_cache_block_size= 16384;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	16384
+SET GLOBAL key_cache_block_size= 16385;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	16384
+SET GLOBAL key_cache_block_size= 24000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	16384
+SET GLOBAL key_cache_block_size= 60000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+Variable_name	Value
+key_cache_block_size	16384

--- 1.19/mysql-test/t/key_cache.test	2007-05-16 15:55:43 +02:00
+++ 1.20/mysql-test/t/key_cache.test	2007-05-16 15:55:43 +02:00
@@ -219,4 +219,66 @@ set global key_cache_block_size= @my_key
 set @@global.key_buffer_size=0;
 select @@global.key_buffer_size;
 
+#
+# Bug#23068 - key_cache_block_size is not set or displayes correctly
+#
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 0;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 1;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 300;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 511;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 512;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 513;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 900;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 1023;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 1024;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 1025;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 1700;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 2047;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 2048;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 2049;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 3000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 4095;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 4096;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 4097;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 6000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 8191;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 8192;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 8193;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 12000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 16383;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 16384;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 16385;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 24000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+SET GLOBAL key_cache_block_size= 60000;
+SHOW VARIABLES LIKE 'key_cache_block_size';
+
+
 # End of 4.1 tests

--- 1.183/sql/set_var.cc	2007-05-16 15:55:43 +02:00
+++ 1.184/sql/set_var.cc	2007-05-16 15:55:43 +02:00
@@ -2502,6 +2502,13 @@ bool sys_var_key_cache_long::update(THD 
   *((ulong*) (((char*) key_cache) + offset))=
     (ulong) getopt_ull_limit_value(tmp, option_limits);
 
+  if (offset == offsetof(KEY_CACHE, param_block_size))
+  {
+    /* Set to greatest power of 2, less or equal to the input value. */
+    key_cache->param_block_size=
+      1 << my_bit_log2(key_cache->param_block_size);
+  }
+
   /*
     Don't create a new key cache if it didn't exist
     (key_caches are created only when the user sets block_size)
Thread
bk commit into 5.0 tree (istruewing:1.2465) BUG#23068ingo16 May