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

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 GLOBAL_DATA_H
  14. #define GLOBAL_DATA_H
  15. #include <ndb_global.h>
  16. #include <kernel_types.h>
  17. #include "Prio.hpp"
  18. #include "VMSignal.hpp"
  19. #include <BlockNumbers.h>
  20. #include <NodeState.hpp>
  21. #include <NodeInfo.hpp>
  22. class SimulatedBlock;
  23. enum  restartStates {initial_state, 
  24.                      perform_start, 
  25.                      system_started, 
  26.                      perform_stop};
  27. struct GlobalData {
  28.   NodeInfo   m_nodeInfo[MAX_NODES];
  29.   Signal     VMSignals[1];             // Owned by FastScheduler::
  30.   
  31.   Uint64     internalMillisecCounter; // Owned by ThreadConfig::
  32.   Uint32     highestAvailablePrio;    // Owned by FastScheduler::
  33.   Uint32     JobCounter;              // Owned by FastScheduler
  34.   Uint64     JobLap;                  // Owned by FastScheduler
  35.   Uint32     loopMax;                 // Owned by FastScheduler
  36.   
  37.   Uint32     theNextTimerJob;         // Owned by TimeQueue::
  38.   Uint32     theCurrentTimer;         // Owned by TimeQueue::
  39.   Uint32     theShortTQIndex;         // Owned by TimeQueue::
  40.   
  41.   Uint32     theLongTQIndex;          // Owned by TimeQueue::
  42.   Uint32     theCountTimer;           // Owned by TimeQueue::
  43.   Uint32     theFirstFreeTQIndex;     // Owned by TimeQueue::
  44.   Uint32     testOn;                  // Owned by the Signal Loggers
  45.   
  46.   NodeId     ownId;                   // Own processor id
  47.   
  48.   Uint32     theStartLevel;
  49.   restartStates theRestartFlag;
  50.   Uint32     theSignalId;
  51.   
  52.   Uint32     sendPackedActivated;
  53.   Uint32     activateSendPacked;
  54.   
  55.   GlobalData(){ 
  56.     theSignalId = 0; 
  57.     theStartLevel = NodeState::SL_NOTHING;
  58.     theRestartFlag = perform_start;
  59.   }
  60.   ~GlobalData(){}
  61.   
  62.   void             setBlock(BlockNumber blockNo, SimulatedBlock * block);
  63.   SimulatedBlock * getBlock(BlockNumber blockNo);
  64.   
  65.   void           incrementWatchDogCounter(Uint32 place);
  66.   const Uint32 * getWatchDogPtr();
  67.   
  68. private:
  69.   Uint32     watchDog;
  70.   SimulatedBlock* blockTable[NO_OF_BLOCKS]; // Owned by Dispatcher::
  71. };
  72. extern GlobalData globalData;
  73. #define GLOBAL_TEST_ON (localTestOn)
  74. #define GET_GLOBAL_TEST_FLAG bool localTestOn = globalData.testOn
  75. #define SET_GLOBAL_TEST_ON (globalData.testOn = true)
  76. #define SET_GLOBAL_TEST_OFF (globalData.testOn = false)
  77. #define TOGGLE_GLOBAL_TEST_FLAG (globalData.testOn = (globalData.testOn == true ? false : true))
  78. inline
  79. void
  80. GlobalData::setBlock(BlockNumber blockNo, SimulatedBlock * block){
  81.   blockNo -= MIN_BLOCK_NO;
  82.   assert((blockTable[blockNo] == 0) || (blockTable[blockNo] == block));
  83.   blockTable[blockNo] = block;
  84. }
  85. inline
  86. SimulatedBlock *
  87. GlobalData::getBlock(BlockNumber blockNo){
  88.   blockNo -= MIN_BLOCK_NO;
  89.   return blockTable[blockNo];
  90. }
  91. inline
  92. void
  93. GlobalData::incrementWatchDogCounter(Uint32 place){
  94.   watchDog = place;
  95. }
  96. inline
  97. const Uint32 *
  98. GlobalData::getWatchDogPtr(){
  99.   return &watchDog;
  100. }
  101. #endif