summaryrefslogtreecommitdiff
path: root/storage/ndb/include/kernel/signaldata/FsOpenReq.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/include/kernel/signaldata/FsOpenReq.hpp')
-rw-r--r--storage/ndb/include/kernel/signaldata/FsOpenReq.hpp267
1 files changed, 267 insertions, 0 deletions
diff --git a/storage/ndb/include/kernel/signaldata/FsOpenReq.hpp b/storage/ndb/include/kernel/signaldata/FsOpenReq.hpp
new file mode 100644
index 00000000000..906bb947128
--- /dev/null
+++ b/storage/ndb/include/kernel/signaldata/FsOpenReq.hpp
@@ -0,0 +1,267 @@
+/* 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 FS_OPEN_REQ_H
+#define FS_OPEN_REQ_H
+
+#include "SignalData.hpp"
+
+/**
+ *
+ * SENDER:
+ * RECIVER: Ndbfs
+ */
+class FsOpenReq {
+ /**
+ * Reciver(s)
+ */
+ friend class Ndbfs; // Reciver
+ friend class AsyncFile; // Uses FsOpenReq to decode file open flags
+ friend class Filename;
+ friend class VoidFs;
+
+ /**
+ * Sender(s)
+ */
+ friend class Backup;
+ friend class Dbdict;
+ friend class Ndbcntr; // For initial start...
+ friend class Dbdih;
+
+ /**
+ * For printing
+ */
+ friend bool printFSOPENREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
+
+public:
+ /**
+ * Length of signal
+ */
+ STATIC_CONST( SignalLength = 7 );
+
+private:
+
+ /**
+ * DATA VARIABLES
+ */
+
+ UintR userReference; // DATA 0
+ UintR userPointer; // DATA 1
+ UintR fileNumber[4]; // DATA 2 - 5
+ UintR fileFlags; // DATA 6
+
+ STATIC_CONST( OM_READONLY = 0 );
+ STATIC_CONST( OM_WRITEONLY = 1 );
+ STATIC_CONST( OM_READWRITE = 2 );
+
+ STATIC_CONST( OM_APPEND = 0x8 ); // Not Implemented on W2k
+ STATIC_CONST( OM_SYNC = 0x10 );
+ STATIC_CONST( OM_CREATE = 0x100 );
+ STATIC_CONST( OM_TRUNCATE = 0x200 );
+
+ enum Suffixes {
+ S_DATA = 0,
+ S_FRAGLOG = 1,
+ S_LOGLOG = 2,
+ S_FRAGLIST = 3,
+ S_TABLELIST = 4,
+ S_SCHEMALOG = 5,
+ S_SYSFILE = 6,
+ S_LOG = 7,
+ S_CTL = 8
+ };
+
+ static Uint32 getVersion(const Uint32 fileNumber[]);
+ static Uint32 getSuffix(const Uint32 fileNumber[]);
+
+ static void setVersion(Uint32 fileNumber[], Uint8 val);
+ static void setSuffix(Uint32 fileNumber[], Uint8 val);
+
+ /**
+ * V1
+ */
+ static Uint32 v1_getDisk(const Uint32 fileNumber[]);
+ static Uint32 v1_getTable(const Uint32 fileNumber[]);
+ static Uint32 v1_getFragment(const Uint32 fileNumber[]);
+ static Uint32 v1_getS(const Uint32 fileNumber[]);
+ static Uint32 v1_getP(const Uint32 fileNumber[]);
+
+ static void v1_setDisk(Uint32 fileNumber[], Uint8 val);
+ static void v1_setTable(Uint32 fileNumber[], Uint32 val);
+ static void v1_setFragment(Uint32 fileNumber[], Uint32 val);
+ static void v1_setS(Uint32 fileNumber[], Uint32 val);
+ static void v1_setP(Uint32 fileNumber[], Uint8 val);
+
+ /**
+ * V2 - Backup
+ */
+ static Uint32 v2_getSequence(const Uint32 fileNumber[]);
+ static Uint32 v2_getNodeId(const Uint32 fileNumber[]);
+ static Uint32 v2_getCount(const Uint32 fileNumber[]);
+
+ static void v2_setSequence(Uint32 fileNumber[], Uint32 no);
+ static void v2_setNodeId(Uint32 fileNumber[], Uint32 no);
+ static void v2_setCount(Uint32 fileNumber[], Uint32 no);
+};
+
+/**
+ * File flags (set according to solaris standard)
+ *
+ o = Open mode - 2 Bits -> max 3
+ c = create new file - 1 Bit
+ t = truncate existing - 1 Bit
+
+ 1111111111222222222233
+ 01234567890123456789012345678901
+ oo ct
+*/
+
+
+/**
+ * -- v1 --
+ * File number[0] = Table
+ * File number[1] = Fragment
+ * File number[2] = S-value
+ * File number[3] =
+ * p = v1_P 0 - 7
+ * d = v1_disk 8 - 15
+ * s = v1_suffix 16 - 23
+ * v = version 24 - 31
+ *
+ * 1111111111222222222233
+ * 01234567890123456789012345678901
+ * ppppppppddddddddssssssssvvvvvvvv
+ *
+ * -- v2 --
+ * File number[0] = Backup Sequence Number
+ * File number[1] = Node Id
+ * File number[3] =
+ * v = version 24 - 31
+ * s = v1_suffix 16 - 23
+ *
+ * 1111111111222222222233
+ * 01234567890123456789012345678901
+ * ppppppppddddddddssssssssvvvvvvvv
+ *
+ */
+inline
+Uint32 FsOpenReq::getVersion(const Uint32 fileNumber[]){
+ return (fileNumber[3] >> 24) & 0xff;
+}
+
+inline
+void FsOpenReq::setVersion(Uint32 fileNumber[], Uint8 val){
+ const Uint32 t = fileNumber[3];
+ fileNumber[3] = t & 0x00FFFFFF | (((Uint32)val) << 24);
+}
+
+inline
+Uint32 FsOpenReq::getSuffix(const Uint32 fileNumber[]){
+ return (fileNumber[3] >> 16)& 0xff;
+}
+
+inline
+void FsOpenReq::setSuffix(Uint32 fileNumber[], Uint8 val){
+ const Uint32 t = fileNumber[3];
+ fileNumber[3] = t & 0xFF00FFFF | (((Uint32)val) << 16);
+}
+
+inline
+Uint32 FsOpenReq::v1_getDisk(const Uint32 fileNumber[]){
+ return (fileNumber[3]>>8) & 0xff;
+}
+
+inline
+void FsOpenReq::v1_setDisk(Uint32 fileNumber[], Uint8 val){
+ const Uint32 t = fileNumber[3];
+ fileNumber[3] = t & 0xFFFF00FF | (((Uint32)val) << 8);
+}
+
+inline
+Uint32 FsOpenReq::v1_getTable(const Uint32 fileNumber[]){
+ return fileNumber[0];
+}
+
+inline
+void FsOpenReq::v1_setTable(Uint32 fileNumber[], Uint32 val){
+ fileNumber[0] = val;
+}
+
+inline
+Uint32 FsOpenReq::v1_getFragment(const Uint32 fileNumber[]){
+ return fileNumber[1];
+}
+
+inline
+void FsOpenReq::v1_setFragment(Uint32 fileNumber[], Uint32 val){
+ fileNumber[1] = val;
+}
+
+inline
+Uint32 FsOpenReq::v1_getS(const Uint32 fileNumber[]){
+ return fileNumber[2];
+}
+
+inline
+void FsOpenReq::v1_setS(Uint32 fileNumber[], Uint32 val){
+ fileNumber[2] = val;
+}
+
+inline
+Uint32 FsOpenReq::v1_getP(const Uint32 fileNumber[]){
+ return fileNumber[3] & 0xff;
+}
+
+inline
+void FsOpenReq::v1_setP(Uint32 fileNumber[], Uint8 val){
+ const Uint32 t = fileNumber[3];
+ fileNumber[3] = t & 0xFFFFFF00 | val;
+}
+
+/****************/
+inline
+Uint32 FsOpenReq::v2_getSequence(const Uint32 fileNumber[]){
+ return fileNumber[0];
+}
+
+inline
+void FsOpenReq::v2_setSequence(Uint32 fileNumber[], Uint32 val){
+ fileNumber[0] = val;
+}
+
+inline
+Uint32 FsOpenReq::v2_getNodeId(const Uint32 fileNumber[]){
+ return fileNumber[1];
+}
+
+inline
+void FsOpenReq::v2_setNodeId(Uint32 fileNumber[], Uint32 val){
+ fileNumber[1] = val;
+}
+
+inline
+Uint32 FsOpenReq::v2_getCount(const Uint32 fileNumber[]){
+ return fileNumber[2];
+}
+
+inline
+void FsOpenReq::v2_setCount(Uint32 fileNumber[], Uint32 val){
+ fileNumber[2] = val;
+}
+
+
+#endif
+