FsOpenReq.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:6k
- /* 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