Below is the list of changes that have just been committed into a local
5.1 repository of jonas. When jonas does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-09-04 22:58:21+02:00, jonas@stripped +5 -0
ndb - micro
fix auto discovered bugs
storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp@stripped, 2007-09-04 22:58:18+02:00, jonas@stripped +2 -2
renumber for consistency
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp@stripped, 2007-09-04 22:58:18+02:00, jonas@stripped +11 -37
1) Make sure correct GCI is stored on disk!!
2) increment next gci on _start_ of GCP save
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp@stripped, 2007-09-04 22:58:18+02:00, jonas@stripped +12 -0
add simple gcp monitor
storage/ndb/src/kernel/blocks/suma/Suma.cpp@stripped, 2007-09-04 22:58:18+02:00, jonas@stripped +7 -7
Make sure never to compare gci using == as they are not always in sequence.
Use > instead
storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp@stripped, 2007-09-04 22:58:18+02:00, jonas@stripped +1 -0
clear for consistency
diff -Nrup a/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp b/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
--- a/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp 2007-08-31 13:27:35 +02:00
+++ b/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp 2007-09-04 22:58:18 +02:00
@@ -1232,8 +1232,8 @@ private:
enum State {
GCP_SAVE_IDLE = 0, // Idle
GCP_SAVE_REQ = 1, // REQ received
- GCP_SAVE_CONF = 3, // REF/CONF sent
- GCP_SAVE_COPY_GCI = 4
+ GCP_SAVE_CONF = 2, // REF/CONF sent
+ GCP_SAVE_COPY_GCI = 3
} m_state, m_master_state;
} m_gcp_save;
diff -Nrup a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
--- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2007-09-04 13:26:29 +02:00
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2007-09-04 22:58:18 +02:00
@@ -5329,6 +5329,7 @@ void Dbdih::execMASTER_GCPREQ(Signal* si
saveState = MasterGCPConf::GCP_SAVE_CONF;
break;
case GcpSave::GCP_SAVE_COPY_GCI:
+ jam();
saveState = MasterGCPConf::GCP_SAVE_COPY_GCI;
break;
}
@@ -5438,46 +5439,30 @@ void Dbdih::execMASTER_GCPCONF(Signal* s
switch(saveState){
case MasterGCPConf::GCP_SAVE_IDLE:
jam();
- ok = true;
break;
case MasterGCPConf::GCP_SAVE_REQ:
jam();
- ok = true;
if (m_gcp_save.m_master_state == GcpSave::GCP_SAVE_IDLE)
{
- m_gcp_save.m_gci = saveGCI;
+ jam();
m_gcp_save.m_master_state = GcpSave::GCP_SAVE_REQ;
}
- else
- {
- ndbrequire(m_gcp_save.m_gci == saveGCI);
- }
break;
case MasterGCPConf::GCP_SAVE_CONF:
jam();
- ok = true;
if (m_gcp_save.m_master_state == GcpSave::GCP_SAVE_IDLE)
{
- m_gcp_save.m_gci = saveGCI;
- m_gcp_save.m_master_state = GcpSave::GCP_SAVE_CONF;
- }
- else if (m_gcp_save.m_master_state == GcpSave::GCP_SAVE_REQ)
- {
- ndbrequire(m_gcp_save.m_gci = saveGCI);
- }
- else if (m_gcp_save.m_master_state == GcpSave::GCP_SAVE_COPY_GCI)
- {
- ndbrequire(m_gcp_save.m_gci = saveGCI);
+ jam();
+ m_gcp_save.m_master_state = GcpSave::GCP_SAVE_REQ;
}
break;
case MasterGCPConf::GCP_SAVE_COPY_GCI:
jam();
- ok= true;
if (m_gcp_save.m_master_state == GcpSave::GCP_SAVE_IDLE)
{
- m_gcp_save.m_gci = saveGCI;
+ jam();
+ m_gcp_save.m_master_state = GcpSave::GCP_SAVE_COPY_GCI;
}
- m_gcp_save.m_master_state = GcpSave::GCP_SAVE_COPY_GCI;
break;
#ifndef VM_TRACE
default:
@@ -5485,7 +5470,7 @@ void Dbdih::execMASTER_GCPCONF(Signal* s
ndbrequire(false);
#endif
}
- ndbassert(ok); // Unhandled case
+ //ndbassert(ok); // Unhandled case
receiveLoopMacro(MASTER_GCPREQ, senderNodePtr.i);
/*-------------------------------------------------------------------------*/
@@ -8212,8 +8197,11 @@ void Dbdih::execGCP_NODEFINISH(Signal* s
* Start a save
*/
m_gcp_save.m_master_state = GcpSave::GCP_SAVE_REQ;
- m_gcp_save.m_gci = m_micro_gcp.m_old_gci >> 32;
+ m_gcp_save.m_gci = (m_micro_gcp.m_old_gci >> 32) - 1;
m_gcp_save.m_start_time = now;
+
+ m_micro_gcp.m_next_gci = Uint32(m_micro_gcp.m_next_gci >> 32) + 1;
+ m_micro_gcp.m_next_gci <<= 32;
#ifdef ERROR_INSERT
if (ERROR_INSERTED(7188))
@@ -8573,8 +8561,6 @@ Dbdih::execSUB_GCP_COMPLETE_REP(Signal*
ndbrequire(m_micro_gcp.m_master_state == MicroGcp::M_GCP_IDLE);
}
- printf("execSUB_GCP_COMPLETE_REP(%u/%u)", rep->gci_hi, rep->gci_lo);
-
Uint32 masterRef = rep->senderRef;
if (m_micro_gcp.m_state == MicroGcp::M_GCP_IDLE)
{
@@ -8589,7 +8575,6 @@ Dbdih::execSUB_GCP_COMPLETE_REP(Signal*
return;
}
- ndbout_c(" - forward to suma");
ndbrequire(m_micro_gcp.m_state == MicroGcp::M_GCP_COMMITTED);
m_micro_gcp.m_state = MicroGcp::M_GCP_IDLE;
EXECUTE_DIRECT(SUMA, GSN_SUB_GCP_COMPLETE_REP, signal, signal->length());
@@ -8901,17 +8886,6 @@ void Dbdih::execCOPY_GCICONF(Signal* sig
sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
c_newest_restorable_gci = m_gcp_save.m_gci;
-
- Uint64 next = m_micro_gcp.m_next_gci;
- printf("execCOPY_GCICONF: %u micros: %d next:",
- m_gcp_save.m_gci, Uint32(next));
- ndbassert(Uint32(next) != 0);
- next &= ~Uint64(0xFFFFFFFF);
- next += Uint64(1) << 32;
- m_micro_gcp.m_next_gci = next;
- ndbout_c(" %u/%u curr: %u/%u", Uint32(next >> 32), Uint32(next),
- Uint32(m_micro_gcp.m_current_gci >> 32),
- Uint32(m_micro_gcp.m_current_gci));
if (m_micro_gcp.m_enabled == false)
{
diff -Nrup a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2007-08-30 08:22:53 +02:00
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2007-09-04 22:58:18 +02:00
@@ -12125,6 +12125,11 @@ void Dblqh::setLogTail(Signal* signal, U
/* *************** */
/* GCP_SAVEREQ > */
/* *************** */
+
+#if defined VM_TRACE || defined ERROR_INSERT
+static Uint32 m_gcp_monitor = 0;
+#endif
+
void Dblqh::execGCP_SAVEREQ(Signal* signal)
{
jamEntry();
@@ -12143,6 +12148,13 @@ void Dblqh::execGCP_SAVEREQ(Signal* sign
const Uint32 dihPtr = saveReq->dihPtr;
const Uint32 gci = saveReq->gci;
+#if defined VM_TRACE || defined ERROR_INSERT
+ ndbrequire(m_gcp_monitor == 0 ||
+ (m_gcp_monitor == gci) ||
+ (m_gcp_monitor + 1) == gci);
+ m_gcp_monitor = gci;
+#endif
+
if(getNodeState().startLevel >= NodeState::SL_STOPPING_4){
GCPSaveRef * const saveRef = (GCPSaveRef*)&signal->theData[0];
saveRef->dihPtr = dihPtr;
diff -Nrup a/storage/ndb/src/kernel/blocks/suma/Suma.cpp b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
--- a/storage/ndb/src/kernel/blocks/suma/Suma.cpp 2007-09-04 13:26:29 +02:00
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.cpp 2007-09-04 22:58:18 +02:00
@@ -3366,7 +3366,7 @@ Suma::check_switchover(Uint32 bucket, Ui
const Uint32 send_mask = (Bucket::BUCKET_STARTING | Bucket::BUCKET_TAKEOVER);
bool send = c_buckets[bucket].m_state & send_mask;
ndbassert(m_switchover_buckets.get(bucket));
- if(unlikely(gci >= c_buckets[bucket].m_switchover_gci))
+ if(unlikely(gci > c_buckets[bucket].m_switchover_gci))
{
return send;
}
@@ -3546,7 +3546,7 @@ Suma::execSUB_GCP_COMPLETE_REP(Signal* s
Uint32 i = m_switchover_buckets.find(0);
for(; i != Bucket_mask::NotFound; i = m_switchover_buckets.find(i + 1))
{
- if(c_buckets[i].m_switchover_gci == gci)
+ if(gci > c_buckets[i].m_switchover_gci)
{
Uint32 state = c_buckets[i].m_state;
m_switchover_buckets.clear(i);
@@ -3656,7 +3656,7 @@ Suma::execSUB_GCP_COMPLETE_REP(Signal* s
}
}
- if(gci == m_out_of_buffer_gci)
+ if(m_out_of_buffer_gci && gci > m_out_of_buffer_gci)
{
infoEvent("Reenable event buffer");
m_out_of_buffer_gci = 0;
@@ -4542,7 +4542,7 @@ Suma::execSUMA_HANDOVER_REQ(Signal* sign
tmp.set(i);
m_active_buckets.clear(i);
m_switchover_buckets.set(i);
- c_buckets[i].m_switchover_gci = Uint64(start_gci) << 32;
+ c_buckets[i].m_switchover_gci = (Uint64(start_gci) << 32) - 1;
c_buckets[i].m_state |= Bucket::BUCKET_HANDOVER;
c_buckets[i].m_switchover_node = nodeId;
ndbout_c("prepare to handover bucket: %d", i);
@@ -4592,7 +4592,7 @@ Suma::execSUMA_HANDOVER_CONF(Signal* sig
{
ndbrequire(get_responsible_node(i) == getOwnNodeId());
// We should run this bucket, but _nodeId_ is
- c_buckets[i].m_switchover_gci = Uint64(gci) << 32;
+ c_buckets[i].m_switchover_gci = (Uint64(gci) << 32) - 1;
c_buckets[i].m_state |= Bucket::BUCKET_STARTING;
}
}
@@ -4753,7 +4753,7 @@ Suma::out_of_buffer_release(Signal* sign
* prepare for inclusion
*/
m_out_of_buffer_gci = m_max_seen_gci > m_last_complete_gci
- ? m_max_seen_gci + 1 : m_last_complete_gci + 1;
+ ? m_max_seen_gci : m_last_complete_gci;
}
Uint32
@@ -4931,7 +4931,7 @@ Suma::start_resend(Signal* signal, Uint3
g_cnt = 0;
bucket->m_state |= (Bucket::BUCKET_TAKEOVER | Bucket::BUCKET_RESEND);
bucket->m_switchover_node = get_responsible_node(buck);
- bucket->m_switchover_gci = max + 1;
+ bucket->m_switchover_gci = max;
m_switchover_buckets.set(buck);
diff -Nrup a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
--- a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp 2007-09-04 13:26:29 +02:00
+++ b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp 2007-09-04 22:58:18 +02:00
@@ -1132,6 +1132,7 @@ NdbEventBuffer::init_gci_containers()
m_active_gci.fill(3, g_empty_gci_container);
m_min_gci_index = m_max_gci_index = 1;
Uint64 gci = 0;
+ m_known_gci.clear();
m_known_gci.fill(7, gci);
}
| Thread |
|---|
| • bk commit into 5.1 tree (jonas:1.2583) | jonas | 4 Sep |