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

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. #ifndef APPNDB_HPP
  14. #define APPNDB_HPP
  15. #include "NdbApi.hpp"
  16. #include <NdbMain.h>
  17. #include <NdbOut.hpp>
  18. #include <NdbSleep.h>
  19. #include <NdbTick.h>
  20. #include <NdbThread.h>
  21. #include <Vector.hpp>
  22. #include "TableInfoPs.hpp"
  23. #include <rep/storage/GCIContainer.hpp>
  24. #include <rep/storage/GCIBuffer.hpp>
  25. #include <rep/state/RepState.hpp>
  26. extern "C" {
  27.   void * runAppNDB_C(void *);
  28. }
  29. /**
  30.  * @class AppNDB
  31.  * @brief Connects to NDB and appliers log records into standby system
  32.  */
  33. class AppNDB {
  34. public:
  35.   /***************************************************************************
  36.    * Constructor / Destructor / Init
  37.    ***************************************************************************/
  38.   AppNDB(class GCIContainer * gciContainer, class RepState * repState);
  39.   ~AppNDB();
  40.   void init(const char * connectString);
  41.   GrepError::Code 
  42.   applyBuffer(Uint32 nodeGrp, Uint32 first, Uint32 force);
  43.   
  44.   /**
  45.    * Takes a table id and drops it.
  46.    * @param tableId   Name of table to be dropped
  47.    * @return Returns 1 = ok, -1 failed
  48.    * 
  49.    * @todo Fix: 0 usually means ok...
  50.    */
  51.   int dropTable(Uint32 tableId);
  52.   void startApplier();
  53.   void stopApplier(GrepError::Code err);  
  54. private:
  55.   /***************************************************************************
  56.    * Methods
  57.    ***************************************************************************/
  58.   friend void* runAppNDB_C(void*);
  59.   void threadMainAppNDB(void);
  60.   /**
  61.    * Takes a log records and does the operation specified in the log record
  62.    * on NDB.
  63.    * @param - lr (LogRecord)
  64.    * @param - force true if GREP:SSCoord is in phase STARTING. 
  65.    *       Ignore "Execute" errors if true.
  66.    */
  67.   int applyLogRecord(LogRecord *  lr, bool force, Uint32 gci);
  68.   /**
  69.    * Applies a table based on a meta record and creates the table 
  70.    * in NDB.
  71.    * @param - meta record
  72.    * @return - 0 on success, -1 if something went wrong
  73.    */
  74.   int applyMetaRecord(MetaRecord *  mr, Uint32 gci);
  75.   /**
  76.    * Takes a meta record and uses NdbDictionaryXXX::parseInfoTable 
  77.    * and returns a table
  78.    * @param mr - MetaRecord
  79.    * @return - a table based on the meta record
  80.    */
  81.   NdbDictionary::Table* prepareMetaRecord(MetaRecord *  mr);
  82.   /**
  83.    * Prints out an NDB error message if a ndb operation went wrong.
  84.    * @param msg - text explaining the error
  85.    * @param err - NDB error type
  86.    */
  87.   void reportNdbError(const char * msg, const NdbError & err);
  88.   
  89.   /**
  90.    * Prints out a warning message. Used if support for something
  91.    * is not implemented.
  92.    * @param tableName - the name of the table this warning occured on
  93.    * @param message - warning message
  94.    */
  95.   void reportWarning(const char * tableName, const char * message);
  96.   /**
  97.    * Prints out a warning message. Used if support for something
  98.    * is not implemented.
  99.    * @param tableName - the name of the table this warning occured on
  100.    * @param columnName - the name of the column this warning occured on
  101.    * @param message - warning message
  102.    */
  103.   void reportWarning(const char * tableName, const char * columnName,
  104.      const char * message);
  105.   /***************************************************************************
  106.    * Variables
  107.    ***************************************************************************/
  108.   GCIContainer *               m_gciContainer;
  109.   RepState *                m_repState;
  110.   Ndb*                         m_ndb;
  111.   NdbDictionary::Dictionary *  m_dict;
  112.   NodeId                       m_ownNodeId;
  113.   bool                         m_started;
  114.   TableInfoPs *                m_tableInfoPs;
  115.   NdbThread*                   m_applierThread; 
  116.   NdbCondition *        m_cond;
  117.   MutexVector<GCIBuffer*>      m_gciBufferList;
  118. };
  119. #endif