2701 lars-erik.bjork@stripped 2009-05-09
This is one of at least two patches for bug#43630
'A SELECT using ORDER BY and LIMIT sometimes returns no rows'
The index walker logic does not handle if an index page is empty. In
loads with lots of updates, we may get empty pages. When walking the
index we will stop at the first empty index page, even though this is
not the end of the level. In this test, this has often been the first
page, resulting in no rows returned.
This patch makes the search proceed to the next page when an empty
index page that is not the end of the level is encountered.
=== modified file 'storage/falcon/WalkIndex.cpp'
WalkIndex::getNextNode has been changed to reposition the index to the
next page when an index page with BUCKET_END as it first node is
encountered.
modified:
storage/falcon/WalkIndex.cpp
2700 Olav.Sandstaa@stripped 2009-05-07 [merge]
Merging...
removed:
mysql-test/include/wait_for_status_var.inc
mysql-test/suite/rpl/t/rpl_000015-slave.sh
added:
mysql-test/collections/mysql-6.0-bugteam.push
mysql-test/include/diff_master_slave.inc
mysql-test/include/kill_query.inc
mysql-test/include/kill_query_and_diff_master_slave.inc
mysql-test/include/wait_for_status_var.inc
mysql-test/r/myisam_crash_before_flush_keys.result
mysql-test/r/myisam_debug.result
mysql-test/r/parser_not_embedded.result
mysql-test/std_data/bug37631.MYD
mysql-test/std_data/bug37631.MYI
mysql-test/std_data/bug37631.frm
mysql-test/suite/bugs/r/rpl_bug38205.result
mysql-test/suite/bugs/t/rpl_bug38205.test
mysql-test/suite/ibmdb2i/
mysql-test/suite/ibmdb2i/include/
mysql-test/suite/ibmdb2i/include/have_i61.inc
mysql-test/suite/ibmdb2i/include/have_ibmdb2i.inc
mysql-test/suite/ibmdb2i/r/
mysql-test/suite/ibmdb2i/r/ibmdb2i_bug_44020.result
mysql-test/suite/ibmdb2i/r/ibmdb2i_bug_44025.result
mysql-test/suite/ibmdb2i/t/
mysql-test/suite/ibmdb2i/t/ibmdb2i_bug_44020.test
mysql-test/suite/ibmdb2i/t/ibmdb2i_bug_44025.test
mysql-test/suite/rpl/r/rpl_bug38694.result
mysql-test/suite/rpl/r/rpl_init_slave_errors.result
mysql-test/suite/rpl/r/rpl_killed_ddl.result
mysql-test/suite/rpl/r/rpl_name_const.result
mysql-test/suite/rpl/t/rpl_bug38694-slave.opt
mysql-test/suite/rpl/t/rpl_bug38694.test
mysql-test/suite/rpl/t/rpl_init_slave_errors.test
mysql-test/suite/rpl/t/rpl_killed_ddl-master.opt
mysql-test/suite/rpl/t/rpl_killed_ddl.test
mysql-test/suite/rpl/t/rpl_name_const.test
mysql-test/suite/rpl/t/rpl_start_stop_slave-slave.opt
mysql-test/t/myisam_crash_before_flush_keys-master.opt
mysql-test/t/myisam_crash_before_flush_keys.test
mysql-test/t/myisam_debug.test
mysql-test/t/parser_not_embedded.test
modified:
.bzr-mysql/default.conf
BUILD/compile-alpha-ccc
BUILD/compile-alpha-debug
BUILD/compile-dist
BUILD/compile-solaris-amd64
BUILD/compile-solaris-sparc
BUILD/compile-solaris-sparc-debug
BUILD/compile-solaris-sparc-purify
client/mysql.cc
cmd-line-utils/libedit/readline/readline.h
cmd-line-utils/libedit/term.c
cmd-line-utils/libedit/vi.c
config/ac-macros/libevent_configure.m4
config/ac-macros/misc.m4
configure.in
extra/libevent/epoll.c
include/my_global.h
include/my_pthread.h
include/thr_lock.h
libmysql/Makefile.shared
mysql-test/extra/rpl_tests/rpl_deadlock.test
mysql-test/include/handler.inc
mysql-test/include/mix1.inc
mysql-test/lib/My/SafeProcess/Makefile.am
mysql-test/mysql-test-run.pl
mysql-test/r/count_distinct3.result
mysql-test/r/ctype_utf32.result
mysql-test/r/fulltext.result
mysql-test/r/func_des_encrypt.result
mysql-test/r/func_encrypt.result
mysql-test/r/func_misc.result
mysql-test/r/func_sapdb.result
mysql-test/r/func_set.result
mysql-test/r/func_str.result
mysql-test/r/gis-rtree.result
mysql-test/r/gis.result
mysql-test/r/handler_innodb.result
mysql-test/r/handler_myisam.result
mysql-test/r/innodb.result
mysql-test/r/innodb_mysql.result
mysql-test/r/insert.result
mysql-test/r/lock_multi.result
mysql-test/r/merge.result
mysql-test/r/myisam.result
mysql-test/r/myisampack.result
mysql-test/r/mysqlbinlog_row_big.result
mysql-test/r/mysqldump.result
mysql-test/r/not_embedded_server.result
mysql-test/r/parser.result
mysql-test/r/partition.result
mysql-test/r/partition_mgm.result
mysql-test/r/perror.result
mysql-test/r/ps_1general.result
mysql-test/r/repair.result
mysql-test/r/shm.result
mysql-test/r/sp-ucs2.result
mysql-test/r/sp.result
mysql-test/r/trigger.result
mysql-test/r/type_time.result
mysql-test/r/union.result
mysql-test/r/upgrade.result
mysql-test/r/varbinary.result
mysql-test/r/variables-big.result
mysql-test/r/variables-notembedded.result
mysql-test/r/xml.result
mysql-test/suite/binlog/r/binlog_stm_ps.result
mysql-test/suite/binlog/r/binlog_unsafe.result
mysql-test/suite/binlog/t/binlog_unsafe.test
mysql-test/suite/funcs_1/t/disabled.def
mysql-test/suite/funcs_2/charset/charset_master.test
mysql-test/suite/rpl/include/rpl_mixed_ddl.inc
mysql-test/suite/rpl/r/rpl_bug33931.result
mysql-test/suite/rpl/r/rpl_deadlock_innodb.result
mysql-test/suite/rpl/r/rpl_heartbeat.result
mysql-test/suite/rpl/r/rpl_idempotency.result
mysql-test/suite/rpl/r/rpl_skip_error.result
mysql-test/suite/rpl/r/rpl_start_stop_slave.result
mysql-test/suite/rpl/r/rpl_stm_loadfile.result
mysql-test/suite/rpl/r/rpl_sync.result
mysql-test/suite/rpl/r/rpl_udf.result
mysql-test/suite/rpl/t/disabled.def
mysql-test/suite/rpl/t/rpl_binlog_corruption.test
mysql-test/suite/rpl/t/rpl_bug33931.test
mysql-test/suite/rpl/t/rpl_heartbeat.test
mysql-test/suite/rpl/t/rpl_idempotency.test
mysql-test/suite/rpl/t/rpl_skip_error.test
mysql-test/suite/rpl/t/rpl_start_stop_slave.test
mysql-test/suite/rpl/t/rpl_sync.test
mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test
mysql-test/suite/sys_vars/r/binlog_cache_size_basic_64.result
mysql-test/suite/sys_vars/r/bulk_insert_buffer_size_basic_64.result
mysql-test/suite/sys_vars/r/delayed_insert_limit_basic_64.result
mysql-test/suite/sys_vars/r/delayed_queue_size_basic_64.result
mysql-test/suite/sys_vars/r/join_buffer_size_basic_64.result
mysql-test/suite/sys_vars/r/key_buffer_size_basic_64.result
mysql-test/suite/sys_vars/r/log_warnings_basic_64.result
mysql-test/suite/sys_vars/r/max_binlog_cache_size_basic_64.result
mysql-test/suite/sys_vars/r/max_connect_errors_basic_64.result
mysql-test/suite/sys_vars/r/max_heap_table_size_basic_64.result
mysql-test/suite/sys_vars/r/max_seeks_for_key_basic_64.result
mysql-test/suite/sys_vars/r/max_tmp_tables_basic_64.result
mysql-test/suite/sys_vars/r/max_write_lock_count_basic_64.result
mysql-test/suite/sys_vars/r/min_examined_row_limit_basic_64.result
mysql-test/suite/sys_vars/r/myisam_max_sort_file_size_basic_64.result
mysql-test/suite/sys_vars/r/myisam_repair_threads_basic_64.result
mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic_64.result
mysql-test/suite/sys_vars/r/net_retry_count_basic_64.result
mysql-test/suite/sys_vars/r/query_alloc_block_size_basic_64.result
mysql-test/suite/sys_vars/r/query_cache_limit_basic_64.result
mysql-test/suite/sys_vars/r/query_cache_min_res_unit_basic_64.result
mysql-test/suite/sys_vars/r/query_cache_size_basic_64.result
mysql-test/suite/sys_vars/r/query_prealloc_size_basic_64.result
mysql-test/suite/sys_vars/r/range_alloc_block_size_basic_64.result
mysql-test/suite/sys_vars/r/rpl_recovery_rank_basic_64.result
mysql-test/suite/sys_vars/r/slave_transaction_retries_basic_64.result
mysql-test/suite/sys_vars/r/sync_binlog_basic_64.result
mysql-test/suite/sys_vars/r/tmp_table_size_basic.result
mysql-test/suite/sys_vars/r/transaction_prealloc_size_basic_64.result
mysql-test/suite/sys_vars/r/wait_timeout_basic_64.result
mysql-test/suite/sys_vars/t/disabled.def
mysql-test/suite/sys_vars/t/tmp_table_size_basic.test
mysql-test/t/count_distinct3.test
mysql-test/t/ctype_utf32.test
mysql-test/t/disabled.def
mysql-test/t/fulltext.test
mysql-test/t/func_des_encrypt.test
mysql-test/t/func_encrypt.test
mysql-test/t/func_misc.test
mysql-test/t/func_sapdb.test
mysql-test/t/func_set.test
mysql-test/t/func_str.test
mysql-test/t/gis-rtree.test
mysql-test/t/gis.test
mysql-test/t/innodb_mysql.test
mysql-test/t/insert.test
mysql-test/t/lock_multi.test
mysql-test/t/merge.test
mysql-test/t/myisam.test
mysql-test/t/myisampack.test
mysql-test/t/mysqlbinlog_row_big.test
mysql-test/t/mysqldump.test
mysql-test/t/not_embedded_server.test
mysql-test/t/parser.test
mysql-test/t/partition.test
mysql-test/t/partition_mgm.test
mysql-test/t/plugin_notembedded.test
mysql-test/t/ps_1general.test
mysql-test/t/shm.test
mysql-test/t/sp-ucs2.test
mysql-test/t/sp.test
mysql-test/t/sp_trans_log.test
mysql-test/t/trigger.test
mysql-test/t/type_time.test
mysql-test/t/union.test
mysql-test/t/upgrade.test
mysql-test/t/variables-big.test
mysql-test/t/variables-notembedded-master.opt
mysql-test/t/xml.test
mysys/charset.c
mysys/mf_keycache.c
mysys/my_init.c
mysys/my_thr_init.c
mysys/thr_mutex.c
scripts/mysql_install_db.sh
scripts/mysql_setpermission.sh
scripts/mysqld_multi.sh
scripts/mysqlhotcopy.sh
sql/backup/backup_info.cc
sql/backup/stream_v1.c
sql/backup/stream_v1.h
sql/backup/stream_v1_transport.c
sql/events.cc
sql/field.cc
sql/handler.cc
sql/item.cc
sql/item_cmpfunc.cc
sql/item_func.cc
sql/item_geofunc.cc
sql/item_strfunc.cc
sql/item_strfunc.h
sql/item_timefunc.cc
sql/item_xmlfunc.cc
sql/log.cc
sql/log_event.cc
sql/mysql_priv.h
sql/parse_file.cc
sql/parse_file.h
sql/rpl_filter.cc
sql/share/errmsg.txt
sql/slave.cc
sql/sp.cc
sql/sp_head.cc
sql/sp_head.h
sql/sp_pcontext.cc
sql/sp_pcontext.h
sql/sql_acl.cc
sql/sql_base.cc
sql/sql_class.cc
sql/sql_crypt.cc
sql/sql_crypt.h
sql/sql_db.cc
sql/sql_delete.cc
sql/sql_handler.cc
sql/sql_lex.cc
sql/sql_lex.h
sql/sql_parse.cc
sql/sql_partition.cc
sql/sql_rename.cc
sql/sql_repl.cc
sql/sql_select.cc
sql/sql_table.cc
sql/sql_test.cc
sql/sql_view.cc
sql/sql_view.h
sql/sql_yacc.yy
storage/falcon/Interlock.h
storage/falcon/plug.in
storage/ibmdb2i/Makefile.am
storage/ibmdb2i/db2i_collationSupport.cc
storage/ibmdb2i/db2i_misc.h
storage/ibmdb2i/ha_ibmdb2i.cc
storage/myisam/CMakeLists.txt
storage/myisam/ft_boolean_search.c
storage/myisam/ha_myisam.cc
storage/myisam/mi_close.c
storage/myisam/mi_delete.c
storage/myisam/mi_dynrec.c
storage/myisam/mi_open.c
storage/myisam/mi_packrec.c
storage/myisam/mi_write.c
storage/myisam/myisamchk.c
storage/myisammrg/ha_myisammrg.cc
storage/ndb/tools/restore/consumer_restore.cpp
storage/ndb/tools/restore/consumer_restorem.cpp
support-files/mysql.spec.sh
tests/mysql_client_test.c
vio/viosocket.c
win/Makefile.am
=== modified file 'storage/falcon/WalkIndex.cpp'
--- a/storage/falcon/WalkIndex.cpp 2009-03-02 08:16:53 +0000
+++ b/storage/falcon/WalkIndex.cpp 2009-05-09 11:25:17 +0000
@@ -88,9 +88,21 @@ int32 WalkIndex::getNextNode(void)
recordNumber = node.getNumber();
if (recordNumber >= 0)
+ {
return recordNumber;
- else if (recordNumber == END_LEVEL || recordNumber == END_BUCKET)
+ }
+ else if (recordNumber == END_BUCKET)
+ {
+ // This page is empty, proceed to next page
+ IndexRootPage::repositionIndex(index->dbb, index->indexId, this);
+ continue;
+ }
+ else if (recordNumber == END_LEVEL)
+ {
return -1;
+ }
+
+ ASSERT (false);
}
node.getNext(endNodes);
| Thread |
|---|
| • bzr push into mysql-6.0-falcon-team branch (lars-erik.bjork:2700 to 2701)Bug#43630 | lars-erik.bjork | 11 May |