List:Commits« Previous MessageNext Message »
From:ingo Date:May 16 2007 10:14am
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 10:14:06+02:00, istruewing@stripped +5 -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.

  include/my_getopt.h@stripped, 2007-05-16 10:13:58+02:00, istruewing@stripped +3 -2
    Bug#23068 - key_cache_block_size is not set or displayes correctly
    Added new option value flag GET_POWER_OF_2.
    Use it for values that must be a power of 2.

  mysql-test/r/key_cache.result@stripped, 2007-05-16 10:13:58+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 10:13:58+02:00, istruewing@stripped +62
-0
    Bug#23068 - key_cache_block_size is not set or displayes correctly
    Added new test.

  mysys/my_getopt.c@stripped, 2007-05-16 10:13:58+02:00, istruewing@stripped +23 -0
    Bug#23068 - key_cache_block_size is not set or displayes correctly
    Added handling of GET_POWER_OF_2 flag.
    If present, limit the result value to the highest power of 2
    less or equal to the input value.

  sql/mysqld.cc@stripped, 2007-05-16 10:13:58+02:00, istruewing@stripped +2 -2
    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 and restrict the
    result value 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 10:14:23 +02:00
+++ 1.608/sql/mysqld.cc	2007-05-16 10:14:24 +02:00
@@ -5805,8 +5805,8 @@ log and this option does nothing anymore
    "The default size of key cache blocks",
    (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},
+   0, (GET_ULONG | GET_ASK_ADDR | GET_POWER_OF_2), REQUIRED_ARG,
+   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,

--- 1.19/include/my_getopt.h	2007-05-16 10:14:24 +02:00
+++ 1.20/include/my_getopt.h	2007-05-16 10:14:24 +02:00
@@ -30,8 +30,9 @@ C_MODE_START
 #define GET_STR_ALLOC 10
 #define GET_DISABLED  11
 
-#define GET_ASK_ADDR	 128
-#define GET_TYPE_MASK	 127
+#define GET_TYPE_MASK	0x007f  /* Maximum variable type number is 127. */
+#define GET_ASK_ADDR	0x0080  /* Bit flag: unknown value address. */
+#define GET_POWER_OF_2	0x0100  /* Bit flag: value must be power of 2. */
 
 enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG };
 

--- 1.62/mysys/my_getopt.c	2007-05-16 10:14:24 +02:00
+++ 1.63/mysys/my_getopt.c	2007-05-16 10:14:24 +02:00
@@ -733,6 +733,19 @@ static longlong getopt_ll(char *arg, con
     num= (ulonglong) optp->max_value;
   num= ((num - optp->sub_size) / block_size);
   num= (longlong) (num * block_size);
+  /* Check if value is required to be a power of 2. */
+  if (optp->var_type & GET_POWER_OF_2)
+  {
+    /* Cannot use my_bit_log2() on a longlong value. */
+    uint bit;
+    /* No negative value possible. Lowest power of 2 is 1. */
+    if (num < 0)
+      num= 1;
+    /* Find the highest bit in the input value. */
+    for (bit= 0; num > 1; num>>= 1, bit++) {}
+    /* Create a result value as the highest power of 2 <= input value. */
+    num= 1 << bit;
+  }
   return max(num, optp->min_value);
 }
 
@@ -761,6 +774,16 @@ ulonglong getopt_ull_limit_value(ulonglo
   {
     num/= (ulonglong) optp->block_size;
     num*= (ulonglong) optp->block_size;
+  }
+  /* Check if value is required to be a power of 2. */
+  if (optp->var_type & GET_POWER_OF_2)
+  {
+    /* Cannot use my_bit_log2() on a longlong value. */
+    uint bit;
+    /* Find the highest bit in the input value. */
+    for (bit= 0; num > 1; num>>= 1, bit++) {}
+    /* Create a result value as the highest power of 2 <= input value. */
+    num= 1 << bit;
   }
   if (num < (ulonglong) optp->min_value)
     num= (ulonglong) optp->min_value;

--- 1.20/mysql-test/r/key_cache.result	2007-05-16 10:14:24 +02:00
+++ 1.21/mysql-test/r/key_cache.result	2007-05-16 10:14:24 +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 10:14:24 +02:00
+++ 1.20/mysql-test/t/key_cache.test	2007-05-16 10:14:24 +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
Thread
bk commit into 5.0 tree (istruewing:1.2465) BUG#23068ingo16 May