Skip to content

Commit 16e5a85

Browse files
author
Maitrayi Sabaratnam
committed
Merge 7.1->7.2
2 parents 76c9dbd + 766d7a6 commit 16e5a85

File tree

8 files changed

+227
-3
lines changed

8 files changed

+227
-3
lines changed

scripts/mysql_system_tables.sql

+44
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,21 @@ PREPARE stmt FROM @str;
602602
EXECUTE stmt;
603603
DROP PREPARE stmt;
604604

605+
SET @str=IF(@have_ndbinfo,'DROP VIEW IF EXISTS `ndbinfo`.`membership`','SET @dummy = 0');
606+
PREPARE stmt FROM @str;
607+
EXECUTE stmt;
608+
DROP PREPARE stmt;
609+
610+
SET @str=IF(@have_ndbinfo,'DROP VIEW IF EXISTS `ndbinfo`.`arbitrator_validity_detail`','SET @dummy = 0');
611+
PREPARE stmt FROM @str;
612+
EXECUTE stmt;
613+
DROP PREPARE stmt;
614+
615+
SET @str=IF(@have_ndbinfo,'DROP VIEW IF EXISTS `ndbinfo`.`arbitrator_validity_summary`','SET @dummy = 0');
616+
PREPARE stmt FROM @str;
617+
EXECUTE stmt;
618+
DROP PREPARE stmt;
619+
605620
# Drop any old lookup tables in ndbinfo
606621
SET @str=IF(@have_ndbinfo,'DROP TABLE IF EXISTS `ndbinfo`.`blocks`','SET @dummy = 0');
607622
PREPARE stmt FROM @str;
@@ -788,6 +803,17 @@ PREPARE stmt FROM @str;
788803
EXECUTE stmt;
789804
DROP PREPARE stmt;
790805

806+
# ndbinfo.ndb$membership
807+
SET @str=IF(@have_ndbinfo,'DROP TABLE IF EXISTS `ndbinfo`.`ndb$membership`','SET @dummy = 0');
808+
PREPARE stmt FROM @str;
809+
EXECUTE stmt;
810+
DROP PREPARE stmt;
811+
812+
SET @str=IF(@have_ndbinfo,'CREATE TABLE `ndbinfo`.`ndb$membership` (`node_id` INT UNSIGNED COMMENT "node id",`group_id` INT UNSIGNED COMMENT "node group id",`left_node` INT UNSIGNED COMMENT "Left node in heart beat chain",`right_node` INT UNSIGNED COMMENT "Right node in heart beat chain",`president` INT UNSIGNED COMMENT "President nodeid",`successor` INT UNSIGNED COMMENT "President successor",`dynamic_id` INT UNSIGNED COMMENT "President, Configured_heartbeat order",`arbitrator` INT UNSIGNED COMMENT "Arbitrator nodeid",`arb_ticket` VARCHAR(512) COMMENT "Arbitrator ticket",`arb_state` INT UNSIGNED COMMENT "Arbitrator state",`arb_connected` INT UNSIGNED COMMENT "Arbitrator connected",`conn_rank1_arbs` VARCHAR(512) COMMENT "Connected rank 1 arbitrators",`conn_rank2_arbs` VARCHAR(512) COMMENT "Connected rank 2 arbitrators") COMMENT="membership" ENGINE=NDBINFO','SET @dummy = 0');
813+
PREPARE stmt FROM @str;
814+
EXECUTE stmt;
815+
DROP PREPARE stmt;
816+
791817
# ndbinfo.blocks
792818
SET @str=IF(@have_ndbinfo,'CREATE TABLE `ndbinfo`.`blocks` (block_number INT UNSIGNED PRIMARY KEY, block_name VARCHAR(512))','SET @dummy = 0');
793819
PREPARE stmt FROM @str;
@@ -922,6 +948,24 @@ PREPARE stmt FROM @str;
922948
EXECUTE stmt;
923949
DROP PREPARE stmt;
924950

