diff options
author | unknown <tomas@whalegate.ndb.mysql.com> | 2007-06-18 23:55:48 +0200 |
---|---|---|
committer | unknown <tomas@whalegate.ndb.mysql.com> | 2007-06-18 23:55:48 +0200 |
commit | 511ef0cc292f63cc4ae6b7d3bb0fc9d909616187 (patch) | |
tree | e500ba55ca27491612d7641161fcff0540eb7fbd /storage | |
parent | 9d09201a1fc690bb3cdeeae99c3865b3e7b5e9bb (diff) | |
parent | ea8934c505e0d81b6713a4494e1be179a8f7113f (diff) | |
download | mariadb-git-511ef0cc292f63cc4ae6b7d3bb0fc9d909616187.tar.gz |
Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-rpl
mysql-test/extra/rpl_tests/rpl_log.test:
Auto merged
mysql-test/extra/rpl_tests/rpl_row_basic.test:
Auto merged
mysql-test/t/rpl_ndb_bank.test:
Auto merged
mysql-test/t/rpl_ndb_basic.test:
Auto merged
mysql-test/t/rpl_ndb_do_table.test:
Auto merged
mysql-test/t/rpl_ndb_idempotent.test:
Auto merged
mysql-test/t/rpl_ndb_stm_innodb.test:
Auto merged
mysql-test/t/rpl_ndb_sync.test:
Auto merged
sql/ha_ndbcluster_binlog.cc:
Auto merged
storage/ndb/test/run-test/daily-basic-tests.txt:
Auto merged
mysql-test/include/have_multi_ndb.inc:
manual merge
mysql-test/include/have_ndb.inc:
manual merge
mysql-test/t/rpl_ndb_commit_afterflush.test:
manual merge
mysql-test/t/rpl_ndb_ddl.test:
manual merge
mysql-test/t/rpl_ndb_innodb_trans.test:
manual merge
Diffstat (limited to 'storage')
-rw-r--r-- | storage/ndb/src/kernel/blocks/ERROR_codes.txt | 4 | ||||
-rw-r--r-- | storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp | 13 | ||||
-rw-r--r-- | storage/ndb/src/kernel/blocks/pgman.cpp | 18 | ||||
-rw-r--r-- | storage/ndb/test/ndbapi/testSystemRestart.cpp | 48 | ||||
-rw-r--r-- | storage/ndb/test/run-test/daily-basic-tests.txt | 4 |
5 files changed, 86 insertions, 1 deletions
diff --git a/storage/ndb/src/kernel/blocks/ERROR_codes.txt b/storage/ndb/src/kernel/blocks/ERROR_codes.txt index 67eb89f850f..17d6c9b0867 100644 --- a/storage/ndb/src/kernel/blocks/ERROR_codes.txt +++ b/storage/ndb/src/kernel/blocks/ERROR_codes.txt @@ -5,7 +5,7 @@ Next DBACC 3002 Next DBTUP 4029 Next DBLQH 5045 Next DBDICT 6007 -Next DBDIH 7183 +Next DBDIH 7184 Next DBTC 8040 Next CMVMI 9000 Next BACKUP 10038 @@ -75,6 +75,8 @@ Delay GCP_SAVEREQ by 10 secs 7180: Crash master during master-take-over in execMASTER_LCPCONF +7183: Crash when receiving COPY_GCIREQ + ERROR CODES FOR TESTING NODE FAILURE, LOCAL CHECKPOINT HANDLING: ----------------------------------------------------------------- diff --git a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp index bc14eec1f98..4a103a76323 100644 --- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp @@ -747,6 +747,8 @@ done: } ndbrequire(ok); + CRASH_INSERTION(7183); + /* ----------------------------------------------------------------------- */ /* WE START BY TRYING TO OPEN THE FIRST RESTORABLE GCI FILE. */ /* ----------------------------------------------------------------------- */ @@ -1230,6 +1232,17 @@ void Dbdih::execDIH_RESTARTREQ(Signal* signal) Uint32 ng = Sysfile::getNodeGroup(i, SYSFILE->nodeGroups); ndbrequire(ng < MAX_NDB_NODES); Uint32 gci = node_gcis[i]; + if (gci < SYSFILE->lastCompletedGCI[i]) + { + jam(); + /** + * Handle case, where *I* know that node complete GCI + * but node does not...bug#29167 + * i.e node died before it wrote own sysfile + */ + gci = SYSFILE->lastCompletedGCI[i]; + } + if (gci > node_group_gcis[ng]) { jam(); diff --git a/storage/ndb/src/kernel/blocks/pgman.cpp b/storage/ndb/src/kernel/blocks/pgman.cpp index 006673cf011..5e40480f84f 100644 --- a/storage/ndb/src/kernel/blocks/pgman.cpp +++ b/storage/ndb/src/kernel/blocks/pgman.cpp @@ -1869,6 +1869,11 @@ Pgman::free_data_file(Uint32 file_no, Uint32 fd) int Pgman::drop_page(Ptr<Page_entry> ptr) { +#ifdef VM_TRACE + debugOut << "PGMAN: drop_page" << endl; + debugOut << "PGMAN: " << ptr << endl; +#endif + Page_stack& pl_stack = m_page_stack; Page_queue& pl_queue = m_page_queue; @@ -1881,8 +1886,14 @@ Pgman::drop_page(Ptr<Page_entry> ptr) if (state & Page_entry::ONSTACK) { jam(); + bool at_bottom = ! pl_stack.hasPrev(ptr); pl_stack.remove(ptr); state &= ~ Page_entry::ONSTACK; + if (at_bottom && (state & Page_entry::HOT)) + { + jam(); + lirs_stack_prune(); + } } if (state & Page_entry::ONQUEUE) @@ -2297,6 +2308,13 @@ operator<<(NdbOut& out, Ptr<Pgman::Page_entry> ptr) out << " busy_count=" << dec << pe.m_busy_count; #ifdef VM_TRACE { + Pgman::Page_stack& pl_stack = pe.m_this->m_page_stack; + if (! pl_stack.hasNext(ptr)) + out << " top"; + if (! pl_stack.hasPrev(ptr)) + out << " bottom"; + } + { Pgman::Local_page_request_list req_list(ptr.p->m_this->m_page_request_pool, ptr.p->m_requests); if (! req_list.isEmpty()) diff --git a/storage/ndb/test/ndbapi/testSystemRestart.cpp b/storage/ndb/test/ndbapi/testSystemRestart.cpp index bd5cd3dd3c8..8fada42697d 100644 --- a/storage/ndb/test/ndbapi/testSystemRestart.cpp +++ b/storage/ndb/test/ndbapi/testSystemRestart.cpp @@ -1219,6 +1219,48 @@ runBug24664(NDBT_Context* ctx, NDBT_Step* step) return result; } +int +runBug29167(NDBT_Context* ctx, NDBT_Step* step) +{ + int result = NDBT_OK; + NdbRestarter restarter; + Ndb* pNdb = GETNDB(step); + const Uint32 nodeCount = restarter.getNumDbNodes(); + + if (nodeCount < 2) + return NDBT_OK; + + int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_CHECKPOINT, 0 }; + NdbLogEventHandle handle = + ndb_mgm_create_logevent_handle(restarter.handle, filter); + + struct ndb_logevent event; + int master = restarter.getMasterNodeId(); + do { + int node1 = restarter.getRandomNodeOtherNodeGroup(master, rand()); + int node2 = restarter.getRandomNodeSameNodeGroup(node1, rand()); + + int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 }; + restarter.dumpStateAllNodes(val2, 2); + int dump[] = { DumpStateOrd::DihSetTimeBetweenGcp, 30000 }; + restarter.dumpStateAllNodes(dump, 2); + + while(ndb_logevent_get_next(handle, &event, 0) >= 0 && + event.type != NDB_LE_GlobalCheckpointCompleted); + + CHECK(restarter.insertErrorInAllNodes(932) == 0); + + CHECK(restarter.insertErrorInNode(node1, 7183) == 0); + CHECK(restarter.insertErrorInNode(node2, 7183) == 0); + + CHECK(restarter.waitClusterNoStart() == 0); + restarter.startAll(); + CHECK(restarter.waitClusterStarted() == 0); + } while(false); + + return result; +} + NDBT_TESTSUITE(testSystemRestart); TESTCASE("SR1", "Basic system restart test. Focus on testing restart from REDO log.\n" @@ -1399,6 +1441,12 @@ TESTCASE("Bug24664", STEP(runBug24664); FINALIZER(runClearTable); } +TESTCASE("Bug29167", "") +{ + INITIALIZER(runWaitStarted); + STEP(runBug29167); +} + NDBT_TESTSUITE_END(testSystemRestart); int main(int argc, const char** argv){ diff --git a/storage/ndb/test/run-test/daily-basic-tests.txt b/storage/ndb/test/run-test/daily-basic-tests.txt index 0e1cdfc647e..2a52c2cbd59 100644 --- a/storage/ndb/test/run-test/daily-basic-tests.txt +++ b/storage/ndb/test/run-test/daily-basic-tests.txt @@ -485,6 +485,10 @@ max-time: 1000 cmd: testNodeRestart args: -n Bug27003 T1 +max-time: 300 +cmd: testSystemRestart +args: -n Bug29167 T1 + max-time: 1000 cmd: testNodeRestart args: -n Bug27283 T1 |