diff options
Diffstat (limited to 'storage/ndb/src/kernel/blocks/suma/SumaInit.cpp')
-rw-r--r-- | storage/ndb/src/kernel/blocks/suma/SumaInit.cpp | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/storage/ndb/src/kernel/blocks/suma/SumaInit.cpp b/storage/ndb/src/kernel/blocks/suma/SumaInit.cpp new file mode 100644 index 00000000000..b5945db3811 --- /dev/null +++ b/storage/ndb/src/kernel/blocks/suma/SumaInit.cpp @@ -0,0 +1,192 @@ +/* Copyright (C) 2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include "Suma.hpp" + +#include <Properties.hpp> +#include <Configuration.hpp> + +SumaParticipant::SumaParticipant(const Configuration & conf) : + SimulatedBlock(SUMA, conf), + c_metaSubscribers(c_subscriberPool), + c_dataSubscribers(c_subscriberPool), + c_prepDataSubscribers(c_subscriberPool), + c_removeDataSubscribers(c_subscriberPool), + c_tables(c_tablePool_), + c_subscriptions(c_subscriptionPool) +{ + BLOCK_CONSTRUCTOR(SumaParticipant); + + /** + * SUMA participant if + */ + addRecSignal(GSN_SUB_CREATE_REQ, &SumaParticipant::execSUB_CREATE_REQ); + addRecSignal(GSN_SUB_REMOVE_REQ, &SumaParticipant::execSUB_REMOVE_REQ); + addRecSignal(GSN_SUB_START_REQ, &SumaParticipant::execSUB_START_REQ); + addRecSignal(GSN_SUB_STOP_REQ, &SumaParticipant::execSUB_STOP_REQ); + addRecSignal(GSN_SUB_SYNC_REQ, &SumaParticipant::execSUB_SYNC_REQ); + + addRecSignal(GSN_SUB_STOP_CONF, &SumaParticipant::execSUB_STOP_CONF); + addRecSignal(GSN_SUB_STOP_REF, &SumaParticipant::execSUB_STOP_REF); + + /** + * Dict interface + */ + //addRecSignal(GSN_LIST_TABLES_REF, &SumaParticipant::execLIST_TABLES_REF); + addRecSignal(GSN_LIST_TABLES_CONF, &SumaParticipant::execLIST_TABLES_CONF); + //addRecSignal(GSN_GET_TABINFOREF, &SumaParticipant::execGET_TABINFO_REF); + addRecSignal(GSN_GET_TABINFO_CONF, &SumaParticipant::execGET_TABINFO_CONF); + addRecSignal(GSN_GET_TABINFOREF, &SumaParticipant::execGET_TABINFOREF); +#if 0 + addRecSignal(GSN_GET_TABLEID_CONF, &SumaParticipant::execGET_TABLEID_CONF); + addRecSignal(GSN_GET_TABLEID_REF, &SumaParticipant::execGET_TABLEID_REF); +#endif + /** + * Dih interface + */ + //addRecSignal(GSN_DI_FCOUNTREF, &SumaParticipant::execDI_FCOUNTREF); + addRecSignal(GSN_DI_FCOUNTCONF, &SumaParticipant::execDI_FCOUNTCONF); + //addRecSignal(GSN_DIGETPRIMREF, &SumaParticipant::execDIGETPRIMREF); + addRecSignal(GSN_DIGETPRIMCONF, &SumaParticipant::execDIGETPRIMCONF); + + /** + * Scan interface + */ + addRecSignal(GSN_SCAN_HBREP, &SumaParticipant::execSCAN_HBREP); + addRecSignal(GSN_TRANSID_AI, &SumaParticipant::execTRANSID_AI); + addRecSignal(GSN_SCAN_FRAGREF, &SumaParticipant::execSCAN_FRAGREF); + addRecSignal(GSN_SCAN_FRAGCONF, &SumaParticipant::execSCAN_FRAGCONF); +#if 0 + addRecSignal(GSN_SUB_SYNC_CONTINUE_REF, + &SumaParticipant::execSUB_SYNC_CONTINUE_REF); +#endif + addRecSignal(GSN_SUB_SYNC_CONTINUE_CONF, + &SumaParticipant::execSUB_SYNC_CONTINUE_CONF); + + /** + * Trigger stuff + */ + addRecSignal(GSN_TRIG_ATTRINFO, &SumaParticipant::execTRIG_ATTRINFO); + addRecSignal(GSN_FIRE_TRIG_ORD, &SumaParticipant::execFIRE_TRIG_ORD); + + addRecSignal(GSN_CREATE_TRIG_REF, &Suma::execCREATE_TRIG_REF); + addRecSignal(GSN_CREATE_TRIG_CONF, &Suma::execCREATE_TRIG_CONF); + addRecSignal(GSN_DROP_TRIG_REF, &Suma::execDROP_TRIG_REF); + addRecSignal(GSN_DROP_TRIG_CONF, &Suma::execDROP_TRIG_CONF); + + addRecSignal(GSN_SUB_GCP_COMPLETE_REP, + &SumaParticipant::execSUB_GCP_COMPLETE_REP); + + /** + * @todo: fix pool sizes + */ + Uint32 noTables; + const ndb_mgm_configuration_iterator * p = conf.getOwnConfigIterator(); + ndbrequire(p != 0); + + ndb_mgm_get_int_parameter(p, CFG_DB_NO_TABLES, + &noTables); + + c_tablePool_.setSize(noTables); + c_tables.setSize(noTables); + + c_subscriptions.setSize(20); //10 + c_subscriberPool.setSize(64); + + c_subscriptionPool.setSize(64); //2 + c_syncPool.setSize(20); //2 + c_dataBufferPool.setSize(128); + + { + SLList<SyncRecord> tmp(c_syncPool); + Ptr<SyncRecord> ptr; + while(tmp.seize(ptr)) + new (ptr.p) SyncRecord(* this, c_dataBufferPool); + tmp.release(); + } + + for( int i = 0; i < NO_OF_BUCKETS; i++) { + c_buckets[i].active = false; + c_buckets[i].handover = false; + c_buckets[i].handover_started = false; + c_buckets[i].handoverGCI = 0; + } + c_handoverToDo = false; + c_lastInconsistentGCI = RNIL; + c_lastCompleteGCI = RNIL; + c_nodeFailGCI = 0; + + c_failedApiNodes.clear(); +} + +SumaParticipant::~SumaParticipant() +{ +} + +Suma::Suma(const Configuration & conf) : + SumaParticipant(conf), + Restart(*this), + c_nodes(c_nodePool), + c_runningSubscriptions(c_subCoordinatorPool) +{ + + c_nodePool.setSize(MAX_NDB_NODES); + c_masterNodeId = getOwnNodeId(); + + c_nodeGroup = c_noNodesInGroup = c_idInNodeGroup = 0; + for (int i = 0; i < MAX_REPLICAS; i++) { + c_nodesInGroup[i] = 0; + } + + c_subCoordinatorPool.setSize(10); + + // Add received signals + addRecSignal(GSN_STTOR, &Suma::execSTTOR); + addRecSignal(GSN_NDB_STTOR, &Suma::execNDB_STTOR); + addRecSignal(GSN_DUMP_STATE_ORD, &Suma::execDUMP_STATE_ORD); + addRecSignal(GSN_READ_NODESCONF, &Suma::execREAD_NODESCONF); + addRecSignal(GSN_API_FAILREQ, &Suma::execAPI_FAILREQ); + addRecSignal(GSN_NODE_FAILREP, &Suma::execNODE_FAILREP); + addRecSignal(GSN_INCL_NODEREQ, &Suma::execINCL_NODEREQ); + addRecSignal(GSN_CONTINUEB, &Suma::execCONTINUEB); + addRecSignal(GSN_SIGNAL_DROPPED_REP, &Suma::execSIGNAL_DROPPED_REP, true); + addRecSignal(GSN_UTIL_SEQUENCE_CONF, &Suma::execUTIL_SEQUENCE_CONF); + addRecSignal(GSN_UTIL_SEQUENCE_REF, &Suma::execUTIL_SEQUENCE_REF); + addRecSignal(GSN_CREATE_SUBID_REQ, + &Suma::execCREATE_SUBID_REQ); + + addRecSignal(GSN_SUB_CREATE_CONF, &Suma::execSUB_CREATE_CONF); + addRecSignal(GSN_SUB_CREATE_REF, &Suma::execSUB_CREATE_REF); + addRecSignal(GSN_SUB_SYNC_CONF, &Suma::execSUB_SYNC_CONF); + addRecSignal(GSN_SUB_SYNC_REF, &Suma::execSUB_SYNC_REF); + addRecSignal(GSN_SUB_START_CONF, &Suma::execSUB_START_CONF); + addRecSignal(GSN_SUB_START_REF, &Suma::execSUB_START_REF); + + addRecSignal(GSN_SUMA_START_ME, &Suma::execSUMA_START_ME); + addRecSignal(GSN_SUMA_HANDOVER_REQ, &Suma::execSUMA_HANDOVER_REQ); + addRecSignal(GSN_SUMA_HANDOVER_CONF, &Suma::execSUMA_HANDOVER_CONF); + + addRecSignal(GSN_SUB_GCP_COMPLETE_ACC, + &Suma::execSUB_GCP_COMPLETE_ACC); +} + +Suma::~Suma() +{ +} + +BLOCK_FUNCTIONS(Suma) +BLOCK_FUNCTIONS(SumaParticipant) + |