951+
# ndbinfo.membership
952+
SET @str=IF(@have_ndbinfo,'CREATE OR REPLACE DEFINER=`root@localhost` SQL SECURITY INVOKER VIEW `ndbinfo`.`membership` AS SELECT node_id, group_id, left_node, right_node, president, successor, dynamic_id & 0xFFFF AS succession_order, dynamic_id >> 16 AS Conf_HB_order, arbitrator, arb_ticket, CASE arb_state WHEN 0 THEN "ARBIT_NULL" WHEN 1 THEN "ARBIT_INIT" WHEN 2 THEN "ARBIT_FIND" WHEN 3 THEN "ARBIT_PREP1" WHEN 4 THEN "ARBIT_PREP2" WHEN 5 THEN "ARBIT_START" WHEN 6 THEN "ARBIT_RUN" WHEN 7 THEN "ARBIT_CHOOSE" WHEN 8 THEN "ARBIT_CRASH" ELSE "UNKNOWN" END AS arb_state, CASE arb_connected WHEN 1 THEN "Yes" ELSE "No" END AS arb_connected, conn_rank1_arbs AS connected_rank1_arbs, conn_rank2_arbs AS connected_rank2_arbs FROM `ndbinfo`.`ndb$membership`','SET @dummy = 0');
953+
PREPARE stmt FROM @str;
954+
EXECUTE stmt;
955+
DROP PREPARE stmt;
956+
957+
# ndbinfo.arbitrator_validity_detail
958+
SET @str=IF(@have_ndbinfo,'CREATE OR REPLACE DEFINER=`root@localhost` SQL SECURITY INVOKER VIEW `ndbinfo`.`arbitrator_validity_detail` AS SELECT node_id, arbitrator, arb_ticket, CASE arb_connected WHEN 1 THEN "Yes" ELSE "No" END AS arb_connected, CASE arb_state WHEN 0 THEN "ARBIT_NULL" WHEN 1 THEN "ARBIT_INIT" WHEN 2 THEN "ARBIT_FIND" WHEN 3 THEN "ARBIT_PREP1" WHEN 4 THEN "ARBIT_PREP2" WHEN 5 THEN "ARBIT_START" WHEN 6 THEN "ARBIT_RUN" WHEN 7 THEN "ARBIT_CHOOSE" WHEN 8 THEN "ARBIT_CRASH" ELSE "UNKNOWN" END AS arb_state FROM `ndbinfo`.`ndb$membership` ORDER BY arbitrator, arb_connected DESC','SET @dummy = 0');
959+
PREPARE stmt FROM @str;
960+
EXECUTE stmt;
961+
DROP PREPARE stmt;
962+
963+
# ndbinfo.arbitrator_validity_summary
964+
SET @str=IF(@have_ndbinfo,'CREATE OR REPLACE DEFINER=`root@localhost` SQL SECURITY INVOKER VIEW `ndbinfo`.`arbitrator_validity_summary` AS SELECT arbitrator, arb_ticket, CASE arb_connected WHEN 1 THEN "Yes" ELSE "No" END AS arb_connected, count(*) as consensus_count FROM `ndbinfo`.`ndb$membership` GROUP BY arbitrator, arb_ticket, arb_connected','SET @dummy = 0');
965+
PREPARE stmt FROM @str;
966+
EXECUTE stmt;
967+
DROP PREPARE stmt;
968+
925969
# Finally turn off offline mode
926970
SET @str=IF(@have_ndbinfo,'SET @@global.ndbinfo_offline=FALSE','SET @dummy = 0');
927971
PREPARE stmt FROM @str;

storage/ndb/src/kernel/blocks/dbinfo/Dbinfo.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
Uint32 dbinfo_blocks[] = { DBACC, DBTUP, BACKUP, DBTC, SUMA, DBUTIL,
3131
TRIX, DBTUX, DBDICT, CMVMI, DBLQH, LGMAN,
32-
PGMAN, DBSPJ, THRMAN, TRPMAN, 0};
32+
PGMAN, DBSPJ, THRMAN, TRPMAN, QMGR, 0};
3333

