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