1 /* 2 Copyright (c) 2003, 2021, Oracle and/or its affiliates. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License, version 2.0, 6 as published by the Free Software Foundation. 7 8 This program is also distributed with certain software (including 9 but not limited to OpenSSL) that is licensed under separate terms, 10 as designated in a particular file or component or in included license 11 documentation. The authors of MySQL hereby grant you an additional 12 permission to link the program and your derivative works with the 13 separately licensed software that they have included with MySQL. 14 15 This program is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 GNU General Public License, version 2.0, for more details. 19 20 You should have received a copy of the GNU General Public License 21 along with this program; if not, write to the Free Software 22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 23 */ 24 25 #ifndef CHECKNODEGROUPS_H 26 #define CHECKNODEGROUPS_H 27 28 #include <string.h> 29 #include <NodeBitmask.hpp> 30 #include "SignalData.hpp" 31 #include "SignalDataPrint.hpp" 32 33 #define JAM_FILE_ID 190 34 35 36 /** 37 * Ask DIH to check if a node set can survive i.e. if it 38 * has at least one node in every node group. Returns one 39 * of Win, Lose, Partitioning. 40 * 41 * Same class is used for REQ and CONF. The REQ can also 42 * be executed as a direct signal. 43 */ 44 class CheckNodeGroups { 45 public: 46 Uint32 blockRef; // sender's node id 47 union { 48 Uint32 requestType; // direct flag, output code 49 Uint32 output; 50 }; 51 52 union { 53 Uint32 nodeId; // nodeId input for GetNodeGroupMembers 54 Uint32 extraNodeGroups; // For GetDefaultFragments 55 }; 56 NdbNodeBitmaskPOD mask; /* set of NDB nodes, input for ArbitCheck, 57 * output for GetNodeGroupMembers 58 */ 59 Uint32 senderData; // Sender data, kept in return signal 60 61 enum RequestType { 62 Direct = 0x1, 63 ArbitCheck = 0x2, 64 GetNodeGroup = 0x4, 65 GetNodeGroupMembers = 0x8, 66 GetDefaultFragments = 0x10 67 }; 68 69 enum Output { 70 Lose = 1, // we cannot survive 71 Win = 2, // we and only we can survive 72 Partitioning = 3 // possible network partitioning 73 }; 74 75 STATIC_CONST( SignalLength = 4 + NdbNodeBitmask::Size ); 76 }; 77 78 79 #undef JAM_FILE_ID 80 81 #endif 82