3434
Dbinfo::Dbinfo(Block_context& ctx) :
3535
SimulatedBlock(DBINFO, ctx)

storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,9 @@ class Qmgr : public SimulatedBlock {
364364
void execNODE_PINGREQ(Signal* signal);
365365
void execNODE_PINGCONF(Signal* signal);
366366

367+
// Ndbinfo signal
368+
void execDBINFO_SCANREQ(Signal *signal);
369+
367370
// Statement blocks
368371
void check_readnodes_reply(Signal* signal, Uint32 nodeId, Uint32 gsn);
369372
Uint32 check_startup(Signal* signal);

storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,9 @@ Qmgr::Qmgr(Block_context& ctx)
208208
addRecSignal(GSN_NODE_PING_REQ, &Qmgr::execNODE_PINGREQ);
209209
addRecSignal(GSN_NODE_PING_CONF, &Qmgr::execNODE_PINGCONF);
210210

211+
// Ndbinfo signal
212+
addRecSignal(GSN_DBINFO_SCANREQ, &Qmgr::execDBINFO_SCANREQ);
213+
211214
initData();
212215
}//Qmgr::Qmgr()
213216

storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp

+94
Original file line numberDiff line numberDiff line change
@@ -7159,3 +7159,97 @@ Qmgr::handleFailFromSuspect(Signal* signal,
71597159

71607160
failReportLab(signal, sourceNode, (FailRep::FailCause) reason, getOwnNodeId());
71617161
}
7162+
7163+
void
7164+
Qmgr::execDBINFO_SCANREQ(Signal *signal)
7165+
{
7166+
DbinfoScanReq req= *(DbinfoScanReq*)signal->theData;
7167+
Ndbinfo::Ratelimit rl;
7168+
7169+
jamEntry();
7170+
switch(req.tableId) {
7171+
case Ndbinfo::MEMBERSHIP_TABLEID:
7172+
{
7173+
jam();
7174+
Ndbinfo::Row row(signal, req);
7175+
row.write_uint32(getOwnNodeId());
7176+
row.write_uint32(getNodeState().nodeGroup);
7177+
row.write_uint32(cneighbourl);
7178+
row.write_uint32(cneighbourh);
7179+
row.write_uint32(cpresident);
7180+
7181+
Uint32 successor = 0; // President sucessor.
7182+
NodeRecPtr nodePtr;
7183+
UintR tfrMinDynamicId = (UintR)-1;
7184+
for (nodePtr.i = 1; nodePtr.i < MAX_NDB_NODES; nodePtr.i++) {
7185+
jam();
7186+
ptrAss(nodePtr, nodeRec);
7187+
if (nodePtr.p->phase == ZRUNNING) {
7188+
if ((nodePtr.p->ndynamicId & 0xFFFF) < tfrMinDynamicId) {
7189+
jam();
7190+
if (cpresident != nodePtr.i)
7191+
{
7192+
tfrMinDynamicId = (nodePtr.p->ndynamicId & 0xFFFF);
7193+
successor = nodePtr.i;
7194+
}
7195+
}
7196+
}
7197+
}//for
7198+
row.write_uint32(successor);
7199+
7200+
NodeRecPtr myNodePtr;
7201+
myNodePtr.i = getOwnNodeId();
7202+
ptrCheckGuard(myNodePtr, MAX_NDB_NODES, nodeRec);
7203+
row.write_uint32(myNodePtr.p->ndynamicId);
7204+
7205+
row.write_uint32(arbitRec.node); // arbitrator
7206+
7207+
char ticket[20]; // Need 16 characters + 1 for trailing '\0'
7208+
arbitRec.ticket.getText(ticket, sizeof(ticket));
7209+
row.write_string(ticket);
7210+
7211+
row.write_uint32(arbitRec.state);
7212+
7213+
// arbitrator connected
7214+
row.write_uint32(c_connectedNodes.get(arbitRec.node));
7215+
7216+
// Find the potential (rank1 and rank2) arbitrators that are connected.
7217+
NodeRecPtr aPtr;
7218+
// buf_size: Node nr (max 3 chars) and ', ' + trailing '\0'
7219+
const int buf_size = 5 * MAX_NODES + 1;
7220+
char buf[buf_size];
7221+
7222+
for (unsigned rank = 1; rank <= 2; rank++)
7223+
{
7224+
jam();
7225+
aPtr.i = 0;
7226+
const unsigned stop = NodeBitmask::NotFound;
7227+
int buf_offset = 0;
7228+
char* delimiter = "";
7229+
7230+
while ((aPtr.i = arbitRec.apiMask[rank].find(aPtr.i + 1)) != stop)
7231+
{
7232+
jam();
7233+
ptrAss(aPtr, nodeRec);
7234+
if (c_connectedNodes.get(aPtr.i))
7235+
{
7236+
buf_offset += BaseString::snprintf(buf + buf_offset,
7237+
buf_size - buf_offset,
7238+
"%s%u", delimiter, aPtr.i);
7239+
delimiter = ", ";
7240+
}
7241+
} // while
7242+
7243+
if (buf_offset == 0)
7244+
row.write_string("-");
7245+
else
7246+
row.write_string(buf);
7247+
} // for
7248+
7249+
ndbinfo_send_row(signal, req, row, rl);
7250+
} // case ARBITRATION_TABLEID
7251+
default:
7252+
break;
7253+
} // switch
7254+
ndbinfo_send_scan_conf(signal, req, rl);
7255+
}

