diff options
Diffstat (limited to 'storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp')
-rw-r--r-- | storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp b/storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp new file mode 100644 index 00000000000..c5aaa4e5c49 --- /dev/null +++ b/storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp @@ -0,0 +1,127 @@ +/* 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 SIMBLOCKASYNCFILESYSTEM_H +#define SIMBLOCKASYNCFILESYSTEM_H + +#include <pc.hpp> +#include <SimulatedBlock.hpp> +#include "Pool.hpp" +#include "AsyncFile.hpp" +#include "OpenFiles.hpp" + + + +// Because one NDB Signal request can result in multiple requests to +// AsyncFile one class must be made responsible to keep track +// of all out standing request and when all are finished the result +// must be reported to the sending block. + + +class Ndbfs : public SimulatedBlock +{ +public: + Ndbfs(const class Configuration & conf); + virtual ~Ndbfs(); + +protected: + BLOCK_DEFINES(Ndbfs); + + // The signal processing functions + void execDUMP_STATE_ORD(Signal* signal); + void execFSOPENREQ(Signal* signal); + void execFSCLOSEREQ(Signal* signal); + void execFSWRITEREQ(Signal* signal); + void execFSREADREQ(Signal* signal); + void execFSSYNCREQ(Signal* signal); + void execFSAPPENDREQ(Signal* signal); + void execFSREMOVEREQ(Signal* signal); + void execSTTOR(Signal* signal); + void execCONTINUEB(Signal* signal); + + bool scanningInProgress; + Uint16 newId(); + +private: + int forward(AsyncFile *file, Request* Request); + void report(Request* request, Signal* signal); + bool scanIPC(Signal* signal); + + // Declared but not defined + Ndbfs(Ndbfs & ); + void operator = (Ndbfs &); + + // Used for uniqe number generation + Uint16 theLastId; + BlockReference cownref; + + // Communication from files + MemoryChannel<Request> theFromThreads; + + Pool<Request>* theRequestPool; + + AsyncFile* createAsyncFile(); + AsyncFile* getIdleFile(); + + Vector<AsyncFile*> theFiles; // List all created AsyncFiles + Vector<AsyncFile*> theIdleFiles; // List of idle AsyncFiles + OpenFiles theOpenFiles; // List of open AsyncFiles + const char * theFileSystemPath; + const char * theBackupFilePath; + + // Statistics variables + Uint32 m_maxOpenedFiles; + + // Limit for max number of AsyncFiles created + Uint32 m_maxFiles; + + void readWriteRequest( int action, Signal * signal ); + + static int translateErrno(int aErrno); +}; + +class VoidFs : public SimulatedBlock +{ +public: + VoidFs(const class Configuration & conf); + virtual ~VoidFs(); + +protected: + BLOCK_DEFINES(VoidFs); + + // The signal processing functions + void execDUMP_STATE_ORD(Signal* signal); + void execFSOPENREQ(Signal* signal); + void execFSCLOSEREQ(Signal* signal); + void execFSWRITEREQ(Signal* signal); + void execFSREADREQ(Signal* signal); + void execFSSYNCREQ(Signal* signal); + void execFSAPPENDREQ(Signal* signal); + void execFSREMOVEREQ(Signal* signal); + void execSTTOR(Signal* signal); + +private: + // Declared but not defined + VoidFs(VoidFs & ); + void operator = (VoidFs &); + + // Used for uniqe number generation + Uint32 c_maxFileNo; +}; + +#endif + + |