branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/***************************************************************************//**
|
|
|
|
|
2012-08-01 17:27:34 +03:00
|
|
|
Copyright (c) 2007, 2010, Oracle and/or its affiliates. All Rights Reserved.
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
|
|
Foundation; version 2 of the License.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
2012-08-01 17:27:34 +03:00
|
|
|
this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
|
|
|
|
*****************************************************************************/
|
|
|
|
/********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Red-Black tree implementation
|
|
|
|
|
|
|
|
(c) 2007 Oracle/Innobase Oy
|
|
|
|
|
|
|
|
Created 2007-03-20 Sunny Bains
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
#include "ut0rbt.h"
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Definition of a red-black tree
|
|
|
|
==============================
|
|
|
|
|
|
|
|
A red-black tree is a binary search tree which has the following
|
|
|
|
red-black properties:
|
|
|
|
|
|
|
|
1. Every node is either red or black.
|
|
|
|
2. Every leaf (NULL - in our case tree->nil) is black.
|
|
|
|
3. If a node is red, then both its children are black.
|
|
|
|
4. Every simple path from a node to a descendant leaf contains the
|
|
|
|
same number of black nodes.
|
|
|
|
|
|
|
|
from (3) above, the implication is that on any path from the root
|
|
|
|
to a leaf, red nodes must not be adjacent.
|
|
|
|
|
|
|
|
However, any number of black nodes may appear in a sequence.
|
2009-05-25 06:46:10 +00:00
|
|
|
*/
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
#if defined(IB_RBT_TESTING)
|
|
|
|
#warning "Testing enabled!"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define ROOT(t) (t->root->left)
|
|
|
|
#define SIZEOF_NODE(t) ((sizeof(ib_rbt_node_t) + t->sizeof_value) - 1)
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Print out the sub-tree recursively. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rbt_print_subtree(
|
|
|
|
/*==============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: tree to traverse */
|
|
|
|
const ib_rbt_node_t* node, /*!< in: node to print */
|
|
|
|
ib_rbt_print_node print) /*!< in: print key function */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
/* FIXME: Doesn't do anything yet */
|
|
|
|
if (node != tree->nil) {
|
|
|
|
print(node);
|
|
|
|
rbt_print_subtree(tree, node->left, print);
|
|
|
|
rbt_print_subtree(tree, node->right, print);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Verify that the keys are in order.
|
|
|
|
@return TRUE of OK. FALSE if not ordered */
|
2008-02-27 10:28:20 +00:00
|
|
|
static
|
|
|
|
ibool
|
|
|
|
rbt_check_ordering(
|
|
|
|
/*===============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree) /*!< in: tree to verfify */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
const ib_rbt_node_t* node;
|
|
|
|
const ib_rbt_node_t* prev = NULL;
|
|
|
|
|
|
|
|
/* Iterate over all the nodes, comparing each node with the prev */
|
|
|
|
for (node = rbt_first(tree); node; node = rbt_next(tree, prev)) {
|
|
|
|
|
2012-08-01 17:27:34 +03:00
|
|
|
if (prev) {
|
|
|
|
int result;
|
|
|
|
|
|
|
|
if (tree->cmp_arg) {
|
|
|
|
result = tree->compare_with_arg(
|
|
|
|
tree->cmp_arg, prev->value,
|
|
|
|
node->value);
|
|
|
|
} else {
|
|
|
|
result = tree->compare(
|
|
|
|
prev->value, node->value);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (result >= 0) {
|
|
|
|
return(FALSE);
|
|
|
|
}
|
2008-02-27 10:28:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
prev = node;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(TRUE);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Check that every path from the root to the leaves has the same count.
|
2009-05-25 06:46:10 +00:00
|
|
|
Count is expressed in the number of black nodes.
|
|
|
|
@return 0 on failure else black height of the subtree */
|
2008-02-27 10:28:20 +00:00
|
|
|
static
|
|
|
|
ibool
|
|
|
|
rbt_count_black_nodes(
|
|
|
|
/*==================*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: tree to verify */
|
|
|
|
const ib_rbt_node_t* node) /*!< in: start of sub-tree */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ulint result;
|
|
|
|
|
|
|
|
if (node != tree->nil) {
|
|
|
|
ulint left_height = rbt_count_black_nodes(tree, node->left);
|
|
|
|
|
|
|
|
ulint right_height = rbt_count_black_nodes(tree, node->right);
|
|
|
|
|
|
|
|
if (left_height == 0
|
|
|
|
|| right_height == 0
|
|
|
|
|| left_height != right_height) {
|
|
|
|
|
|
|
|
result = 0;
|
|
|
|
} else if (node->color == IB_RBT_RED) {
|
|
|
|
|
|
|
|
/* Case 3 */
|
|
|
|
if (node->left->color != IB_RBT_BLACK
|
|
|
|
|| node->right->color != IB_RBT_BLACK) {
|
|
|
|
|
|
|
|
result = 0;
|
|
|
|
} else {
|
|
|
|
result = left_height;
|
|
|
|
}
|
|
|
|
/* Check if it's anything other than RED or BLACK. */
|
|
|
|
} else if (node->color != IB_RBT_BLACK) {
|
|
|
|
|
|
|
|
result = 0;
|
|
|
|
} else {
|
|
|
|
|
|
|
|
result = right_height + 1;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
result = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(result);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Turn the node's right child's left sub-tree into node's right sub-tree.
|
|
|
|
This will also make node's right child it's parent. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rbt_rotate_left(
|
|
|
|
/*============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_node_t* nil, /*!< in: nil node of the tree */
|
|
|
|
ib_rbt_node_t* node) /*!< in: node to rotate */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* right = node->right;
|
|
|
|
|
|
|
|
node->right = right->left;
|
|
|
|
|
|
|
|
if (right->left != nil) {
|
|
|
|
right->left->parent = node;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Right's new parent was node's parent. */
|
|
|
|
right->parent = node->parent;
|
|
|
|
|
|
|
|
/* Since root's parent is tree->nil and root->parent->left points
|
|
|
|
back to root, we can avoid the check. */
|
|
|
|
if (node == node->parent->left) {
|
|
|
|
/* Node was on the left of its parent. */
|
|
|
|
node->parent->left = right;
|
|
|
|
} else {
|
|
|
|
/* Node must have been on the right. */
|
|
|
|
node->parent->right = right;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Finally, put node on right's left. */
|
|
|
|
right->left = node;
|
|
|
|
node->parent = right;
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Turn the node's left child's right sub-tree into node's left sub-tree.
|
|
|
|
This also make node's left child it's parent. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rbt_rotate_right(
|
|
|
|
/*=============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_node_t* nil, /*!< in: nil node of tree */
|
|
|
|
ib_rbt_node_t* node) /*!< in: node to rotate */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* left = node->left;
|
|
|
|
|
|
|
|
node->left = left->right;
|
|
|
|
|
|
|
|
if (left->right != nil) {
|
|
|
|
left->right->parent = node;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Left's new parent was node's parent. */
|
|
|
|
left->parent = node->parent;
|
|
|
|
|
|
|
|
/* Since root's parent is tree->nil and root->parent->left points
|
|
|
|
back to root, we can avoid the check. */
|
|
|
|
if (node == node->parent->right) {
|
|
|
|
/* Node was on the left of its parent. */
|
|
|
|
node->parent->right = left;
|
|
|
|
} else {
|
|
|
|
/* Node must have been on the left. */
|
|
|
|
node->parent->left = left;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Finally, put node on left's right. */
|
|
|
|
left->right = node;
|
|
|
|
node->parent = left;
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Append a node to the tree. */
|
|
|
|
static
|
|
|
|
ib_rbt_node_t*
|
|
|
|
rbt_tree_add_child(
|
|
|
|
/*===============*/
|
|
|
|
const ib_rbt_t* tree,
|
|
|
|
ib_rbt_bound_t* parent,
|
|
|
|
ib_rbt_node_t* node)
|
|
|
|
{
|
|
|
|
/* Cast away the const. */
|
|
|
|
ib_rbt_node_t* last = (ib_rbt_node_t*) parent->last;
|
|
|
|
|
|
|
|
if (last == tree->root || parent->result < 0) {
|
|
|
|
last->left = node;
|
|
|
|
} else {
|
|
|
|
/* FIXME: We don't handle duplicates (yet)! */
|
|
|
|
ut_a(parent->result != 0);
|
|
|
|
|
|
|
|
last->right = node;
|
|
|
|
}
|
|
|
|
|
|
|
|
node->parent = last;
|
|
|
|
|
|
|
|
return(node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Generic binary tree insert */
|
|
|
|
static
|
|
|
|
ib_rbt_node_t*
|
|
|
|
rbt_tree_insert(
|
|
|
|
/*============*/
|
|
|
|
ib_rbt_t* tree,
|
|
|
|
const void* key,
|
|
|
|
ib_rbt_node_t* node)
|
|
|
|
{
|
|
|
|
ib_rbt_bound_t parent;
|
|
|
|
ib_rbt_node_t* current = ROOT(tree);
|
|
|
|
|
|
|
|
parent.result = 0;
|
|
|
|
parent.last = tree->root;
|
|
|
|
|
|
|
|
/* Regular binary search. */
|
|
|
|
while (current != tree->nil) {
|
|
|
|
|
|
|
|
parent.last = current;
|
2012-08-01 17:27:34 +03:00
|
|
|
|
|
|
|
if (tree->cmp_arg) {
|
|
|
|
parent.result = tree->compare_with_arg(
|
|
|
|
tree->cmp_arg, key, current->value);
|
|
|
|
} else {
|
|
|
|
parent.result = tree->compare(key, current->value);
|
|
|
|
}
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
if (parent.result < 0) {
|
|
|
|
current = current->left;
|
|
|
|
} else {
|
|
|
|
current = current->right;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ut_a(current == tree->nil);
|
|
|
|
|
|
|
|
rbt_tree_add_child(tree, &parent, node);
|
|
|
|
|
|
|
|
return(node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Balance a tree after inserting a node. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rbt_balance_tree(
|
|
|
|
/*=============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: tree to balance */
|
|
|
|
ib_rbt_node_t* node) /*!< in: node that was inserted */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
const ib_rbt_node_t* nil = tree->nil;
|
|
|
|
ib_rbt_node_t* parent = node->parent;
|
|
|
|
|
|
|
|
/* Restore the red-black property. */
|
|
|
|
node->color = IB_RBT_RED;
|
|
|
|
|
|
|
|
while (node != ROOT(tree) && parent->color == IB_RBT_RED) {
|
|
|
|
ib_rbt_node_t* grand_parent = parent->parent;
|
|
|
|
|
|
|
|
if (parent == grand_parent->left) {
|
|
|
|
ib_rbt_node_t* uncle = grand_parent->right;
|
|
|
|
|
|
|
|
if (uncle->color == IB_RBT_RED) {
|
|
|
|
|
|
|
|
/* Case 1 - change the colors. */
|
|
|
|
uncle->color = IB_RBT_BLACK;
|
|
|
|
parent->color = IB_RBT_BLACK;
|
|
|
|
grand_parent->color = IB_RBT_RED;
|
|
|
|
|
|
|
|
/* Move node up the tree. */
|
|
|
|
node = grand_parent;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (node == parent->right) {
|
|
|
|
/* Right is a black node and node is
|
|
|
|
to the right, case 2 - move node
|
|
|
|
up and rotate. */
|
|
|
|
node = parent;
|
|
|
|
rbt_rotate_left(nil, node);
|
|
|
|
}
|
|
|
|
|
|
|
|
grand_parent = node->parent->parent;
|
|
|
|
|
|
|
|
/* Case 3. */
|
|
|
|
node->parent->color = IB_RBT_BLACK;
|
|
|
|
grand_parent->color = IB_RBT_RED;
|
|
|
|
|
|
|
|
rbt_rotate_right(nil, grand_parent);
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
ib_rbt_node_t* uncle = grand_parent->left;
|
|
|
|
|
|
|
|
if (uncle->color == IB_RBT_RED) {
|
|
|
|
|
|
|
|
/* Case 1 - change the colors. */
|
|
|
|
uncle->color = IB_RBT_BLACK;
|
|
|
|
parent->color = IB_RBT_BLACK;
|
|
|
|
grand_parent->color = IB_RBT_RED;
|
|
|
|
|
|
|
|
/* Move node up the tree. */
|
|
|
|
node = grand_parent;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (node == parent->left) {
|
|
|
|
/* Left is a black node and node is to
|
|
|
|
the right, case 2 - move node up and
|
|
|
|
rotate. */
|
|
|
|
node = parent;
|
|
|
|
rbt_rotate_right(nil, node);
|
|
|
|
}
|
|
|
|
|
|
|
|
grand_parent = node->parent->parent;
|
|
|
|
|
|
|
|
/* Case 3. */
|
|
|
|
node->parent->color = IB_RBT_BLACK;
|
|
|
|
grand_parent->color = IB_RBT_RED;
|
|
|
|
|
|
|
|
rbt_rotate_left(nil, grand_parent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
parent = node->parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Color the root black. */
|
|
|
|
ROOT(tree)->color = IB_RBT_BLACK;
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Find the given node's successor.
|
|
|
|
@return successor node or NULL if no successor */
|
2008-02-27 10:28:20 +00:00
|
|
|
static
|
|
|
|
ib_rbt_node_t*
|
|
|
|
rbt_find_successor(
|
|
|
|
/*===============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const ib_rbt_node_t* current) /*!< in: this is declared const
|
2008-02-27 10:28:20 +00:00
|
|
|
because it can be called via
|
|
|
|
rbt_next() */
|
|
|
|
{
|
|
|
|
const ib_rbt_node_t* nil = tree->nil;
|
|
|
|
ib_rbt_node_t* next = current->right;
|
|
|
|
|
|
|
|
/* Is there a sub-tree to the right that we can follow. */
|
|
|
|
if (next != nil) {
|
|
|
|
|
|
|
|
/* Follow the left most links of the current right child. */
|
|
|
|
while (next->left != nil) {
|
|
|
|
next = next->left;
|
|
|
|
}
|
|
|
|
|
|
|
|
} else { /* We will have to go up the tree to find the successor. */
|
|
|
|
ib_rbt_node_t* parent = current->parent;
|
|
|
|
|
|
|
|
/* Cast away the const. */
|
|
|
|
next = (ib_rbt_node_t*) current;
|
|
|
|
|
|
|
|
while (parent != tree->root && next == parent->right) {
|
|
|
|
next = parent;
|
|
|
|
parent = next->parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
next = (parent == tree->root) ? NULL : parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(next);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Find the given node's precedecessor.
|
|
|
|
@return predecessor node or NULL if no predecesor */
|
2008-02-27 10:28:20 +00:00
|
|
|
static
|
|
|
|
ib_rbt_node_t*
|
|
|
|
rbt_find_predecessor(
|
|
|
|
/*=================*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const ib_rbt_node_t* current) /*!< in: this is declared const
|
2008-02-27 10:28:20 +00:00
|
|
|
because it can be called via
|
|
|
|
rbt_prev() */
|
|
|
|
{
|
|
|
|
const ib_rbt_node_t* nil = tree->nil;
|
|
|
|
ib_rbt_node_t* prev = current->left;
|
|
|
|
|
|
|
|
/* Is there a sub-tree to the left that we can follow. */
|
|
|
|
if (prev != nil) {
|
|
|
|
|
|
|
|
/* Follow the right most links of the current left child. */
|
|
|
|
while (prev->right != nil) {
|
|
|
|
prev = prev->right;
|
|
|
|
}
|
|
|
|
|
|
|
|
} else { /* We will have to go up the tree to find the precedecessor. */
|
|
|
|
ib_rbt_node_t* parent = current->parent;
|
|
|
|
|
|
|
|
/* Cast away the const. */
|
2012-08-01 17:27:34 +03:00
|
|
|
prev = (ib_rbt_node_t*) current;
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
while (parent != tree->root && prev == parent->left) {
|
|
|
|
prev = parent;
|
|
|
|
parent = prev->parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
prev = (parent == tree->root) ? NULL : parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(prev);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Replace node with child. After applying transformations eject becomes
|
|
|
|
an orphan. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rbt_eject_node(
|
|
|
|
/*===========*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_node_t* eject, /*!< in: node to eject */
|
|
|
|
ib_rbt_node_t* node) /*!< in: node to replace with */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
/* Update the to be ejected node's parent's child pointers. */
|
|
|
|
if (eject->parent->left == eject) {
|
|
|
|
eject->parent->left = node;
|
|
|
|
} else if (eject->parent->right == eject) {
|
|
|
|
eject->parent->right = node;
|
|
|
|
} else {
|
|
|
|
ut_a(0);
|
|
|
|
}
|
|
|
|
/* eject is now an orphan but otherwise its pointers
|
|
|
|
and color are left intact. */
|
|
|
|
|
|
|
|
node->parent = eject->parent;
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Replace a node with another node. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rbt_replace_node(
|
|
|
|
/*=============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_node_t* replace, /*!< in: node to replace */
|
|
|
|
ib_rbt_node_t* node) /*!< in: node to replace with */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_color_t color = node->color;
|
|
|
|
|
|
|
|
/* Update the node pointers. */
|
|
|
|
node->left = replace->left;
|
|
|
|
node->right = replace->right;
|
|
|
|
|
|
|
|
/* Update the child node pointers. */
|
|
|
|
node->left->parent = node;
|
|
|
|
node->right->parent = node;
|
|
|
|
|
|
|
|
/* Make the parent of replace point to node. */
|
|
|
|
rbt_eject_node(replace, node);
|
|
|
|
|
|
|
|
/* Swap the colors. */
|
|
|
|
node->color = replace->color;
|
|
|
|
replace->color = color;
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Detach node from the tree replacing it with one of it's children.
|
|
|
|
@return the child node that now occupies the position of the detached node */
|
2008-02-27 10:28:20 +00:00
|
|
|
static
|
|
|
|
ib_rbt_node_t*
|
|
|
|
rbt_detach_node(
|
|
|
|
/*============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
ib_rbt_node_t* node) /*!< in: node to detach */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* child;
|
|
|
|
const ib_rbt_node_t* nil = tree->nil;
|
|
|
|
|
|
|
|
if (node->left != nil && node->right != nil) {
|
|
|
|
/* Case where the node to be deleted has two children. */
|
|
|
|
ib_rbt_node_t* successor = rbt_find_successor(tree, node);
|
|
|
|
|
|
|
|
ut_a(successor != nil);
|
|
|
|
ut_a(successor->parent != nil);
|
|
|
|
ut_a(successor->left == nil);
|
|
|
|
|
|
|
|
child = successor->right;
|
|
|
|
|
|
|
|
/* Remove the successor node and replace with its child. */
|
|
|
|
rbt_eject_node(successor, child);
|
|
|
|
|
|
|
|
/* Replace the node to delete with its successor node. */
|
|
|
|
rbt_replace_node(node, successor);
|
|
|
|
} else {
|
|
|
|
ut_a(node->left == nil || node->right == nil);
|
|
|
|
|
|
|
|
child = (node->left != nil) ? node->left : node->right;
|
|
|
|
|
|
|
|
/* Replace the node to delete with one of it's children. */
|
|
|
|
rbt_eject_node(node, child);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Reset the node links. */
|
|
|
|
node->parent = node->right = node->left = tree->nil;
|
|
|
|
|
|
|
|
return(child);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Rebalance the right sub-tree after deletion.
|
|
|
|
@return node to rebalance if more rebalancing required else NULL */
|
2008-02-27 10:28:20 +00:00
|
|
|
static
|
|
|
|
ib_rbt_node_t*
|
|
|
|
rbt_balance_right(
|
|
|
|
/*==============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_node_t* nil, /*!< in: rb tree nil node */
|
|
|
|
ib_rbt_node_t* parent, /*!< in: parent node */
|
|
|
|
ib_rbt_node_t* sibling) /*!< in: sibling node */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* node = NULL;
|
|
|
|
|
|
|
|
ut_a(sibling != nil);
|
|
|
|
|
|
|
|
/* Case 3. */
|
|
|
|
if (sibling->color == IB_RBT_RED) {
|
|
|
|
|
|
|
|
parent->color = IB_RBT_RED;
|
|
|
|
sibling->color = IB_RBT_BLACK;
|
|
|
|
|
|
|
|
rbt_rotate_left(nil, parent);
|
|
|
|
|
|
|
|
sibling = parent->right;
|
|
|
|
|
|
|
|
ut_a(sibling != nil);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Since this will violate case 3 because of the change above. */
|
|
|
|
if (sibling->left->color == IB_RBT_BLACK
|
|
|
|
&& sibling->right->color == IB_RBT_BLACK) {
|
|
|
|
|
|
|
|
node = parent; /* Parent needs to be rebalanced too. */
|
|
|
|
sibling->color = IB_RBT_RED;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
if (sibling->right->color == IB_RBT_BLACK) {
|
|
|
|
|
|
|
|
ut_a(sibling->left->color == IB_RBT_RED);
|
|
|
|
|
|
|
|
sibling->color = IB_RBT_RED;
|
|
|
|
sibling->left->color = IB_RBT_BLACK;
|
|
|
|
|
|
|
|
rbt_rotate_right(nil, sibling);
|
|
|
|
|
|
|
|
sibling = parent->right;
|
|
|
|
ut_a(sibling != nil);
|
|
|
|
}
|
|
|
|
|
|
|
|
sibling->color = parent->color;
|
|
|
|
sibling->right->color = IB_RBT_BLACK;
|
|
|
|
|
|
|
|
parent->color = IB_RBT_BLACK;
|
|
|
|
|
|
|
|
rbt_rotate_left(nil, parent);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Rebalance the left sub-tree after deletion.
|
|
|
|
@return node to rebalance if more rebalancing required else NULL */
|
2008-02-27 10:28:20 +00:00
|
|
|
static
|
|
|
|
ib_rbt_node_t*
|
|
|
|
rbt_balance_left(
|
|
|
|
/*=============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_node_t* nil, /*!< in: rb tree nil node */
|
|
|
|
ib_rbt_node_t* parent, /*!< in: parent node */
|
|
|
|
ib_rbt_node_t* sibling) /*!< in: sibling node */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* node = NULL;
|
|
|
|
|
|
|
|
ut_a(sibling != nil);
|
|
|
|
|
|
|
|
/* Case 3. */
|
|
|
|
if (sibling->color == IB_RBT_RED) {
|
|
|
|
|
|
|
|
parent->color = IB_RBT_RED;
|
|
|
|
sibling->color = IB_RBT_BLACK;
|
|
|
|
|
|
|
|
rbt_rotate_right(nil, parent);
|
|
|
|
sibling = parent->left;
|
|
|
|
|
|
|
|
ut_a(sibling != nil);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Since this will violate case 3 because of the change above. */
|
|
|
|
if (sibling->right->color == IB_RBT_BLACK
|
|
|
|
&& sibling->left->color == IB_RBT_BLACK) {
|
|
|
|
|
|
|
|
node = parent; /* Parent needs to be rebalanced too. */
|
|
|
|
sibling->color = IB_RBT_RED;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
if (sibling->left->color == IB_RBT_BLACK) {
|
|
|
|
|
|
|
|
ut_a(sibling->right->color == IB_RBT_RED);
|
|
|
|
|
|
|
|
sibling->color = IB_RBT_RED;
|
|
|
|
sibling->right->color = IB_RBT_BLACK;
|
|
|
|
|
|
|
|
rbt_rotate_left(nil, sibling);
|
|
|
|
|
|
|
|
sibling = parent->left;
|
|
|
|
|
|
|
|
ut_a(sibling != nil);
|
|
|
|
}
|
|
|
|
|
|
|
|
sibling->color = parent->color;
|
|
|
|
sibling->left->color = IB_RBT_BLACK;
|
|
|
|
|
|
|
|
parent->color = IB_RBT_BLACK;
|
|
|
|
|
|
|
|
rbt_rotate_right(nil, parent);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Delete the node and rebalance the tree if necessary */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rbt_remove_node_and_rebalance(
|
|
|
|
/*==========================*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
ib_rbt_node_t* node) /*!< in: node to remove */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
/* Detach node and get the node that will be used
|
|
|
|
as rebalance start. */
|
|
|
|
ib_rbt_node_t* child = rbt_detach_node(tree, node);
|
|
|
|
|
|
|
|
if (node->color == IB_RBT_BLACK) {
|
|
|
|
ib_rbt_node_t* last = child;
|
|
|
|
|
|
|
|
ROOT(tree)->color = IB_RBT_RED;
|
|
|
|
|
|
|
|
while (child && child->color == IB_RBT_BLACK) {
|
|
|
|
ib_rbt_node_t* parent = child->parent;
|
|
|
|
|
|
|
|
/* Did the deletion cause an imbalance in the
|
|
|
|
parents left sub-tree. */
|
|
|
|
if (parent->left == child) {
|
|
|
|
|
|
|
|
child = rbt_balance_right(
|
|
|
|
tree->nil, parent, parent->right);
|
|
|
|
|
|
|
|
} else if (parent->right == child) {
|
|
|
|
|
|
|
|
child = rbt_balance_left(
|
|
|
|
tree->nil, parent, parent->left);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
ut_error;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (child) {
|
|
|
|
last = child;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ut_a(last);
|
|
|
|
|
|
|
|
last->color = IB_RBT_BLACK;
|
|
|
|
ROOT(tree)->color = IB_RBT_BLACK;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Note that we have removed a node from the tree. */
|
|
|
|
--tree->n_nodes;
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Recursively free the nodes. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rbt_free_node(
|
|
|
|
/*==========*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_node_t* node, /*!< in: node to free */
|
|
|
|
ib_rbt_node_t* nil) /*!< in: rb tree nil node */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
if (node != nil) {
|
|
|
|
rbt_free_node(node->left, nil);
|
|
|
|
rbt_free_node(node->right, nil);
|
|
|
|
|
|
|
|
ut_free(node);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Free all the nodes and free the tree. */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
void
|
|
|
|
rbt_free(
|
|
|
|
/*=====*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* tree) /*!< in: rb tree to free */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
rbt_free_node(tree->root, tree->nil);
|
|
|
|
ut_free(tree->nil);
|
|
|
|
ut_free(tree);
|
|
|
|
}
|
|
|
|
|
2012-08-01 17:27:34 +03:00
|
|
|
/**********************************************************************//**
|
|
|
|
Create an instance of a red black tree, whose comparison function takes
|
|
|
|
an argument
|
|
|
|
@return an empty rb tree */
|
|
|
|
UNIV_INTERN
|
|
|
|
ib_rbt_t*
|
|
|
|
rbt_create_arg_cmp(
|
|
|
|
/*===============*/
|
|
|
|
size_t sizeof_value, /*!< in: sizeof data item */
|
|
|
|
ib_rbt_arg_compare
|
|
|
|
compare, /*!< in: fn to compare items */
|
|
|
|
const void* cmp_arg) /*!< in: compare fn arg */
|
|
|
|
{
|
|
|
|
ib_rbt_t* tree;
|
|
|
|
|
|
|
|
ut_a(cmp_arg);
|
|
|
|
|
|
|
|
tree = rbt_create(sizeof_value, NULL);
|
|
|
|
tree->cmp_arg = cmp_arg;
|
|
|
|
tree->compare_with_arg = compare;
|
|
|
|
|
|
|
|
return(tree);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Create an instance of a red black tree.
|
|
|
|
@return an empty rb tree */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
ib_rbt_t*
|
|
|
|
rbt_create(
|
|
|
|
/*=======*/
|
2009-05-25 06:46:10 +00:00
|
|
|
size_t sizeof_value, /*!< in: sizeof data item */
|
|
|
|
ib_rbt_compare compare) /*!< in: fn to compare items */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_t* tree;
|
|
|
|
ib_rbt_node_t* node;
|
|
|
|
|
|
|
|
tree = (ib_rbt_t*) ut_malloc(sizeof(*tree));
|
|
|
|
memset(tree, 0, sizeof(*tree));
|
|
|
|
|
|
|
|
tree->sizeof_value = sizeof_value;
|
|
|
|
|
|
|
|
/* Create the sentinel (NIL) node. */
|
|
|
|
node = tree->nil = (ib_rbt_node_t*) ut_malloc(sizeof(*node));
|
|
|
|
memset(node, 0, sizeof(*node));
|
|
|
|
|
|
|
|
node->color = IB_RBT_BLACK;
|
|
|
|
node->parent = node->left = node->right = node;
|
|
|
|
|
|
|
|
/* Create the "fake" root, the real root node will be the
|
|
|
|
left child of this node. */
|
|
|
|
node = tree->root = (ib_rbt_node_t*) ut_malloc(sizeof(*node));
|
|
|
|
memset(node, 0, sizeof(*node));
|
|
|
|
|
|
|
|
node->color = IB_RBT_BLACK;
|
|
|
|
node->parent = node->left = node->right = tree->nil;
|
|
|
|
|
|
|
|
tree->compare = compare;
|
|
|
|
|
|
|
|
return(tree);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Generic insert of a value in the rb tree.
|
|
|
|
@return inserted node */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_insert(
|
|
|
|
/*=======*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const void* key, /*!< in: key for ordering */
|
|
|
|
const void* value) /*!< in: value of key, this value
|
2008-02-27 10:28:20 +00:00
|
|
|
is copied to the node */
|
|
|
|
{
|
|
|
|
ib_rbt_node_t* node;
|
|
|
|
|
|
|
|
/* Create the node that will hold the value data. */
|
|
|
|
node = (ib_rbt_node_t*) ut_malloc(SIZEOF_NODE(tree));
|
|
|
|
|
|
|
|
memcpy(node->value, value, tree->sizeof_value);
|
|
|
|
node->parent = node->left = node->right = tree->nil;
|
|
|
|
|
|
|
|
/* Insert in the tree in the usual way. */
|
|
|
|
rbt_tree_insert(tree, key, node);
|
|
|
|
rbt_balance_tree(tree, node);
|
|
|
|
|
|
|
|
++tree->n_nodes;
|
|
|
|
|
|
|
|
return(node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Add a new node to the tree, useful for data that is pre-sorted.
|
|
|
|
@return appended node */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_add_node(
|
|
|
|
/*=========*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
ib_rbt_bound_t* parent, /*!< in: bounds */
|
|
|
|
const void* value) /*!< in: this value is copied
|
2008-02-27 10:28:20 +00:00
|
|
|
to the node */
|
|
|
|
{
|
|
|
|
ib_rbt_node_t* node;
|
|
|
|
|
|
|
|
/* Create the node that will hold the value data */
|
|
|
|
node = (ib_rbt_node_t*) ut_malloc(SIZEOF_NODE(tree));
|
|
|
|
|
|
|
|
memcpy(node->value, value, tree->sizeof_value);
|
|
|
|
node->parent = node->left = node->right = tree->nil;
|
|
|
|
|
|
|
|
/* If tree is empty */
|
|
|
|
if (parent->last == NULL) {
|
|
|
|
parent->last = tree->root;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Append the node, the hope here is that the caller knows
|
|
|
|
what s/he is doing. */
|
|
|
|
rbt_tree_add_child(tree, parent, node);
|
|
|
|
rbt_balance_tree(tree, node);
|
|
|
|
|
|
|
|
++tree->n_nodes;
|
|
|
|
|
|
|
|
#if defined(IB_RBT_TESTING)
|
|
|
|
ut_a(rbt_validate(tree));
|
|
|
|
#endif
|
|
|
|
return(node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Find a matching node in the rb tree.
|
|
|
|
@return NULL if not found else the node where key was found */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_lookup(
|
|
|
|
/*=======*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const void* key) /*!< in: key to use for search */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
const ib_rbt_node_t* current = ROOT(tree);
|
|
|
|
|
|
|
|
/* Regular binary search. */
|
|
|
|
while (current != tree->nil) {
|
2012-08-01 17:27:34 +03:00
|
|
|
int result;
|
|
|
|
|
|
|
|
if (tree->cmp_arg) {
|
|
|
|
result = tree->compare_with_arg(
|
|
|
|
tree->cmp_arg, key, current->value);
|
|
|
|
} else {
|
|
|
|
result = tree->compare(key, current->value);
|
|
|
|
}
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
if (result < 0) {
|
|
|
|
current = current->left;
|
|
|
|
} else if (result > 0) {
|
|
|
|
current = current->right;
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return(current != tree->nil ? current : NULL);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Delete a node indentified by key.
|
|
|
|
@return TRUE if success FALSE if not found */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
ibool
|
|
|
|
rbt_delete(
|
|
|
|
/*=======*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const void* key) /*!< in: key to delete */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ibool deleted = FALSE;
|
|
|
|
ib_rbt_node_t* node = (ib_rbt_node_t*) rbt_lookup(tree, key);
|
|
|
|
|
|
|
|
if (node) {
|
|
|
|
rbt_remove_node_and_rebalance(tree, node);
|
|
|
|
|
|
|
|
ut_free(node);
|
|
|
|
deleted = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(deleted);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Remove a node from the rb tree, the node is not free'd, that is the
|
2009-05-25 06:46:10 +00:00
|
|
|
callers responsibility.
|
|
|
|
@return deleted node but without the const */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
ib_rbt_node_t*
|
|
|
|
rbt_remove_node(
|
|
|
|
/*============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const ib_rbt_node_t* const_node) /*!< in: node to delete, this
|
2008-02-27 10:28:20 +00:00
|
|
|
is a fudge and declared const
|
|
|
|
because the caller can access
|
|
|
|
only const nodes */
|
|
|
|
{
|
|
|
|
/* Cast away the const. */
|
|
|
|
rbt_remove_node_and_rebalance(tree, (ib_rbt_node_t*) const_node);
|
|
|
|
|
|
|
|
/* This is to make it easier to do something like this:
|
|
|
|
ut_free(rbt_remove_node(node));
|
|
|
|
*/
|
|
|
|
|
|
|
|
return((ib_rbt_node_t*) const_node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Find the node that has the lowest key that is >= key.
|
|
|
|
@return node satisfying the lower bound constraint or NULL */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_lower_bound(
|
|
|
|
/*============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const void* key) /*!< in: key to search */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* lb_node = NULL;
|
|
|
|
ib_rbt_node_t* current = ROOT(tree);
|
|
|
|
|
|
|
|
while (current != tree->nil) {
|
2012-08-01 17:27:34 +03:00
|
|
|
int result;
|
|
|
|
|
|
|
|
if (tree->cmp_arg) {
|
|
|
|
result = tree->compare_with_arg(
|
|
|
|
tree->cmp_arg, key, current->value);
|
|
|
|
} else {
|
|
|
|
result = tree->compare(key, current->value);
|
|
|
|
}
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
if (result > 0) {
|
|
|
|
|
|
|
|
current = current->right;
|
|
|
|
|
|
|
|
} else if (result < 0) {
|
|
|
|
|
|
|
|
lb_node = current;
|
|
|
|
current = current->left;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
lb_node = current;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return(lb_node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Find the node that has the greatest key that is <= key.
|
|
|
|
@return node satisfying the upper bound constraint or NULL */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_upper_bound(
|
|
|
|
/*============*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const void* key) /*!< in: key to search */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* ub_node = NULL;
|
|
|
|
ib_rbt_node_t* current = ROOT(tree);
|
|
|
|
|
|
|
|
while (current != tree->nil) {
|
2012-08-01 17:27:34 +03:00
|
|
|
int result;
|
|
|
|
|
|
|
|
if (tree->cmp_arg) {
|
|
|
|
result = tree->compare_with_arg(
|
|
|
|
tree->cmp_arg, key, current->value);
|
|
|
|
} else {
|
|
|
|
result = tree->compare(key, current->value);
|
|
|
|
}
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
if (result > 0) {
|
|
|
|
|
|
|
|
ub_node = current;
|
|
|
|
current = current->right;
|
|
|
|
|
|
|
|
} else if (result < 0) {
|
|
|
|
|
|
|
|
current = current->left;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
ub_node = current;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return(ub_node);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Find the node that has the greatest key that is <= key.
|
|
|
|
@return value of result */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
int
|
|
|
|
rbt_search(
|
|
|
|
/*=======*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
ib_rbt_bound_t* parent, /*!< in: search bounds */
|
|
|
|
const void* key) /*!< in: key to search */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* current = ROOT(tree);
|
|
|
|
|
|
|
|
/* Every thing is greater than the NULL root. */
|
|
|
|
parent->result = 1;
|
|
|
|
parent->last = NULL;
|
|
|
|
|
|
|
|
while (current != tree->nil) {
|
|
|
|
|
|
|
|
parent->last = current;
|
2012-08-01 17:27:34 +03:00
|
|
|
|
|
|
|
if (tree->cmp_arg) {
|
|
|
|
parent->result = tree->compare_with_arg(
|
|
|
|
tree->cmp_arg, key, current->value);
|
|
|
|
} else {
|
|
|
|
parent->result = tree->compare(key, current->value);
|
|
|
|
}
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
if (parent->result > 0) {
|
|
|
|
current = current->right;
|
|
|
|
} else if (parent->result < 0) {
|
|
|
|
current = current->left;
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return(parent->result);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Find the node that has the greatest key that is <= key. But use the
|
2009-05-25 06:46:10 +00:00
|
|
|
supplied comparison function.
|
|
|
|
@return value of result */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
int
|
|
|
|
rbt_search_cmp(
|
|
|
|
/*===========*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
ib_rbt_bound_t* parent, /*!< in: search bounds */
|
|
|
|
const void* key, /*!< in: key to search */
|
2012-08-01 17:27:34 +03:00
|
|
|
ib_rbt_compare compare, /*!< in: fn to compare items */
|
|
|
|
ib_rbt_arg_compare
|
|
|
|
arg_compare) /*!< in: fn to compare items
|
|
|
|
with argument */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* current = ROOT(tree);
|
|
|
|
|
|
|
|
/* Every thing is greater than the NULL root. */
|
|
|
|
parent->result = 1;
|
|
|
|
parent->last = NULL;
|
|
|
|
|
|
|
|
while (current != tree->nil) {
|
|
|
|
|
|
|
|
parent->last = current;
|
2012-08-01 17:27:34 +03:00
|
|
|
|
|
|
|
if (arg_compare) {
|
|
|
|
ut_ad(tree->cmp_arg);
|
|
|
|
parent->result = arg_compare(
|
|
|
|
tree->cmp_arg, key, current->value);
|
|
|
|
} else {
|
|
|
|
parent->result = compare(key, current->value);
|
|
|
|
}
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
if (parent->result > 0) {
|
|
|
|
current = current->right;
|
|
|
|
} else if (parent->result < 0) {
|
|
|
|
current = current->left;
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return(parent->result);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Return the left most node in the tree. */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_first(
|
|
|
|
/*======*/
|
|
|
|
/* out leftmost node or NULL */
|
|
|
|
const ib_rbt_t* tree) /* in: rb tree */
|
|
|
|
{
|
|
|
|
ib_rbt_node_t* first = NULL;
|
|
|
|
ib_rbt_node_t* current = ROOT(tree);
|
|
|
|
|
|
|
|
while (current != tree->nil) {
|
|
|
|
first = current;
|
|
|
|
current = current->left;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(first);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Return the right most node in the tree.
|
|
|
|
@return the rightmost node or NULL */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_last(
|
|
|
|
/*=====*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree) /*!< in: rb tree */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_node_t* last = NULL;
|
|
|
|
ib_rbt_node_t* current = ROOT(tree);
|
|
|
|
|
|
|
|
while (current != tree->nil) {
|
|
|
|
last = current;
|
|
|
|
current = current->right;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(last);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Return the next node.
|
|
|
|
@return node next from current */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_next(
|
|
|
|
/*=====*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const ib_rbt_node_t* current) /*!< in: current node */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
return(current ? rbt_find_successor(tree, current) : NULL);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Return the previous node.
|
|
|
|
@return node prev from current */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
const ib_rbt_node_t*
|
|
|
|
rbt_prev(
|
|
|
|
/*=====*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: rb tree */
|
|
|
|
const ib_rbt_node_t* current) /*!< in: current node */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
return(current ? rbt_find_predecessor(tree, current) : NULL);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Reset the tree. Delete all the nodes. */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
void
|
|
|
|
rbt_clear(
|
|
|
|
/*======*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* tree) /*!< in: rb tree */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
rbt_free_node(ROOT(tree), tree->nil);
|
|
|
|
|
|
|
|
tree->n_nodes = 0;
|
|
|
|
tree->root->left = tree->root->right = tree->nil;
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2009-05-25 06:46:10 +00:00
|
|
|
Merge the node from dst into src. Return the number of nodes merged.
|
|
|
|
@return no. of recs merged */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
ulint
|
|
|
|
rbt_merge_uniq(
|
|
|
|
/*===========*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* dst, /*!< in: dst rb tree */
|
|
|
|
const ib_rbt_t* src) /*!< in: src rb tree */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_bound_t parent;
|
|
|
|
ulint n_merged = 0;
|
|
|
|
const ib_rbt_node_t* src_node = rbt_first(src);
|
|
|
|
|
|
|
|
if (rbt_empty(src) || dst == src) {
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (/* No op */; src_node; src_node = rbt_next(src, src_node)) {
|
|
|
|
|
|
|
|
if (rbt_search(dst, &parent, src_node->value) != 0) {
|
|
|
|
rbt_add_node(dst, &parent, src_node->value);
|
|
|
|
++n_merged;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return(n_merged);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Merge the node from dst into src. Return the number of nodes merged.
|
|
|
|
Delete the nodes from src after copying node to dst. As a side effect
|
2009-05-25 06:46:10 +00:00
|
|
|
the duplicates will be left untouched in the src.
|
|
|
|
@return no. of recs merged */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
ulint
|
|
|
|
rbt_merge_uniq_destructive(
|
|
|
|
/*=======================*/
|
2009-05-25 06:46:10 +00:00
|
|
|
ib_rbt_t* dst, /*!< in: dst rb tree */
|
|
|
|
ib_rbt_t* src) /*!< in: src rb tree */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
ib_rbt_bound_t parent;
|
|
|
|
ib_rbt_node_t* src_node;
|
|
|
|
ulint old_size = rbt_size(dst);
|
|
|
|
|
|
|
|
if (rbt_empty(src) || dst == src) {
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (src_node = (ib_rbt_node_t*) rbt_first(src); src_node; /* */) {
|
|
|
|
ib_rbt_node_t* prev = src_node;
|
|
|
|
|
2012-08-01 17:27:34 +03:00
|
|
|
src_node = (ib_rbt_node_t*) rbt_next(src, prev);
|
2008-02-27 10:28:20 +00:00
|
|
|
|
|
|
|
/* Skip duplicates. */
|
|
|
|
if (rbt_search(dst, &parent, prev->value) != 0) {
|
|
|
|
|
|
|
|
/* Remove and reset the node but preserve
|
|
|
|
the node (data) value. */
|
|
|
|
rbt_remove_node_and_rebalance(src, prev);
|
|
|
|
|
|
|
|
/* The nil should be taken from the dst tree. */
|
|
|
|
prev->parent = prev->left = prev->right = dst->nil;
|
|
|
|
rbt_tree_add_child(dst, &parent, prev);
|
|
|
|
rbt_balance_tree(dst, prev);
|
|
|
|
|
|
|
|
++dst->n_nodes;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#if defined(IB_RBT_TESTING)
|
|
|
|
ut_a(rbt_validate(dst));
|
|
|
|
ut_a(rbt_validate(src));
|
|
|
|
#endif
|
|
|
|
return(rbt_size(dst) - old_size);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Check that every path from the root to the leaves has the same count and
|
2009-05-25 06:46:10 +00:00
|
|
|
the tree nodes are in order.
|
|
|
|
@return TRUE if OK FALSE otherwise */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
ibool
|
|
|
|
rbt_validate(
|
|
|
|
/*=========*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree) /*!< in: RB tree to validate */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
if (rbt_count_black_nodes(tree, ROOT(tree)) > 0) {
|
|
|
|
return(rbt_check_ordering(tree));
|
|
|
|
}
|
|
|
|
|
|
|
|
return(FALSE);
|
|
|
|
}
|
|
|
|
|
branches/innodb+
Merge r6915:6992 from branches/innodb+multipbp (i.e.: all the changes
made since it's creation)
This also reverts r6930 to branches/innodb+ because a different
solution for that issue is already present in innodb+multibp which
is being merged.
After this commit branches/innodb+multibp should be discarded
and this branch should become our main development tree.
------------------------------------------------------------------------
r6915 | sbains | 2010-03-31 07:33:43 +0300 (Wed, 31 Mar 2010) | 1 line
Changed paths:
A /branches/innodb+multibp (from /branches/innodb+:6914)
Creating a branch for the multiple buffer pool
------------------------------------------------------------------------
r6916 | sbains | 2010-03-31 08:21:00 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/btr/btr0btr.c
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/btr/btr0sea.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/buf/buf0rea.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/handler/i_s.cc
M /branches/innodb+multibp/ibuf/ibuf0ibuf.c
M /branches/innodb+multibp/include/buf0buddy.h
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/buf0lru.h
M /branches/innodb+multibp/include/buf0rea.h
M /branches/innodb+multibp/include/buf0types.h
M /branches/innodb+multibp/include/ibuf0ibuf.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/univ.i
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mem/mem0mem.c
M /branches/innodb+multibp/page/page0zip.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/trx/trx0trx.c
M /branches/innodb+multibp/trx/trx0undo.c
branches/innodb+multibp: Unable to crash it with UNIV_DEBUG and UNIV_SYNC_DEBUG
with both ibtests and Sysbench. The patch now needs a workout from Michael.
------------------------------------------------------------------------
r6917 | sbains | 2010-03-31 08:56:18 +0300 (Wed, 31 Mar 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix error introduced in r6916.
------------------------------------------------------------------------
r6923 | sbains | 2010-03-31 15:16:04 +0300 (Wed, 31 Mar 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/btr/btr0cur.c
M /branches/innodb+multibp/buf/buf0buddy.c
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/buf/buf0lru.c
M /branches/innodb+multibp/include/buf0buddy.ic
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/page/page0zip.c
branches/innodb+multibp: Fix whitespace issues. Add function
buf_pool_from_block(). Add some comments to parameters.
------------------------------------------------------------------------
r6932 | sbains | 2010-04-01 01:12:07 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/univ.i
branches/innodb+multibp: Remove bogus assertion. It's possible for the space
and offset of a page to be undefined during the lifecycle of a page. Remove
the debug #defines from univ.i.
------------------------------------------------------------------------
r6933 | sbains | 2010-04-01 01:22:40 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/srv/srv0start.c
branches/innodb+multibp: Fix whitespace issues.
------------------------------------------------------------------------
r6934 | sbains | 2010-04-01 01:53:18 +0300 (Thu, 01 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/CMakeLists.txt
M /branches/innodb+multibp/ChangeLog
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/handler/ha_innodb.cc
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/srv0srv.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/include/trx0purge.h
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/mysql-test/innodb_bug38231.test
A /branches/innodb+multibp/mysql-test/innodb_bug51920.result (from /branches/innodb+/mysql-test/innodb_bug51920.result:6931)
A /branches/innodb+multibp/mysql-test/innodb_bug51920.test (from /branches/innodb+/mysql-test/innodb_bug51920.test:6931)
M /branches/innodb+multibp/row/row0sel.c
M /branches/innodb+multibp/srv/srv0srv.c
M /branches/innodb+multibp/srv/srv0start.c
M /branches/innodb+multibp/sync/sync0sync.c
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: Merge revisions r6914:6931 from branches/innodb+
------------------------------------------------------------------------
r6935 | sbains | 2010-04-01 02:08:32 +0300 (Thu, 01 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/mtr/mtr0mtr.c
branches/innodb+multibp: Fix the debug assertions for flush order mutex. These
were missed in r6934.
------------------------------------------------------------------------
r6936 | sbains | 2010-04-01 02:46:52 +0300 (Thu, 01 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp: Because now we have multiple instances of a mutex at
the same level and these mutexes can be acquired simultaneously we can't
simply check for <= level. We need to check for <= level - 1.
------------------------------------------------------------------------
r6937 | sbains | 2010-04-01 04:40:17 +0300 (Thu, 01 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/trx/trx0purge.c
branches/innodb+multibp: We need to check if the history list len is > than
some threshold not that it is evenly divisible by the some batch size. While
running tests on dscczz01 I've observed that the purge thread can't keep up
with the generation of the UNDO log records because of the faster code.
------------------------------------------------------------------------
r6938 | irana | 2010-04-01 10:15:00 +0300 (Thu, 01 Apr 2010) | 7 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
M /branches/innodb+multibp/buf/buf0flu.c
M /branches/innodb+multibp/include/buf0buf.h
M /branches/innodb+multibp/include/buf0buf.ic
M /branches/innodb+multibp/include/buf0flu.h
M /branches/innodb+multibp/include/buf0flu.ic
M /branches/innodb+multibp/include/log0log.h
M /branches/innodb+multibp/include/sync0sync.h
M /branches/innodb+multibp/log/log0log.c
M /branches/innodb+multibp/log/log0recv.c
M /branches/innodb+multibp/mtr/mtr0mtr.c
M /branches/innodb+multibp/sync/sync0sync.c
branches/innodb+multibp
The buf_flush_order patch that was ported in from 1.1 won't work with
multiple buffer pools. This patch moves the mutex protecting order of
insertion in the flush list(s) to log_sys struct so that we can have
one global mutex protecting insertions into all flush list(s)
------------------------------------------------------------------------
r6941 | sbains | 2010-04-02 00:51:28 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp: We should get the record heap no to check recursively
only if we are checking a record lock. Prior to this fix we were doing it for
table locks as well, this is a bug.
------------------------------------------------------------------------
r6942 | csun | 2010-04-02 02:39:10 +0300 (Fri, 02 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/ha/ha0ha.c
branches/innodb+multibp: fix compiler errors on Windows.
Move ut_ad() to after declarations for C file.
------------------------------------------------------------------------
r6943 | sbains | 2010-04-03 05:14:25 +0300 (Sat, 03 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: Remove the code that created the fake buffer pool.
------------------------------------------------------------------------
r6945 | irana | 2010-04-05 23:35:29 +0300 (Mon, 05 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Revert r6941 as it does not resolve the issue and we have to take
back the whole fix for bug#49047
------------------------------------------------------------------------
r6946 | irana | 2010-04-05 23:50:42 +0300 (Mon, 05 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/include/ut0ut.h
M /branches/innodb+multibp/include/ut0ut.ic
M /branches/innodb+multibp/lock/lock0lock.c
branches/innodb+multibp
Merged revisions 6932:6944 from branches/innodb+
This solely includes the reversal of fix for bug#49047
------------------------------------------------------------------------
r6947 | sbains | 2010-04-06 01:33:46 +0300 (Tue, 06 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0lru.c
branches/innodb+multibp: Remove the log sys mutex acquisition when doing
buffer pool stat aggregation. A dirty read here should suffice.
------------------------------------------------------------------------
r6951 | irana | 2010-04-06 17:25:29 +0300 (Tue, 06 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+mbp
Initialize the buf_page_t::buf_pool pointer when the descriptor is
allocated using buf_buddy_alloc().
------------------------------------------------------------------------
r6954 | jyang | 2010-04-06 21:24:46 +0300 (Tue, 06 Apr 2010) | 4 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix a possible null pointer of index_mapping
in a race condition.
------------------------------------------------------------------------
r6958 | sbains | 2010-04-07 00:27:44 +0300 (Wed, 07 Apr 2010) | 3 lines
Changed paths:
M /branches/innodb+multibp/include/ut0mem.h
M /branches/innodb+multibp/ut/ut0mem.c
branches/innodb+multibp: Fix part of Bug#52546. We allow ut_free() to accept
a NULL pointer and treat it as a nop.
------------------------------------------------------------------------
r6961 | jyang | 2010-04-07 10:50:03 +0300 (Wed, 07 Apr 2010) | 9 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp: Fix for bug #52580: Crash in
ha_innobase::open on executing INSERT with concurrent ALTER TABLE.
Change in MySQL bug #51557 releases the mutex LOCK_open before
ha_innobase::open(), causing racing condition for index translation
table creation. Fix it by adding dict_sys mutex for the operation.
rb://283, approved by Marko.
------------------------------------------------------------------------
r6963 | irana | 2010-04-07 19:14:10 +0300 (Wed, 07 Apr 2010) | 15 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Force setting of buf_pool->LRU_old_ratio by calling
buf_LRU_old_ratio_update() with adjust set to TRUE. This will make sure
that we grab the buf_pool mutex and actually adjust the
buf_pool->LRU_old pointer instead of just updating the
buf_pool->LRU_old_ratio.
Note that after this change there is no call to
buf_LRU_old_ratio_update() with adjust set to FALSE and therefore
this parameter should be removed. I am keeping it for now to first
make sure that the fix does work.
Approved by: No one. Sunny agreed with my hypothesis of the problem.
------------------------------------------------------------------------
r6964 | irana | 2010-04-07 19:59:59 +0300 (Wed, 07 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/handler/ha_innodb.cc
branches/innodb+multibp
Remove a too strong assertion on behalf of Jimmy.
------------------------------------------------------------------------
r6971 | sbains | 2010-04-09 13:23:33 +0300 (Fri, 09 Apr 2010) | 6 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When getting the oldest (minimum) LSN value from all
the flush lists we need to acquire the flush list mutex. We were incorrectly
acquiring the buffer pool mutex.
This patch should fix a slew of bugs reported by Michael.
------------------------------------------------------------------------
r6972 | sbains | 2010-04-10 00:25:09 +0300 (Sat, 10 Apr 2010) | 5 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: We should not reset the lsn to 0 when we encounter
an empty flush list. Oldest LSN should be 0 only when all flush lists are empty.
e.g., without this fix if even one flush list was empty we would end up
breaking WAL.
------------------------------------------------------------------------
r6987 | sbains | 2010-04-14 00:14:13 +0300 (Wed, 14 Apr 2010) | 12 lines
Changed paths:
M /branches/innodb+multibp/buf/buf0buf.c
branches/innodb+multibp: When calculating the oldest_lsn we can have a
situation where we've iterated to say buffer pool 3 and another thread
adds two new dirty pages, the first to buffer pool 1 and the second to
buffer pool 4. Up to say buffer pool 3 the oldest_lsn was 0. Now, we will
end up returning the lsn at buffer pool 4 as the oldest LSN. We prevent this
by acquiring the flush order mutex.
One other future option is to calculate the min_lsn when flushing pages
from the list and maintaining a running total using atomics. That way
we can get rid of this function altogether. The atomics will only really
be required when we do parallel flushing.
------------------------------------------------------------------------
r6992 | sbains | 2010-04-14 02:45:59 +0300 (Wed, 14 Apr 2010) | 2 lines
Changed paths:
M /branches/innodb+multibp/include/ut0rbt.h
M /branches/innodb+multibp/ut/ut0rbt.c
branches/innodb+multibp: Fix copyright of the rbt code.
------------------------------------------------------------------------
2010-04-19 15:44:15 +00:00
|
|
|
/**********************************************************************//**
|
2008-02-27 10:28:20 +00:00
|
|
|
Iterate over the tree in depth first order. */
|
2008-09-18 08:44:32 +00:00
|
|
|
UNIV_INTERN
|
2008-02-27 10:28:20 +00:00
|
|
|
void
|
|
|
|
rbt_print(
|
|
|
|
/*======*/
|
2009-05-25 06:46:10 +00:00
|
|
|
const ib_rbt_t* tree, /*!< in: tree to traverse */
|
|
|
|
ib_rbt_print_node print) /*!< in: print function */
|
2008-02-27 10:28:20 +00:00
|
|
|
{
|
|
|
|
rbt_print_subtree(tree, ROOT(tree), print);
|
|
|
|
}
|