storage/ndb/src/kernel/vm/Ndbinfo.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ class Ndbinfo {
5050
THREADBLOCKS_TABLEID = 11,
5151
THREADSTAT_TABLEID = 12,
5252
TRANSACTIONS_TABLEID = 13,
53-
OPERATIONS_TABLEID = 14
53+
OPERATIONS_TABLEID = 14,
54+
MEMBERSHIP_TABLEID = 15
5455
};
5556

5657
struct Table {

storage/ndb/src/kernel/vm/NdbinfoTables.cpp

+21-1
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,25 @@ DECLARE_NDBINFO_TABLE(OPERATIONS, 12) =
243243
}
244244
};
245245

246+
DECLARE_NDBINFO_TABLE(MEMBERSHIP, 13) =
247+
{ { "membership", 13, 0, "membership" },
248+
{
249+
{"node_id", Ndbinfo::Number, "node id"},
250+
{"group_id", Ndbinfo::Number, "node group id"},
251+
{"left_node", Ndbinfo::Number, "Left node in heart beat chain"},
252+
{"right_node", Ndbinfo::Number, "Right node in heart beat chain"},
253+
{"president", Ndbinfo::Number, "President nodeid"},
254+
{"successor", Ndbinfo::Number, "President successor"},
255+
{"dynamic_id", Ndbinfo::Number, "President, Configured_heartbeat order"},
256+
{"arbitrator", Ndbinfo::Number, "Arbitrator nodeid"},
257+
{"arb_ticket", Ndbinfo::String, "Arbitrator ticket"},
258+
{"arb_state", Ndbinfo::Number, "Arbitrator state"},
259+
{"arb_connected", Ndbinfo::Number, "Arbitrator connected"},
260+
{"conn_rank1_arbs", Ndbinfo::String, "Connected rank 1 arbitrators"},
261+
{"conn_rank2_arbs", Ndbinfo::String, "Connected rank 2 arbitrators"}
262+
}
263+
};
264+
246265
#define DBINFOTBL(x) { Ndbinfo::x##_TABLEID, (Ndbinfo::Table*)&ndbinfo_##x }
247266

