⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arbitsignaldata.hpp

📁 mysql-5.0.22.tar.gz源码包
💻 HPP
字号:
/* 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 */#ifndef ARBIT_SIGNAL_DATA_H#define ARBIT_SIGNAL_DATA_H#include <string.h>#include <NodeBitmask.hpp>#include <NdbTick.h>#include <NdbHost.h>#include "SignalData.hpp"#include "SignalDataPrint.hpp"/** * The ticket. */class ArbitTicket {private:  Uint32 data[2];public:  STATIC_CONST( DataLength = 2 );  STATIC_CONST( TextLength = DataLength * 8 );  // hex digits  inline void clear() {    data[0] = 0;    data[1] = 0;  }  inline void update() {    Uint16 cnt = data[0] & 0xFFFF;              // previous count    Uint16 pid = NdbHost_GetProcessId();    data[0] = (pid << 16) | (cnt + 1);    data[1] = NdbTick_CurrentMillisecond();  }  inline bool match(ArbitTicket& aTicket) const {    return      data[0] == aTicket.data[0] &&      data[1] == aTicket.data[1];  }  inline void getText(char *buf, size_t buf_len) const {    BaseString::snprintf(buf, buf_len, "%08x%08x", data[0], data[1]);  }/*  inline char* getText() const {    static char buf[TextLength + 1];    getText(buf, sizeof(buf));    return buf;  } */};/** * Result codes.  Part of signal data.  Each signal uses only * a subset but a common namespace is convenient. */class ArbitCode {public:  STATIC_CONST( ErrTextLength = 80 );  enum {    NoInfo = 0,    // CFG signals    CfgRank1 = 1,               // these have to be 1 and 2    CfgRank2 = 2,    // QMGR continueB thread state    ThreadStart = 11,           // continueB thread started    // PREP signals    PrepPart1 = 21,             // zero old ticket    PrepPart2 = 22,             // get new ticket    PrepAtrun = 23,             // late joiner gets ticket at RUN time    // arbitrator state    ApiStart = 31,              // arbitrator thread started    ApiFail = 32,               // arbitrator died    ApiExit = 33,               // arbitrator reported it will exit    // arbitration result    LoseNodes = 41,             // lose on ndb node count    WinNodes = 42,              // win on ndb node count    WinGroups = 43,             // we win, no need for arbitration    LoseGroups = 44,            // we lose, missing node group    Partitioning = 45,          // possible network partitioning    WinChoose = 46,             // positive reply    LoseChoose = 47,            // negative reply    LoseNorun = 48,             // arbitrator required but not running    LoseNocfg = 49,             // arbitrator required but none configured    // general error codes    ErrTicket = 91,             // invalid arbitrator-ticket    ErrToomany = 92,            // too many requests    ErrState = 93,              // invalid state    ErrTimeout = 94,            // timeout waiting for signals    ErrUnknown = 95             // unknown error  };  static inline void getErrText(Uint32 code, char* buf, size_t buf_len) {    switch (code) {    case ErrTicket:      BaseString::snprintf(buf, buf_len, "invalid arbitrator-ticket");      break;    case ErrToomany:      BaseString::snprintf(buf, buf_len, "too many requests");      break;    case ErrState:      BaseString::snprintf(buf, buf_len, "invalid state");      break;    case ErrTimeout:      BaseString::snprintf(buf, buf_len, "timeout");      break;    default:      BaseString::snprintf(buf, buf_len, "unknown error [code=%u]", code);      break;    }  }};/** * Common class for arbitration signal data. */class ArbitSignalData {public:  Uint32 sender;                // sender's node id (must be word 0)  Uint32 code;                  // result code or other info  Uint32 node;                  // arbitrator node id  ArbitTicket ticket;           // ticket  NodeBitmask mask;             // set of nodes  STATIC_CONST( SignalLength = 3 + ArbitTicket::DataLength + NodeBitmask::Size );  inline bool match(ArbitSignalData& aData) const {    return      node == aData.node &&      ticket.match(aData.ticket);  }};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -