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#23068 | ingo | 16 May |