summaryrefslogtreecommitdiff
path: root/ndb/include/kernel/signaldata/LqhTransConf.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/include/kernel/signaldata/LqhTransConf.hpp')
-rw-r--r--ndb/include/kernel/signaldata/LqhTransConf.hpp218
1 files changed, 218 insertions, 0 deletions
diff --git a/ndb/include/kernel/signaldata/LqhTransConf.hpp b/ndb/include/kernel/signaldata/LqhTransConf.hpp
new file mode 100644
index 00000000000..f62dfd07f51
--- /dev/null
+++ b/ndb/include/kernel/signaldata/LqhTransConf.hpp
@@ -0,0 +1,218 @@
+/* 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 LQH_TRANS_CONF_H
+#define LQH_TRANS_CONF_H
+
+#include "SignalData.hpp"
+
+/**
+ * This signal is sent as response to a LQH_TRANSREQ
+ * which is sent as by a take-over TC
+ */
+class LqhTransConf {
+ /**
+ * Reciver(s)
+ */
+ friend class Dbtc;
+
+ /**
+ * Sender(s)
+ */
+ friend class Dblqh;
+
+ friend bool printLQH_TRANSCONF(FILE *, const Uint32 *, Uint32, Uint16);
+public:
+ STATIC_CONST( SignalLength = 15 );
+private:
+
+ /**
+ * This type describes the state of the operation returned in this signal
+ */
+ enum OperationStatus {
+ InvalidStatus = 0, /**< This status should never be sent in a signal
+ it is only used for initializing variables so that
+ you can easily later check if they have changed */
+ LastTransConf = 4, /**< This status indicates that LQH has finished the scan
+ of operations belonging to the died TC.
+ Data 0 - 2 is valid */
+
+ Prepared = 2,
+ Committed = 3,
+ Aborted = 1,
+ Marker = 5 /**< This means that the only thing left is a marker,
+ Data 0 - 6 is valid */
+ };
+
+ /**
+ * DATA VARIABLES
+ */
+ Uint32 tcRef; // 0
+ Uint32 lqhNodeId; // 1
+ Uint32 operationStatus; // 2 See enum OperationStatus
+ Uint32 transId1; // 3
+ Uint32 transId2; // 4
+ Uint32 apiRef; // 5
+ Uint32 apiOpRec; // 6
+ Uint32 lqhConnectPtr;
+ Uint32 oldTcOpRec;
+ Uint32 requestInfo;
+ Uint32 gci;
+ Uint32 nextNodeId1;
+ Uint32 nextNodeId2;
+ Uint32 nextNodeId3;
+ Uint32 tableId;
+
+ /**
+ * Getters
+ */
+ static Uint32 getReplicaNo(Uint32 & requestInfo);
+ static Uint32 getReplicaType(Uint32 & requestInfo);
+ static Uint32 getLastReplicaNo(Uint32 & requestInfo);
+ static Uint32 getSimpleFlag(Uint32 & requestInfo);
+ static Uint32 getDirtyFlag(Uint32 & requestInfo);
+ static Uint32 getOperation(Uint32 & requestInfo);
+ static Uint32 getMarkerFlag(Uint32 & requestInfo);
+
+ static void setReplicaNo(UintR & requestInfo, UintR val);
+ static void setReplicaType(UintR & requestInfo, UintR val);
+ static void setLastReplicaNo(UintR & requestInfo, UintR val);
+ static void setSimpleFlag(UintR & requestInfo, UintR val);
+ static void setDirtyFlag(UintR & requestInfo, UintR val);
+ static void setOperation(UintR & requestInfo, UintR val);
+ static void setMarkerFlag(Uint32 & requestInfo, Uint32 val);
+};
+
+/**
+ * Request Info
+ *
+ * t = replica type - 2 Bits (0-1)
+ * r = Replica No - 2 Bits (2-3)
+ * l = Last Replica No - 2 Bits (4-5)
+ * s = Simple - 1 Bits (6)
+ * d = Dirty - 1 Bit (7)
+ * o = Operation - 3 Bit (8-9)
+ * m = Marker present - 1 Bit (10)
+ *
+ * 1111111111222222222233
+ * 01234567890123456789012345678901
+ * ttrrllsdooom
+ */
+#define LTC_REPLICA_TYPE_SHIFT (0)
+#define LTC_REPLICA_TYPE_MASK (3)
+#define LTC_REPLICA_NO_SHIFT (2)
+#define LTC_REPLICA_NO_MASK (3)
+#define LTC_LAST_REPLICA_SHIFT (4)
+#define LTC_LAST_REPLICA_MASK (3)
+#define LTC_SIMPLE_SHIFT (6)
+#define LTC_DIRTY_SHIFT (7)
+#define LTC_OPERATION_SHIFT (8)
+#define LTC_OPERATION_MASK (7)
+#define LTC_MARKER_SHIFT (10)
+
+inline
+Uint32
+LqhTransConf::getReplicaType(Uint32 & requestInfo){
+ return (requestInfo >> LTC_REPLICA_TYPE_SHIFT) & LTC_REPLICA_TYPE_MASK;
+}
+
+inline
+Uint32
+LqhTransConf::getReplicaNo(Uint32 & requestInfo){
+ return (requestInfo >> LTC_REPLICA_NO_SHIFT) & LTC_REPLICA_NO_MASK;
+}
+
+inline
+Uint32
+LqhTransConf::getLastReplicaNo(Uint32 & requestInfo){
+ return (requestInfo >> LTC_LAST_REPLICA_SHIFT) & LTC_LAST_REPLICA_MASK;
+}
+
+inline
+Uint32
+LqhTransConf::getSimpleFlag(Uint32 & requestInfo){
+ return (requestInfo >> LTC_SIMPLE_SHIFT) & 1;
+}
+
+inline
+Uint32
+LqhTransConf::getDirtyFlag(Uint32 & requestInfo){
+ return (requestInfo >> LTC_DIRTY_SHIFT) & 1;
+}
+
+inline
+Uint32
+LqhTransConf::getOperation(Uint32 & requestInfo){
+ return (requestInfo >> LTC_OPERATION_SHIFT) & LTC_OPERATION_MASK;
+}
+
+inline
+Uint32
+LqhTransConf::getMarkerFlag(Uint32 & requestInfo){
+ return (requestInfo >> LTC_MARKER_SHIFT) & 1;
+}
+
+
+inline
+void
+LqhTransConf::setReplicaNo(UintR & requestInfo, UintR val){
+ ASSERT_MAX(val, LTC_REPLICA_NO_MASK, "LqhTransConf::setReplicaNo");
+ requestInfo |= (val << LTC_REPLICA_NO_SHIFT);
+}
+
+inline
+void
+LqhTransConf::setReplicaType(UintR & requestInfo, UintR val){
+ ASSERT_MAX(val, LTC_REPLICA_TYPE_MASK, "LqhTransConf::setReplicaType");
+ requestInfo |= (val << LTC_REPLICA_TYPE_SHIFT);
+}
+
+inline
+void
+LqhTransConf::setLastReplicaNo(UintR & requestInfo, UintR val){
+ ASSERT_MAX(val, LTC_LAST_REPLICA_MASK, "LqhTransConf::setLastReplicaNo");
+ requestInfo |= (val << LTC_LAST_REPLICA_SHIFT);
+}
+
+inline
+void
+LqhTransConf::setSimpleFlag(UintR & requestInfo, UintR val){
+ ASSERT_BOOL(val, "LqhTransConf::setSimpleFlag");
+ requestInfo |= (val << LTC_SIMPLE_SHIFT);
+}
+
+inline
+void
+LqhTransConf::setDirtyFlag(UintR & requestInfo, UintR val){
+ ASSERT_BOOL(val, "LqhTransConf::setDirtyFlag");
+ requestInfo |= (val << LTC_DIRTY_SHIFT);
+}
+
+inline
+void
+LqhTransConf::setOperation(UintR & requestInfo, UintR val){
+ ASSERT_MAX(val, LTC_OPERATION_MASK, "LqhTransConf::setOperation");
+ requestInfo |= (val << LTC_OPERATION_SHIFT);
+}
+
+inline
+void
+LqhTransConf::setMarkerFlag(UintR & requestInfo, UintR val){
+ ASSERT_BOOL(val, "LqhTransConf::setMarkerFlag");
+ requestInfo |= (val << LTC_MARKER_SHIFT);
+}
+
+#endif