summaryrefslogtreecommitdiff
path: root/ndb/include/kernel/signaldata/CheckNodeGroups.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/include/kernel/signaldata/CheckNodeGroups.hpp')
-rw-r--r--ndb/include/kernel/signaldata/CheckNodeGroups.hpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/ndb/include/kernel/signaldata/CheckNodeGroups.hpp b/ndb/include/kernel/signaldata/CheckNodeGroups.hpp
new file mode 100644
index 00000000000..9b2f847e128
--- /dev/null
+++ b/ndb/include/kernel/signaldata/CheckNodeGroups.hpp
@@ -0,0 +1,63 @@
+/* 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 CHECKNODEGROUPS_H
+#define CHECKNODEGROUPS_H
+
+#include <string.h>
+#include <NodeBitmask.hpp>
+#include "SignalData.hpp"
+#include "SignalDataPrint.hpp"
+
+/**
+ * Ask DIH to check if a node set can survive i.e. if it
+ * has at least one node in every node group. Returns one
+ * of Win, Lose, Partitioning.
+ *
+ * Same class is used for REQ and CONF. The REQ can also
+ * be executed as a direct signal.
+ */
+class CheckNodeGroups {
+public:
+ Uint32 blockRef; // sender's node id
+ union {
+ Uint32 requestType; // direct flag, output code
+ Uint32 output;
+ };
+ union {
+ Uint32 nodeId; // nodeId input for GetNodeGroupMembers
+ NodeBitmask mask; /* set of NDB nodes, input for ArbitCheck,
+ * output for GetNodeGroupMembers
+ */
+ };
+
+ enum RequestType {
+ Direct = 0x1,
+ ArbitCheck = 0x2,
+ GetNodeGroup = 0x4,
+ GetNodeGroupMembers = 0x8
+ };
+
+ enum Output {
+ Lose = 1, // we cannot survive
+ Win = 2, // we and only we can survive
+ Partitioning = 3 // possible network partitioning
+ };
+
+ STATIC_CONST( SignalLength = 2 + NodeBitmask::Size );
+};
+
+#endif