RepStateEvent.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:8k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "RepState.hpp"
  14. /****************************************************************************
  15.  * Public Event Handlers : CREATE SUBSCRIPTION ID
  16.  ****************************************************************************/
  17. void 
  18. RepState::eventSubscriptionIdCreated(Uint32 subId, Uint32 subKey)
  19. {
  20.   if (m_channel.getStateSub() == Channel::CREATING_SUBSCRIPTION_ID)
  21.   {
  22.     m_channel.setSubId(subId);
  23.     m_channel.setSubKey(subKey);
  24.     m_channel.setStateSub(Channel::SUBSCRIPTION_ID_CREATED);
  25.   }
  26.   else 
  27.   {
  28.     REPABORT("Illegal state for create subscription id conf");
  29.   }
  30. }
  31. void 
  32. RepState::eventSubscriptionIdCreateFailed(Uint32 subId, Uint32 subKey, 
  33.   GrepError::Code error)
  34. {
  35.   ndbout_c("nSubscription id creation failed");
  36.   ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error));
  37.   ndbout_c("Subscription Id: %d, Key: %d", subId, subKey);
  38. }
  39. /****************************************************************************
  40.  * Public Event Handlers : CREATE SUBSCRIPTION
  41.  ****************************************************************************/
  42. void
  43. RepState::eventSubscriptionCreated(Uint32 subId, Uint32 subKey)
  44. {
  45.   if (m_channel.getStateSub() == Channel::STARTING_SUBSCRIPTION)
  46.   {
  47.     m_channel.setStateSub(Channel::SUBSCRIPTION_STARTED);
  48.   }
  49.   else 
  50.   {
  51.     REPABORT("Illegal state for create subscription conf");
  52.   }
  53. }
  54. void
  55. RepState::eventSubscriptionCreateFailed(Uint32 subId, Uint32 subKey,
  56. GrepError::Code error)
  57. {
  58.   ndbout_c("nSubscription creation failed");
  59.   ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error));
  60.   ndbout_c("Subscription Id: %d, Key: %d", subId, subKey);
  61. }
  62. /****************************************************************************
  63.  * Public Event Handlers : META LOG
  64.  ****************************************************************************/
  65. void 
  66. RepState::eventMetaLogStarted(NdbApiSignal* signal, 
  67.       Uint32 subId, Uint32 subKey)
  68. {
  69.   if (m_channel.getState() != Channel::METALOG_STARTING) 
  70.   {
  71.     RLOG(("WARNING! Metalog started in state %d, should be %d",
  72.   m_channel.getState(), Channel::METALOG_STARTING));
  73.   }
  74.   
  75.   if (!isAutoStartEnabled())
  76.   {
  77.     m_channel.setState(Channel::METALOG_STARTED);
  78.   }
  79.   else 
  80.   {
  81.     m_channel.setState(Channel::METALOG_STARTED);
  82.     m_channel.setState(Channel::METASCAN_STARTING);
  83.     m_funcRequestStartMetaScan(m_extSender, signal, subId, subKey);
  84.   }
  85. }
  86. void 
  87. RepState::eventMetaLogStartFailed(Uint32 subId, Uint32 subKey, 
  88.   GrepError::Code error)
  89. {
  90.   ndbout_c("nMetalog start failed");
  91.   ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error));
  92.   ndbout_c("Subscription Id: %d, Key: %d", subId, subKey);
  93. }
  94. /****************************************************************************
  95.  * Public Event Handlers : META SCAN
  96.  ****************************************************************************/
  97. void 
  98. RepState::eventMetaScanCompleted(NdbApiSignal* signal, 
  99.  Uint32 subId, Uint32 subKey, Interval epochs) 
  100. {
  101.   if (m_channel.getState() != Channel::METASCAN_STARTING) 
  102.   {
  103.     RLOG(("WARNING! Metascan completed in state %d, should be %d",
  104.   m_channel.getState(), Channel::METASCAN_STARTING));
  105.   }
  106.   RLOG(("Metascan completed. Subscription %d-%d, Epochs [%d-%d]",
  107. subId, subKey, epochs.first(), epochs.last()));
  108.   m_channel.setState(Channel::METASCAN_COMPLETED);
  109.   
  110.   if (isAutoStartEnabled())
  111.   {
  112.     m_channel.setState(Channel::DATALOG_STARTING);
  113.     m_funcRequestStartDataLog(m_extSender, signal, subId, subKey);
  114.   }
  115.   m_channel.setMetaScanEpochs(epochs);
  116. }
  117. /****************************************************************************
  118.  * Public Event Handlers : DATA LOG
  119.  ****************************************************************************/
  120. void 
  121. RepState::eventDataLogStarted(NdbApiSignal* signal,
  122.       Uint32 subId, Uint32 subKey)
  123. {
  124.   if (m_channel.getState() != Channel::DATALOG_STARTING) 
  125.   {
  126.     RLOG(("WARNING! Datalog started in state %d, should be %d",
  127.   m_channel.getState(), Channel::DATALOG_STARTING));
  128.   }
  129.   m_channel.setState(Channel::DATALOG_STARTED);
  130.   if (isAutoStartEnabled())
  131.   {
  132.     m_channel.setState(Channel::DATASCAN_STARTING);
  133.     m_funcRequestStartDataScan(m_extSender, signal, subId, subKey);
  134.   }
  135. }
  136. void 
  137. RepState::eventDataLogStartFailed(Uint32 subId, Uint32 subKey, 
  138.   GrepError::Code error)
  139. {
  140.   ndbout_c("nDatalog start failed");
  141.   ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error));
  142.   ndbout_c("Subscription Id: %d, Key: %d", subId, subKey);
  143. }
  144. /****************************************************************************
  145.  * Public Event Handlers : DATA SCAN
  146.  ****************************************************************************/
  147. void 
  148. RepState::eventDataScanCompleted(NdbApiSignal* signal, 
  149.  Uint32 subId, Uint32 subKey,
  150.  Interval epochs) 
  151. {
  152.   if (m_channel.getState() != Channel::DATASCAN_STARTING) 
  153.   {
  154.     RLOG(("WARNING! Datascan completed in state %d, should be %d",
  155.   m_channel.getState(), Channel::DATASCAN_STARTING));
  156.   }
  157.   RLOG(("Datascan completed. Subscription %d-%d, Epochs [%d-%d]",
  158. subId, subKey, epochs.first(), epochs.last()));
  159.   
  160.   m_channel.setState(Channel::DATASCAN_COMPLETED);
  161.   m_channel.setDataScanEpochs(epochs);
  162. }
  163. /****************************************************************************
  164.  * Public Event Handlers : FAILURES
  165.  ****************************************************************************/
  166. void
  167. RepState::eventMetaScanFailed(Uint32 subId, Uint32 subKey,
  168.      GrepError::Code error)
  169. {
  170.   ndbout_c("nMetascan failed");
  171.   ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error));
  172.   ndbout_c("Subscription Id: %d, Key: %d", subId, subKey);
  173. }
  174. void 
  175. RepState::eventDataScanFailed(Uint32 subId, Uint32 subKey, 
  176.      GrepError::Code error)
  177. {
  178.   ndbout_c("nDatascan failed");
  179.   ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error));
  180.   ndbout_c("Subscription Id: %d, Key: %d", subId, subKey);
  181. }
  182. /****************************************************************************
  183.  * Public Event Handlers : APPLY
  184.  ****************************************************************************/
  185. void
  186. RepState::eventInsertConf(Uint32 gci, Uint32 nodeGrp) 
  187. {
  188.   Interval app(gci, gci);
  189.   add(Channel::App, nodeGrp, app);
  190.   clear(Channel::AppReq, nodeGrp, app);
  191. #ifdef DEBUG_GREP
  192.   ndbout_c("RepState: GCI Buffer %d:[%d] applied", nodeGrp, gci);
  193. #endif
  194. }
  195. void
  196. RepState::eventInsertRef(Uint32 gci, Uint32 nodeGrp, Uint32 tableId, 
  197.  GrepError::Code err) 
  198. {
  199.   ndbout_c("nTable %d, used in replication, did not exist");
  200.   RLOG(("ERROR %d:%s. Apply failed (%d[%d] in table %d)", 
  201. err, GrepError::getErrorDesc(err), nodeGrp, gci, tableId));
  202. }
  203. void
  204. RepState::eventCreateTableRef(Uint32 gci,   
  205.       Uint32 tableId, 
  206.       const char * tableName,
  207.       GrepError::Code err) 
  208. {
  209.   ndbout_c("nFailed to create table %s with source site table id %d",
  210.    tableName,
  211.    tableId);
  212.   RLOG(("ERROR %d:%s. Failed to create table %s with source site table id %d!",
  213. err, GrepError::getErrorDesc(err), tableName, tableId));
  214. }
  215. /****************************************************************************
  216.  * Public Event Handlers : Connected/Disconnected
  217.  ****************************************************************************/
  218. void 
  219. RepState::eventNodeConnected(Uint32 nodeId)
  220. {
  221.   m_repConnected = CONNECTED;
  222. }
  223.  
  224. void 
  225. RepState::eventNodeDisconnected(Uint32 nodeId)
  226. {
  227.   m_repConnected = DISCONNECTED;
  228. }
  229. void 
  230. RepState::eventNodeConnectable(Uint32 nodeId)
  231. {
  232.   m_repConnected = CONNECTABLE;
  233. }
  234. /****************************************************************************
  235.  * Public Event Handlers : Connected/Disconnected
  236.  ****************************************************************************/
  237. void 
  238. RepState::eventSubscriptionDeleted(Uint32 subId, Uint32 subKey) 
  239. {
  240.   m_gciContainer->reset();
  241.   m_channel.setState(Channel::CONSISTENT);
  242.   m_channel.reset();
  243.   m_subIdToRemove = 0;
  244.   m_subKeyToRemove = 0;
  245. }