248267
static
@@ -266,7 +285,8 @@ struct ndbinfo_table_list_entry {
266285
DBINFOTBL(THREADBLOCKS),
267286
DBINFOTBL(THREADSTAT),
268287
DBINFOTBL(TRANSACTIONS),
269-
DBINFOTBL(OPERATIONS)
288+
DBINFOTBL(OPERATIONS),
289+
DBINFOTBL(MEMBERSHIP)
270290
};
271291

272292
static int no_ndbinfo_tables =

storage/ndb/tools/ndbinfo_sql.cpp

+59
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,65 @@ struct view {
254254
"FROM `<NDBINFO_DB>`.cluster_operations o "
255255
"JOIN information_schema.ndb_transid_mysql_connection_map map"
256256
" ON (map.ndb_transid >> 32) = (o.transid >> 32)"
257+
},
258+
{ "membership",
259+
"SELECT node_id, group_id, left_node, right_node, president, successor, "
260+
"dynamic_id & 0xFFFF AS succession_order, "
261+
"dynamic_id >> 16 AS Conf_HB_order, "
262+
"arbitrator, arb_ticket, "
263+
"CASE arb_state"
264+
" WHEN 0 THEN \"ARBIT_NULL\""
265+
" WHEN 1 THEN \"ARBIT_INIT\""
266+
" WHEN 2 THEN \"ARBIT_FIND\""
267+
" WHEN 3 THEN \"ARBIT_PREP1\""
268+
" WHEN 4 THEN \"ARBIT_PREP2\""
269+
" WHEN 5 THEN \"ARBIT_START\""
270+
" WHEN 6 THEN \"ARBIT_RUN\""
271+
" WHEN 7 THEN \"ARBIT_CHOOSE\""
272+
" WHEN 8 THEN \"ARBIT_CRASH\""
273+
" ELSE \"UNKNOWN\""
274+
" END AS arb_state, "
275+
"CASE arb_connected"
276+
" WHEN 1 THEN \"Yes\""
277+
" ELSE \"No\""
278+
" END AS arb_connected, "
279+
"conn_rank1_arbs AS connected_rank1_arbs, "
280+
"conn_rank2_arbs AS connected_rank2_arbs "
281+
"FROM `<NDBINFO_DB>`.`<TABLE_PREFIX>membership`"
282+
},
283+
{ "arbitrator_validity_detail",
284+
"SELECT node_id, "
285+
"arbitrator, "
286+
"arb_ticket, "
287+
"CASE arb_connected"
288+
" WHEN 1 THEN \"Yes\""
289+
" ELSE \"No\""
290+
" END AS arb_connected, "
291+
"CASE arb_state"
292+
" WHEN 0 THEN \"ARBIT_NULL\""
293+
" WHEN 1 THEN \"ARBIT_INIT\""
294+
" WHEN 2 THEN \"ARBIT_FIND\""
295+
" WHEN 3 THEN \"ARBIT_PREP1\""
296+
" WHEN 4 THEN \"ARBIT_PREP2\""
297+
" WHEN 5 THEN \"ARBIT_START\""
298+
" WHEN 6 THEN \"ARBIT_RUN\""
299+
" WHEN 7 THEN \"ARBIT_CHOOSE\""
300+
" WHEN 8 THEN \"ARBIT_CRASH\""
301+
" ELSE \"UNKNOWN\""
302+
" END AS arb_state "
303+
"FROM `<NDBINFO_DB>`.`<TABLE_PREFIX>membership` "
304+
"ORDER BY arbitrator, arb_connected DESC"
305+
},
306+
{ "arbitrator_validity_summary",
307+
"SELECT arbitrator, "
308+
"arb_ticket, "
309+
"CASE arb_connected"
310+
" WHEN 1 THEN \"Yes\""
311+
" ELSE \"No\""
312+
" END AS arb_connected, "
313+
"count(*) as consensus_count "
314+
"FROM `<NDBINFO_DB>`.`<TABLE_PREFIX>membership` "
315+
"GROUP BY arbitrator, arb_ticket, arb_connected"
257316
}
258317
};
259318

0 commit comments

Comments
 (0)