Loading ndb/src/kernel/blocks/dbdict/Dbdict.cpp +21 −15 Original line number Diff line number Diff line Loading @@ -2910,9 +2910,7 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ break; } if(getNodeState().getSingleUserMode() && (refToNode(signal->getSendersBlockRef()) != getNodeState().getSingleUserApi())) if (checkSingleUserMode(signal->getSendersBlockRef())) { jam(); parseRecord.errorCode = CreateTableRef::SingleUser; Loading Loading @@ -3081,9 +3079,7 @@ Dbdict::execALTER_TABLE_REQ(Signal* signal) return; } if(getNodeState().getSingleUserMode() && (refToNode(signal->getSendersBlockRef()) != getNodeState().getSingleUserApi())) if (checkSingleUserMode(signal->getSendersBlockRef())) { jam(); alterTableRef(signal, req, AlterTableRef::SingleUser); Loading Loading @@ -5419,9 +5415,7 @@ Dbdict::execDROP_TABLE_REQ(Signal* signal){ return; } if(getNodeState().getSingleUserMode() && (refToNode(signal->getSendersBlockRef()) != getNodeState().getSingleUserApi())) if (checkSingleUserMode(signal->getSendersBlockRef())) { jam(); dropTableRef(signal, req, DropTableRef::SingleUser); Loading Loading @@ -6558,9 +6552,7 @@ Dbdict::execCREATE_INDX_REQ(Signal* signal) jam(); tmperr = CreateIndxRef::Busy; } else if(getNodeState().getSingleUserMode() && (refToNode(senderRef) != getNodeState().getSingleUserApi())) else if (checkSingleUserMode(senderRef)) { jam(); tmperr = CreateIndxRef::SingleUser; Loading Loading @@ -7135,9 +7127,7 @@ Dbdict::execDROP_INDX_REQ(Signal* signal) jam(); tmperr = DropIndxRef::Busy; } else if(getNodeState().getSingleUserMode() && (refToNode(senderRef) != getNodeState().getSingleUserApi())) else if (checkSingleUserMode(senderRef)) { jam(); tmperr = DropIndxRef::SingleUser; Loading Loading @@ -10579,4 +10569,20 @@ Dbdict::getMetaAttribute(MetaData::Attribute& attr, const MetaData::Table& table return 0; } /* return 1 if all of the below is true a) node in single user mode b) senderRef is not a db node c) senderRef nodeid is not the singleUserApi */ int Dbdict::checkSingleUserMode(Uint32 senderRef) { Uint32 nodeId = refToNode(senderRef); return getNodeState().getSingleUserMode() && (getNodeInfo(nodeId).m_type != NodeInfo::DB) && (nodeId != getNodeState().getSingleUserApi()); } CArray<KeyDescriptor> g_key_descriptor_pool; ndb/src/kernel/blocks/dbdict/Dbdict.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -1997,6 +1997,8 @@ private: int getMetaTable(MetaData::Table& table, const char* tableName); int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, Uint32 attributeId); int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, const char* attributeName); int checkSingleUserMode(Uint32 senderRef); }; #endif ndb/tools/waiter.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -30,12 +30,14 @@ waitClusterStatus(const char* _addr, ndb_mgm_node_status _status, unsigned int _timeout); enum ndb_waiter_options { OPT_WAIT_STATUS_NOT_STARTED = NDB_STD_OPTIONS_LAST OPT_WAIT_STATUS_NOT_STARTED = NDB_STD_OPTIONS_LAST, OPT_WAIT_STATUS_SINGLE_USER }; NDB_STD_OPTS_VARS; static int _no_contact = 0; static int _not_started = 0; static int _single_user = 0; static int _timeout = 120; const char *load_default_groups[]= { "mysql_cluster",0 }; Loading @@ -49,6 +51,10 @@ static struct my_option my_long_options[] = { "not-started", OPT_WAIT_STATUS_NOT_STARTED, "Wait for cluster not started", (gptr*) &_not_started, (gptr*) &_not_started, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "single-user", OPT_WAIT_STATUS_SINGLE_USER, "Wait for cluster to enter single user mode", (gptr*) &_single_user, (gptr*) &_single_user, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "timeout", 't', "Timeout to wait", (gptr*) &_timeout, (gptr*) &_timeout, 0, GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 }, Loading Loading @@ -90,6 +96,10 @@ int main(int argc, char** argv){ { wait_status= NDB_MGM_NODE_STATUS_NOT_STARTED; } else if (_single_user) { wait_status= NDB_MGM_NODE_STATUS_SINGLEUSER; } else { wait_status= NDB_MGM_NODE_STATUS_STARTED; Loading Loading
ndb/src/kernel/blocks/dbdict/Dbdict.cpp +21 −15 Original line number Diff line number Diff line Loading @@ -2910,9 +2910,7 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ break; } if(getNodeState().getSingleUserMode() && (refToNode(signal->getSendersBlockRef()) != getNodeState().getSingleUserApi())) if (checkSingleUserMode(signal->getSendersBlockRef())) { jam(); parseRecord.errorCode = CreateTableRef::SingleUser; Loading Loading @@ -3081,9 +3079,7 @@ Dbdict::execALTER_TABLE_REQ(Signal* signal) return; } if(getNodeState().getSingleUserMode() && (refToNode(signal->getSendersBlockRef()) != getNodeState().getSingleUserApi())) if (checkSingleUserMode(signal->getSendersBlockRef())) { jam(); alterTableRef(signal, req, AlterTableRef::SingleUser); Loading Loading @@ -5419,9 +5415,7 @@ Dbdict::execDROP_TABLE_REQ(Signal* signal){ return; } if(getNodeState().getSingleUserMode() && (refToNode(signal->getSendersBlockRef()) != getNodeState().getSingleUserApi())) if (checkSingleUserMode(signal->getSendersBlockRef())) { jam(); dropTableRef(signal, req, DropTableRef::SingleUser); Loading Loading @@ -6558,9 +6552,7 @@ Dbdict::execCREATE_INDX_REQ(Signal* signal) jam(); tmperr = CreateIndxRef::Busy; } else if(getNodeState().getSingleUserMode() && (refToNode(senderRef) != getNodeState().getSingleUserApi())) else if (checkSingleUserMode(senderRef)) { jam(); tmperr = CreateIndxRef::SingleUser; Loading Loading @@ -7135,9 +7127,7 @@ Dbdict::execDROP_INDX_REQ(Signal* signal) jam(); tmperr = DropIndxRef::Busy; } else if(getNodeState().getSingleUserMode() && (refToNode(senderRef) != getNodeState().getSingleUserApi())) else if (checkSingleUserMode(senderRef)) { jam(); tmperr = DropIndxRef::SingleUser; Loading Loading @@ -10579,4 +10569,20 @@ Dbdict::getMetaAttribute(MetaData::Attribute& attr, const MetaData::Table& table return 0; } /* return 1 if all of the below is true a) node in single user mode b) senderRef is not a db node c) senderRef nodeid is not the singleUserApi */ int Dbdict::checkSingleUserMode(Uint32 senderRef) { Uint32 nodeId = refToNode(senderRef); return getNodeState().getSingleUserMode() && (getNodeInfo(nodeId).m_type != NodeInfo::DB) && (nodeId != getNodeState().getSingleUserApi()); } CArray<KeyDescriptor> g_key_descriptor_pool;
ndb/src/kernel/blocks/dbdict/Dbdict.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -1997,6 +1997,8 @@ private: int getMetaTable(MetaData::Table& table, const char* tableName); int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, Uint32 attributeId); int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, const char* attributeName); int checkSingleUserMode(Uint32 senderRef); }; #endif
ndb/tools/waiter.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -30,12 +30,14 @@ waitClusterStatus(const char* _addr, ndb_mgm_node_status _status, unsigned int _timeout); enum ndb_waiter_options { OPT_WAIT_STATUS_NOT_STARTED = NDB_STD_OPTIONS_LAST OPT_WAIT_STATUS_NOT_STARTED = NDB_STD_OPTIONS_LAST, OPT_WAIT_STATUS_SINGLE_USER }; NDB_STD_OPTS_VARS; static int _no_contact = 0; static int _not_started = 0; static int _single_user = 0; static int _timeout = 120; const char *load_default_groups[]= { "mysql_cluster",0 }; Loading @@ -49,6 +51,10 @@ static struct my_option my_long_options[] = { "not-started", OPT_WAIT_STATUS_NOT_STARTED, "Wait for cluster not started", (gptr*) &_not_started, (gptr*) &_not_started, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "single-user", OPT_WAIT_STATUS_SINGLE_USER, "Wait for cluster to enter single user mode", (gptr*) &_single_user, (gptr*) &_single_user, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "timeout", 't', "Timeout to wait", (gptr*) &_timeout, (gptr*) &_timeout, 0, GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 }, Loading Loading @@ -90,6 +96,10 @@ int main(int argc, char** argv){ { wait_status= NDB_MGM_NODE_STATUS_NOT_STARTED; } else if (_single_user) { wait_status= NDB_MGM_NODE_STATUS_SINGLEUSER; } else { wait_status= NDB_MGM_NODE_STATUS_STARTED; Loading