summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorunknown <tomas@whalegate.ndb.mysql.com>2007-06-18 23:55:48 +0200
committerunknown <tomas@whalegate.ndb.mysql.com>2007-06-18 23:55:48 +0200
commit511ef0cc292f63cc4ae6b7d3bb0fc9d909616187 (patch)
treee500ba55ca27491612d7641161fcff0540eb7fbd /storage
parent9d09201a1fc690bb3cdeeae99c3865b3e7b5e9bb (diff)
parentea8934c505e0d81b6713a4494e1be179a8f7113f (diff)
downloadmariadb-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.txt4
-rw-r--r--storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp13
-rw-r--r--storage/ndb/src/kernel/blocks/pgman.cpp18
-rw-r--r--storage/ndb/test/ndbapi/testSystemRestart.cpp48
-rw-r--r--storage/ndb/test/run-test/daily-basic-tests.txt4
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