mysql5/mysql-5.7.27/storage/ndb/include/transporter/TransporterDefinitions.hpp

424 lines
11 KiB
C++

/*
Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
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; version 2 of the License.
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef TransporterDefinitions_H
#define TransporterDefinitions_H
#include <ndb_global.h>
#include <kernel_types.h>
#include <NdbOut.hpp>
/**
* The maximum number of transporters allowed
* A maximum is needed to be able to allocate the array of transporters
*/
const int MAX_NTRANSPORTERS = 256;
/**
* The sendbuffer limit after which the contents of the buffer is sent
*/
const int TCP_SEND_LIMIT = 64000;
enum SendStatus {
SEND_OK = 0,
SEND_BLOCKED = 1,
SEND_DISCONNECTED = 2,
SEND_BUFFER_FULL = 3,
SEND_MESSAGE_TOO_BIG = 4,
SEND_UNKNOWN_NODE = 5
};
enum TransporterType {
tt_TCP_TRANSPORTER = 1,
tt_SCI_TRANSPORTER = 2,
tt_SHM_TRANSPORTER = 3
};
enum SB_LevelType
{
SB_NO_RISK_LEVEL = 0,
SB_LOW_LEVEL = 1,
SB_MEDIUM_LEVEL = 2,
SB_HIGH_LEVEL = 3,
SB_RISK_LEVEL = 4,
SB_CRITICAL_LEVEL = 5
};
/**
* Maximum message sizes
* ---------------------
* Maximum byte sizes for sent and received messages.
* The maximum send message size is temporarily smaller than
* the maximum receive message size to support online
* upgrade
* Maximum received size increased in :
* mysql-5.1-telco-6.3.18 from 16516 bytes to 32768
* Maximum send size increased in :
* mysql-5.1-telco-6.4.0 from 16516 bytes to 32768
*
* Therefore mysql-5.1-telco-6.4.0 cannot safely communicate
* with nodes at versions lower than mysql-5.1-telco-6.3.18
*
*/
const Uint32 MAX_RECV_MESSAGE_BYTESIZE = 32768;
const Uint32 MAX_SEND_MESSAGE_BYTESIZE = 32768;
/**
* TransporterConfiguration
*
* used for setting up a transporter. the union member specific is for
* information specific to a transporter type.
*/
struct TransporterConfiguration {
Int32 s_port; // negative port number implies dynamic port
const char *remoteHostName;
const char *localHostName;
NodeId remoteNodeId;
NodeId localNodeId;
NodeId serverNodeId;
bool checksum;
bool signalId;
bool isMgmConnection; // is a mgm connection, requires transforming
TransporterType type;
union { // Transporter specific configuration information
struct {
Uint32 sendBufferSize; // Size of SendBuffer of priority B
Uint32 maxReceiveSize; // Maximum no of bytes to receive
Uint32 tcpSndBufSize;
Uint32 tcpRcvBufSize;
Uint32 tcpMaxsegSize;
Uint32 tcpOverloadLimit;
} tcp;
struct {
Uint32 shmKey;
Uint32 shmSize;
int signum;
} shm;
struct {
Uint32 sendLimit; // Packet size
Uint32 bufferSize; // Buffer size
Uint32 nLocalAdapters; // 1 or 2, the number of adapters on local host
Uint32 remoteSciNodeId0; // SCInodeId for adapter 1
Uint32 remoteSciNodeId1; // SCInodeId for adapter 2
} sci;
};
};
struct SignalHeader {
Uint32 theVerId_signalNumber; // 4 bit ver id - 16 bit gsn
Uint32 theReceiversBlockNumber; // Only 16 bit blocknum
Uint32 theSendersBlockRef;
Uint32 theLength;
Uint32 theSendersSignalId;
Uint32 theSignalId;
Uint16 theTrace;
Uint8 m_noOfSections;
Uint8 m_fragmentInfo;
}; /** 7x4 = 28 Bytes */
class NdbOut & operator <<(class NdbOut & out, SignalHeader & sh);
#define TE_DO_DISCONNECT 0x8000
enum TransporterError {
TE_NO_ERROR = 0,
/**
* TE_ERROR_CLOSING_SOCKET
*
* Error found during closing of socket
*
* Recommended behavior: Ignore
*/
TE_ERROR_CLOSING_SOCKET = 0x1,
/**
* TE_ERROR_IN_SELECT_BEFORE_ACCEPT
*
* Error found during accept (just before)
* The transporter will retry.
*
* Recommended behavior: Ignore
* (or possible do setPerformState(PerformDisconnect)
*/
TE_ERROR_IN_SELECT_BEFORE_ACCEPT = 0x2,
/**
* TE_INVALID_MESSAGE_LENGTH
*
* Error found in message (message length)
*
* Recommended behavior: setPerformState(PerformDisconnect)
*/
TE_INVALID_MESSAGE_LENGTH = 0x3 | TE_DO_DISCONNECT,
/**
* TE_INVALID_CHECKSUM
*
* Error found in message (checksum)
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
TE_INVALID_CHECKSUM = 0x4 | TE_DO_DISCONNECT,
/**
* TE_COULD_NOT_CREATE_SOCKET
*
* Error found while creating socket
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
TE_COULD_NOT_CREATE_SOCKET = 0x5,
/**
* TE_COULD_NOT_BIND_SOCKET
*
* Error found while binding server socket
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
TE_COULD_NOT_BIND_SOCKET = 0x6,
/**
* TE_LISTEN_FAILED
*
* Error found while listening to server socket
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
TE_LISTEN_FAILED = 0x7,
/**
* TE_ACCEPT_RETURN_ERROR
*
* Error found during accept
* The transporter will retry.
*
* Recommended behavior: Ignore
* (or possible do setPerformState(PerformDisconnect)
*/
TE_ACCEPT_RETURN_ERROR = 0x8
/**
* TE_SHM_DISCONNECT
*
* The remote node has disconnected
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SHM_DISCONNECT = 0xb | TE_DO_DISCONNECT
/**
* TE_SHM_IPC_STAT
*
* Unable to check shm segment
* probably because remote node
* has disconnected and removed it
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SHM_IPC_STAT = 0xc | TE_DO_DISCONNECT
/**
* Permanent error
*/
,TE_SHM_IPC_PERMANENT = 0x21
/**
* TE_SHM_UNABLE_TO_CREATE_SEGMENT
*
* Unable to create shm segment
* probably os something error
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SHM_UNABLE_TO_CREATE_SEGMENT = 0xd
/**
* TE_SHM_UNABLE_TO_ATTACH_SEGMENT
*
* Unable to attach shm segment
* probably invalid group / user
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SHM_UNABLE_TO_ATTACH_SEGMENT = 0xe
/**
* TE_SHM_UNABLE_TO_REMOVE_SEGMENT
*
* Unable to remove shm segment
*
* Recommended behavior: Ignore (not much to do)
* Print warning to logfile
*/
,TE_SHM_UNABLE_TO_REMOVE_SEGMENT = 0xf
,TE_TOO_SMALL_SIGID = 0x10
,TE_TOO_LARGE_SIGID = 0x11
,TE_WAIT_STACK_FULL = 0x12 | TE_DO_DISCONNECT
,TE_RECEIVE_BUFFER_FULL = 0x13 | TE_DO_DISCONNECT
/**
* TE_SIGNAL_LOST_SEND_BUFFER_FULL
*
* Send buffer is full, and trying to force send fails
* a signal is dropped!! very bad very bad
*
*/
,TE_SIGNAL_LOST_SEND_BUFFER_FULL = 0x14 | TE_DO_DISCONNECT
/**
* TE_SIGNAL_LOST
*
* Send failed for unknown reason
* a signal is dropped!! very bad very bad
*
*/
,TE_SIGNAL_LOST = 0x15
/**
* TE_SEND_BUFFER_FULL
*
* The send buffer was full, but sleeping for a while solved it
*/
,TE_SEND_BUFFER_FULL = 0x16
/**
* TE_SCI_UNABLE_TO_CLOSE_CHANNEL
*
* Unable to close the sci channel and the resources allocated by
* the sisci api.
*/
,TE_SCI_UNABLE_TO_CLOSE_CHANNEL = 0x22
/**
* TE_SCI_LINK_ERROR
*
* There is no link from this node to the switch.
* No point in continuing. Must check the connections.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_LINK_ERROR = 0x0017
/**
* TE_SCI_UNABLE_TO_START_SEQUENCE
*
* Could not start a sequence, because system resources
* are exumed or no sequence has been created.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_UNABLE_TO_START_SEQUENCE = 0x18 | TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_REMOVE_SEQUENCE
*
* Could not remove a sequence
*/
,TE_SCI_UNABLE_TO_REMOVE_SEQUENCE = 0x19 | TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_CREATE_SEQUENCE
*
* Could not create a sequence, because system resources are
* exempted. Must reboot.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_UNABLE_TO_CREATE_SEQUENCE = 0x1a | TE_DO_DISCONNECT
/**
* TE_SCI_UNRECOVERABLE_DATA_TFX_ERROR
*
* Tried to send data on redundant link but failed.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_UNRECOVERABLE_DATA_TFX_ERROR = 0x1b | TE_DO_DISCONNECT
/**
* TE_SCI_CANNOT_INIT_LOCALSEGMENT
*
* Cannot initialize local segment. A whole lot of things has
* gone wrong (no system resources). Must reboot.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_CANNOT_INIT_LOCALSEGMENT = 0x1c | TE_DO_DISCONNECT
/**
* TE_SCI_CANNOT_MAP_REMOTESEGMENT
*
* Cannot map remote segment. No system resources are left.
* Must reboot system.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_CANNOT_MAP_REMOTESEGMENT = 0x1d | TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_UNMAP_SEGMENT
*
* Cannot free the resources used by this segment (step 1).
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_UNABLE_TO_UNMAP_SEGMENT = 0x1e | TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_REMOVE_SEGMENT
*
* Cannot free the resources used by this segment (step 2).
* Cannot guarantee that enough resources exist for NDB
* to map more segment
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_UNABLE_TO_REMOVE_SEGMENT = 0x1f | TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_DISCONNECT_SEGMENT
*
* Cannot disconnect from a remote segment.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,TE_SCI_UNABLE_TO_DISCONNECT_SEGMENT = 0x20 | TE_DO_DISCONNECT
/* Used 0x21 */
/* Used 0x22 */
/**
* TE_UNSUPPORTED_BYTE_ORDER
*
* Error found in message (byte order)
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
, TE_UNSUPPORTED_BYTE_ORDER = 0x23 | TE_DO_DISCONNECT
/**
* TE_COMPRESSED_UNSUPPORTED
*
* Error found in message (compressed flag)
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
, TE_COMPRESSED_UNSUPPORTED = 0x24 | TE_DO_DISCONNECT
};
#endif // Define of TransporterDefinitions_H