mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 06:22:28 +01:00
6386c55cee
BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
619 lines
13 KiB
C++
619 lines
13 KiB
C++
/* 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 SUMA_IMPL_HPP
|
|
#define SUMA_IMPL_HPP
|
|
|
|
#include "SignalData.hpp"
|
|
#include <NodeBitmask.hpp>
|
|
|
|
|
|
class SubCreateReq {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printSUB_CREATE_REQ(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 5 );
|
|
|
|
enum SubscriptionType {
|
|
SingleTableScan = 1, //
|
|
DatabaseSnapshot = 2, // All tables/all data (including new ones)
|
|
TableEvent = 3, //
|
|
SelectiveTableSnapshot = 4, // User defines tables
|
|
RemoveFlags = 0xff,
|
|
GetFlags = 0xff << 16,
|
|
AddTableFlag = 0x1 << 16,
|
|
RestartFlag = 0x2 << 16
|
|
};
|
|
|
|
Uint32 subscriberRef;
|
|
Uint32 subscriberData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 subscriptionType;
|
|
union {
|
|
Uint32 tableId; // Used when doing SingelTableScan
|
|
};
|
|
SECTION( ATTRIBUTE_LIST = 0); // Used when doing SingelTableScan
|
|
SECTION( TABLE_LIST = 1 );
|
|
|
|
};
|
|
|
|
class SubCreateRef {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printSUB_CREATE_REF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 6 );
|
|
|
|
Uint32 subscriberRef;
|
|
Uint32 subscriberData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 subscriptionType;
|
|
Uint32 err;
|
|
|
|
SECTION( ATTRIBUTE_LIST = 0); // Used when doing SingelTableScan
|
|
union {
|
|
Uint32 tableId; // Used when doing SingelTableScan
|
|
};
|
|
};
|
|
|
|
class SubCreateConf {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printSUB_CREATE_CONF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 3 );
|
|
|
|
Uint32 subscriberData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
};
|
|
|
|
class SubscriptionData {
|
|
public:
|
|
enum Part {
|
|
MetaData = 1,
|
|
TableData = 2
|
|
};
|
|
};
|
|
|
|
class SubStartReq {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Suma;
|
|
|
|
friend bool printSUB_START_REQ(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 6 );
|
|
STATIC_CONST( SignalLength2 = SignalLength+1 );
|
|
|
|
Uint32 senderRef;
|
|
Uint32 senderData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 part; // SubscriptionData::Part
|
|
Uint32 subscriberData;
|
|
Uint32 subscriberRef;
|
|
};
|
|
|
|
class SubStartRef {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Suma;
|
|
|
|
friend bool printSUB_START_REF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
enum ErrorCode {
|
|
Undefined = 0,
|
|
NF_FakeErrorREF = 11,
|
|
Busy = 701,
|
|
Temporary = 0x1 << 16
|
|
};
|
|
bool isTemporary() const;
|
|
void setTemporary();
|
|
ErrorCode setTemporary(ErrorCode ec);
|
|
|
|
STATIC_CONST( SignalLength = 7 );
|
|
STATIC_CONST( SignalLength2 = SignalLength+1 );
|
|
|
|
Uint32 senderRef;
|
|
Uint32 senderData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 part; // SubscriptionData::Part
|
|
Uint32 subscriberData;
|
|
union { // do not change the order here!
|
|
Uint32 err;
|
|
Uint32 errorCode;
|
|
};
|
|
// with SignalLength2
|
|
Uint32 subscriberRef;
|
|
};
|
|
inline bool SubStartRef::isTemporary() const
|
|
{ return (errorCode & SubStartRef::Temporary) > 0; };
|
|
inline void SubStartRef::setTemporary()
|
|
{ errorCode |= SubStartRef::Temporary; };
|
|
inline SubStartRef::ErrorCode SubStartRef::setTemporary(ErrorCode ec)
|
|
{ return (SubStartRef::ErrorCode)
|
|
(errorCode = ((Uint32) ec | (Uint32)SubStartRef::Temporary)); };
|
|
|
|
class SubStartConf {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Grep;
|
|
|
|
friend bool printSUB_START_CONF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 7 );
|
|
STATIC_CONST( SignalLength2 = SignalLength+1 );
|
|
|
|
Uint32 senderRef;
|
|
Uint32 senderData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 firstGCI;
|
|
Uint32 part; // SubscriptionData::Part
|
|
Uint32 subscriberData;
|
|
// with SignalLength2
|
|
Uint32 subscriberRef;
|
|
};
|
|
|
|
class SubStopReq {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Suma;
|
|
|
|
friend bool printSUB_STOP_REQ(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 7 );
|
|
Uint32 senderRef;
|
|
Uint32 senderData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 part; // SubscriptionData::Part
|
|
Uint32 subscriberData;
|
|
Uint32 subscriberRef;
|
|
};
|
|
|
|
class SubStopRef {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Suma;
|
|
|
|
friend bool printSUB_STOP_REF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
enum ErrorCode {
|
|
Undefined = 0,
|
|
NF_FakeErrorREF = 11,
|
|
Busy = 701,
|
|
Temporary = 0x1 << 16
|
|
};
|
|
bool isTemporary() const;
|
|
void setTemporary();
|
|
ErrorCode setTemporary(ErrorCode ec);
|
|
|
|
STATIC_CONST( SignalLength = 8 );
|
|
|
|
Uint32 senderRef;
|
|
Uint32 senderData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 part; // SubscriptionData::Part
|
|
Uint32 subscriberData;
|
|
Uint32 subscriberRef;
|
|
union {
|
|
Uint32 err;
|
|
Uint32 errorCode;
|
|
};
|
|
};
|
|
inline bool SubStopRef::isTemporary() const
|
|
{ return (errorCode & SubStopRef::Temporary) > 0; };
|
|
inline void SubStopRef::setTemporary()
|
|
{ errorCode |= SubStopRef::Temporary; };
|
|
inline SubStopRef::ErrorCode SubStopRef::setTemporary(ErrorCode ec)
|
|
{ return (SubStopRef::ErrorCode)
|
|
(errorCode = ((Uint32) ec | (Uint32)SubStopRef::Temporary)); };
|
|
|
|
class SubStopConf {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Grep;
|
|
|
|
friend bool printSUB_STOP_CONF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 7 );
|
|
|
|
Uint32 senderRef;
|
|
Uint32 senderData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 part; // SubscriptionData::Part
|
|
Uint32 subscriberData;
|
|
Uint32 subscriberRef;
|
|
};
|
|
|
|
class SubSyncReq {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Suma;
|
|
friend class Grep;
|
|
|
|
friend bool printSUB_SYNC_REQ(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 4 );
|
|
|
|
public:
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 subscriberData;
|
|
Uint32 part; // SubscriptionData::Part
|
|
};
|
|
|
|
class SubSyncRef {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Suma;
|
|
friend class Grep;
|
|
|
|
friend bool printSUB_SYNC_REF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
enum ErrorCode {
|
|
Undefined = 0,
|
|
Temporary = 0x1 << 16
|
|
};
|
|
STATIC_CONST( SignalLength = 5 );
|
|
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 part; // SubscriptionData::Part
|
|
Uint32 subscriberData;
|
|
union {
|
|
Uint32 errorCode;
|
|
Uint32 err;
|
|
};
|
|
};
|
|
|
|
class SubSyncConf {
|
|
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Suma;
|
|
friend class Grep;
|
|
|
|
friend bool printSUB_SYNC_CONF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 4 );
|
|
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 part; // SubscriptionData::Part
|
|
Uint32 subscriberData;
|
|
};
|
|
|
|
class SubMetaData {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class SumaParticipant;
|
|
friend class Grep;
|
|
|
|
friend bool printSUB_META_DATA(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 3 );
|
|
SECTION( DICT_TAB_INFO = 0 );
|
|
|
|
Uint32 gci;
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
union {
|
|
Uint32 tableId;
|
|
};
|
|
};
|
|
|
|
class SubTableData {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class SumaParticipant;
|
|
friend class Grep;
|
|
|
|
friend bool printSUB_TABLE_DATA(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 7 );
|
|
|
|
enum LogType {
|
|
SCAN = 1,
|
|
LOG = 2,
|
|
REMOVE_FLAGS = 0xff,
|
|
GCINOTCONSISTENT = 0x1 << 16
|
|
};
|
|
|
|
void setGCINotConsistent() { logType |= (Uint32)GCINOTCONSISTENT; };
|
|
bool isGCIConsistent()
|
|
{ return (logType & (Uint32)GCINOTCONSISTENT) == 0 ? true : false; };
|
|
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
Uint32 gci;
|
|
Uint32 tableId;
|
|
Uint32 operation;
|
|
Uint32 noOfAttributes;
|
|
Uint32 dataSize;
|
|
Uint32 logType;
|
|
};
|
|
|
|
class SubSyncContinueReq {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class SumaParticipant;
|
|
friend class Grep;
|
|
friend class Trix;
|
|
|
|
friend bool printSUB_SYNC_CONTINUE_REQ(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 2 );
|
|
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
Uint32 noOfRowsSent;
|
|
};
|
|
|
|
class SubSyncContinueRef {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class SumaParticipant;
|
|
friend class Grep;
|
|
friend class Trix;
|
|
|
|
friend bool printSUB_SYNC_CONTINUE_REF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 2 );
|
|
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
};
|
|
|
|
class SubSyncContinueConf {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class SumaParticipant;
|
|
friend class Grep;
|
|
friend class Trix;
|
|
|
|
friend bool printSUB_SYNC_CONTINUE_CONF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 2 );
|
|
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
};
|
|
|
|
class SubGcpCompleteRep {
|
|
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Dbdih;
|
|
friend class SumaParticipant;
|
|
friend class Grep;
|
|
friend class Trix;
|
|
|
|
friend bool printSUB_GCP_COMPLETE_REP(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 3 );
|
|
|
|
Uint32 gci;
|
|
Uint32 senderRef;
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
};
|
|
|
|
class SubGcpCompleteAcc {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
public:
|
|
STATIC_CONST( SignalLength = SubGcpCompleteRep::SignalLength );
|
|
|
|
SubGcpCompleteRep rep;
|
|
};
|
|
|
|
class SubRemoveReq {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printSUB_REMOVE_REQ(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 4 );
|
|
|
|
Uint32 senderRef;
|
|
Uint32 senderData;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
};
|
|
|
|
class SubRemoveRef {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printSUB_REMOVE_REF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 5 );
|
|
enum ErrorCode {
|
|
Undefined = 0,
|
|
NF_FakeErrorREF = 11,
|
|
Busy = 701,
|
|
Temporary = 0x1 << 16
|
|
};
|
|
bool isTemporary() const;
|
|
void setTemporary();
|
|
ErrorCode setTemporary(ErrorCode ec);
|
|
|
|
Uint32 senderRef;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
union {
|
|
Uint32 err;
|
|
Uint32 errorCode;
|
|
};
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
};
|
|
inline bool SubRemoveRef::isTemporary() const
|
|
{ return (err & SubRemoveRef::Temporary) > 0; };
|
|
inline void SubRemoveRef::setTemporary()
|
|
{ err |= SubRemoveRef::Temporary; };
|
|
inline SubRemoveRef::ErrorCode SubRemoveRef::setTemporary(ErrorCode ec)
|
|
{ return (SubRemoveRef::ErrorCode)
|
|
(errorCode = ((Uint32) ec | (Uint32)SubRemoveRef::Temporary)); };
|
|
|
|
class SubRemoveConf {
|
|
/**
|
|
* Sender(s)/Reciver(s)
|
|
*/
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printSUB_REMOVE_CONF(FILE *, const Uint32 *, Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 5 );
|
|
|
|
Uint32 senderRef;
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 err;
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
|
|
};
|
|
|
|
|
|
class CreateSubscriptionIdReq {
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printCREATE_SUBSCRIPTION_ID_REQ(FILE *, const Uint32 *,
|
|
Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 3 );
|
|
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
};
|
|
|
|
|
|
class CreateSubscriptionIdConf {
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printCREATE_SUBSCRIPTION_ID_CONF(FILE *, const Uint32 *,
|
|
Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 3 );
|
|
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
};
|
|
|
|
|
|
class CreateSubscriptionIdRef {
|
|
friend class Grep;
|
|
friend class SumaParticipant;
|
|
|
|
friend bool printCREATE_SUBSCRIPTION_ID_REF(FILE *, const Uint32 *,
|
|
Uint32, Uint16);
|
|
public:
|
|
STATIC_CONST( SignalLength = 4 );
|
|
|
|
Uint32 subscriptionId;
|
|
Uint32 subscriptionKey;
|
|
Uint32 err;
|
|
union { // Haven't decide what to call it
|
|
Uint32 senderData;
|
|
Uint32 subscriberData;
|
|
};
|
|
};
|
|
|
|
class SumaStartMe {
|
|
public:
|
|
STATIC_CONST( SignalLength = 1 );
|
|
Uint32 unused;
|
|
};
|
|
|
|
class SumaHandoverReq {
|
|
public:
|
|
STATIC_CONST( SignalLength = 1 );
|
|
Uint32 gci;
|
|
};
|
|
|
|
class SumaHandoverConf {
|
|
public:
|
|
STATIC_CONST( SignalLength = 1 );
|
|
Uint32 gci;
|
|
};
|
|
#endif
|