Commit e9849563 authored by unknown's avatar unknown

ndb - bug#33793

  dont assume that page is "all empty"
  only as gci is acked, as release_gci might not have processed it yet


storage/ndb/src/kernel/blocks/ERROR_codes.txt:
  new error codes
storage/ndb/src/kernel/blocks/suma/Suma.cpp:
  dont assume that page is "all empty"
  only as gci is acked, as release_gci might not have processed it yet
storage/ndb/test/ndbapi/test_event.cpp:
  testcase
storage/ndb/test/run-test/daily-basic-tests.txt:
  testcase
parent d2f7c2f9
...@@ -11,7 +11,7 @@ Next CMVMI 9000 ...@@ -11,7 +11,7 @@ Next CMVMI 9000
Next BACKUP 10038 Next BACKUP 10038
Next DBUTIL 11002 Next DBUTIL 11002
Next DBTUX 12008 Next DBTUX 12008
Next SUMA 13034 Next SUMA 13036
TESTING NODE FAILURE, ARBITRATION TESTING NODE FAILURE, ARBITRATION
--------------------------------- ---------------------------------
......
...@@ -4852,6 +4852,21 @@ Suma::release_gci(Signal* signal, Uint32 buck, Uint32 gci) ...@@ -4852,6 +4852,21 @@ Suma::release_gci(Signal* signal, Uint32 buck, Uint32 gci)
if(gci >= head.m_max_gci) if(gci >= head.m_max_gci)
{ {
jam(); jam();
if (ERROR_INSERTED(13034))
{
jam();
SET_ERROR_INSERT_VALUE(13035);
return;
}
if (ERROR_INSERTED(13035))
{
CLEAR_ERROR_INSERT_VALUE;
NodeReceiverGroup rg(CMVMI, c_nodes_in_nodegroup_mask);
rg.m_nodes.clear(getOwnNodeId());
signal->theData[0] = 9999;
sendSignal(rg, GSN_NDB_TAMPER, signal, 1, JBA);
return;
}
head.m_page_pos = 0; head.m_page_pos = 0;
head.m_max_gci = gci; head.m_max_gci = gci;
head.m_last_gci = 0; head.m_last_gci = 0;
...@@ -4923,7 +4938,6 @@ Suma::start_resend(Signal* signal, Uint32 buck) ...@@ -4923,7 +4938,6 @@ Suma::start_resend(Signal* signal, Uint32 buck)
if(min > max) if(min > max)
{ {
ndbrequire(pos.m_page_pos <= 2);
ndbrequire(pos.m_page_id == bucket->m_buffer_tail); ndbrequire(pos.m_page_id == bucket->m_buffer_tail);
m_active_buckets.set(buck); m_active_buckets.set(buck);
m_gcp_complete_rep_count ++; m_gcp_complete_rep_count ++;
......
...@@ -1838,6 +1838,61 @@ runBug31701(NDBT_Context* ctx, NDBT_Step* step) ...@@ -1838,6 +1838,61 @@ runBug31701(NDBT_Context* ctx, NDBT_Step* step)
return NDBT_OK; return NDBT_OK;
} }
int
runBug33793(NDBT_Context* ctx, NDBT_Step* step)
{
int result = NDBT_OK;
int loops = ctx->getNumLoops();
NdbRestarter restarter;
if (restarter.getNumDbNodes() < 2){
ctx->stopTest();
return NDBT_OK;
}
// This should really wait for applier to start...10s is likely enough
NdbSleep_SecSleep(10);
while (loops-- && ctx->isTestStopped() == false)
{
int nodeId = restarter.getDbNodeId(rand() % restarter.getNumDbNodes());
int nodecount = 0;
int nodes[255];
printf("nodeid: %u : victims: ", nodeId);
for (int i = 0; i<restarter.getNumDbNodes(); i++)
{
int id = restarter.getDbNodeId(i);
if (id == nodeId)
continue;
if (restarter.getNodeGroup(id) == restarter.getNodeGroup(nodeId))
{
nodes[nodecount++] = id;
printf("%u ", id);
int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 };
if (restarter.dumpStateOneNode(id, val2, 2))
return NDBT_FAILED;
}
}
printf("\n"); fflush(stdout);
restarter.insertErrorInNode(nodeId, 13034);
if (restarter.waitNodesNoStart(nodes, nodecount))
return NDBT_FAILED;
if (restarter.startNodes(nodes, nodecount))
return NDBT_FAILED;
if (restarter.waitClusterStarted())
return NDBT_FAILED;
}
ctx->stopTest();
return NDBT_OK;
}
NDBT_TESTSUITE(test_event); NDBT_TESTSUITE(test_event);
TESTCASE("BasicEventOperation", TESTCASE("BasicEventOperation",
"Verify that we can listen to Events" "Verify that we can listen to Events"
...@@ -1975,6 +2030,12 @@ TESTCASE("Bug31701", ""){ ...@@ -1975,6 +2030,12 @@ TESTCASE("Bug31701", ""){
FINALIZER(runDropEvent); FINALIZER(runDropEvent);
FINALIZER(runDropShadowTable); FINALIZER(runDropShadowTable);
} }
TESTCASE("Bug33793", ""){
INITIALIZER(runCreateEvent);
STEP(runEventListenerUntilStopped);
STEP(runBug33793);
FINALIZER(runDropEvent);
}
NDBT_TESTSUITE_END(test_event); NDBT_TESTSUITE_END(test_event);
int main(int argc, const char** argv){ int main(int argc, const char** argv){
......
...@@ -942,3 +942,7 @@ max-time: 300 ...@@ -942,3 +942,7 @@ max-time: 300
cmd: test_event cmd: test_event
args: -n Bug31701 T1 args: -n Bug31701 T1
max-time: 300
cmd: test_event
args: -n Bug33793 T1
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment