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

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 TRIX_H
  14. #define TRIX_H
  15. #include <SimulatedBlock.hpp>
  16. #include <trigger_definitions.h>
  17. #include <DataBuffer.hpp>
  18. #include <ArrayList.hpp>
  19. #include <SimpleProperties.hpp>
  20. #include <signaldata/DictTabInfo.hpp>
  21. #include <signaldata/CreateTrig.hpp>
  22. #include <signaldata/BuildIndx.hpp>
  23. // Error codes
  24. #define INTERNAL_ERROR_ILLEGAL_CALL 4344
  25. #define INTERNAL_ERROR_TRIX_BUSY 4345
  26. /**
  27.  * TRIX - This block manages triggers and index (in coop with DICT)
  28.  */
  29. class Trix : public SimulatedBlock
  30. {
  31. public:
  32.   Trix(const class Configuration & conf);
  33.   virtual ~Trix();
  34. public:
  35.   // Subscription data, when communicating with SUMA
  36.   enum RequestType {
  37.     TABLE_REORG = 0,
  38.     INDEX_BUILD = 1
  39.   };
  40.   typedef DataBuffer<11> AttrOrderBuffer;
  41. private:
  42.   // Private attributes
  43.   
  44.   BLOCK_DEFINES(Trix);
  45.   // Declared but not defined
  46.   //DBtrix(const Trix &obj);
  47.   //void operator = (const Trix &);
  48.   // Block state
  49.   enum BlockState {
  50.     NOT_STARTED,
  51.     STARTED,
  52.     NODE_FAILURE,
  53.     IDLE,
  54.     BUSY
  55.   };
  56.   BlockState c_blockState;
  57.   // Node data needed when communicating with remote TRIX:es
  58.   struct NodeRecord {
  59.     bool alive;
  60.     BlockReference trixRef;
  61.     union {
  62.       Uint32 nextPool;
  63.       Uint32 nextList;
  64.     };
  65.     Uint32 prevList;
  66.   };
  67.   
  68.   typedef Ptr<NodeRecord> NodeRecPtr;
  69.   /**
  70.    * The pool of node records
  71.    */
  72.   ArrayPool<NodeRecord> c_theNodeRecPool;
  73.   /**
  74.    * The list of other NDB nodes
  75.    */  
  76.   ArrayList<NodeRecord> c_theNodes;
  77.   Uint32 c_masterNodeId;
  78.   BlockReference c_masterTrixRef;
  79.   Uint16 c_noNodesFailed;
  80.   Uint16 c_noActiveNodes;
  81.   AttrOrderBuffer::DataBufferPool c_theAttrOrderBufferPool;
  82.   struct SubscriptionRecord {
  83.     SubscriptionRecord(AttrOrderBuffer::DataBufferPool & aop):
  84.       attributeOrder(aop)
  85.     {}
  86.     RequestType requestType;
  87.     BlockReference userReference; // For user
  88.     Uint32 connectionPtr; // For user
  89.     Uint32 subscriptionId; // For Suma
  90.     Uint32 subscriptionKey; // For Suma
  91.     Uint32 prepareId; // For DbUtil
  92.     Uint32 indexType;
  93.     Uint32 sourceTableId;
  94.     Uint32 targetTableId;
  95.     AttrOrderBuffer attributeOrder;
  96.     Uint32 noOfIndexColumns;
  97.     Uint32 noOfKeyColumns;
  98.     Uint32 parallelism;
  99.     BuildIndxRef::ErrorCode errorCode;
  100.     bool subscriptionCreated;
  101.     bool pendingSubSyncContinueConf;
  102.     Uint32 expectedConf; // Count in n UTIL_EXECUTE_CONF + 1 SUB_SYNC_CONF
  103.     union {
  104.       Uint32 nextPool;
  105.       Uint32 nextList;
  106.     };
  107.     Uint32 prevList;
  108.   };
  109.   
  110.   typedef Ptr<SubscriptionRecord> SubscriptionRecPtr;
  111.   /**
  112.    * The pool of node records
  113.    */
  114.   ArrayPool<SubscriptionRecord> c_theSubscriptionRecPool;
  115.   /**
  116.    * The list of other subscriptions
  117.    */  
  118.   ArrayList<SubscriptionRecord> c_theSubscriptions;
  119.   // System start
  120.   void execSTTOR(Signal* signal);
  121.   void execNDB_STTOR(Signal* signal);
  122.   // Node management
  123.   void execREAD_NODESCONF(Signal* signal);
  124.   void execREAD_NODESREF(Signal* signal);
  125.   void execNODE_FAILREP(Signal* signal);
  126.   void execINCL_NODEREQ(Signal* signal);
  127.   // Debugging
  128.   void execDUMP_STATE_ORD(Signal* signal);
  129.   // Build index
  130.   void execBUILDINDXREQ(Signal* signal);
  131.   void execBUILDINDXCONF(Signal* signal);
  132.   void execBUILDINDXREF(Signal* signal);
  133.   void execUTIL_PREPARE_CONF(Signal* signal);
  134.   void execUTIL_PREPARE_REF(Signal* signal);
  135.   void execUTIL_EXECUTE_CONF(Signal* signal);
  136.   void execUTIL_EXECUTE_REF(Signal* signal);
  137.   void execUTIL_RELEASE_CONF(Signal* signal);
  138.   void execUTIL_RELEASE_REF(Signal* signal);
  139.   // Suma signals
  140.   void execSUB_CREATE_CONF(Signal* signal);
  141.   void execSUB_CREATE_REF(Signal* signal);
  142.   void execSUB_REMOVE_CONF(Signal* signal);
  143.   void execSUB_REMOVE_REF(Signal* signal);
  144.   void execSUB_SYNC_CONF(Signal* signal);
  145.   void execSUB_SYNC_REF(Signal* signal);
  146.   void execSUB_SYNC_CONTINUE_REQ(Signal* signal);
  147.   void execSUB_META_DATA(Signal* signal);
  148.   void execSUB_TABLE_DATA(Signal* signal);
  149.   // Utility functions
  150.   void setupSubscription(Signal* signal, SubscriptionRecPtr subRecPtr);
  151.   void setupTableScan(Signal* signal, SubscriptionRecPtr subRecPtr);
  152.   void startTableScan(Signal* signal, SubscriptionRecPtr subRecPtr);
  153.   void prepareInsertTransactions(Signal* signal, SubscriptionRecPtr subRecPtr);
  154.   void executeInsertTransaction(Signal* signal, SubscriptionRecPtr subRecPtr,
  155. SegmentedSectionPtr headerPtr,
  156. SegmentedSectionPtr dataPtr);
  157.   void buildComplete(Signal* signal, SubscriptionRecPtr subRecPtr);
  158.   void buildFailed(Signal* signal, 
  159.    SubscriptionRecPtr subRecPtr, 
  160.    BuildIndxRef::ErrorCode);
  161.   void checkParallelism(Signal* signal, SubscriptionRecord* subRec);
  162. };
  163. #endif