Ndbfs.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef SIMBLOCKASYNCFILESYSTEM_H
  14. #define SIMBLOCKASYNCFILESYSTEM_H
  15. #include <pc.hpp>
  16. #include <SimulatedBlock.hpp>
  17. #include "Pool.hpp"
  18. #include "AsyncFile.hpp"
  19. #include "OpenFiles.hpp"
  20. // Because one NDB Signal request can result in multiple requests to
  21. // AsyncFile one class must be made responsible to keep track
  22. // of all out standing request and when all are finished the result
  23. // must be reported to the sending block.
  24. class Ndbfs : public SimulatedBlock
  25. {
  26. public:
  27.   Ndbfs(const class Configuration & conf);
  28.   virtual ~Ndbfs();
  29. protected:
  30.   BLOCK_DEFINES(Ndbfs);
  31.   // The signal processing functions
  32.   void execDUMP_STATE_ORD(Signal* signal);
  33.   void execFSOPENREQ(Signal* signal);
  34.   void execFSCLOSEREQ(Signal* signal);
  35.   void execFSWRITEREQ(Signal* signal);
  36.   void execFSREADREQ(Signal* signal);
  37.   void execFSSYNCREQ(Signal* signal);
  38.   void execFSAPPENDREQ(Signal* signal);
  39.   void execFSREMOVEREQ(Signal* signal);
  40.   void execSTTOR(Signal* signal);
  41.   void execCONTINUEB(Signal* signal);
  42.   bool scanningInProgress;
  43.   Uint16 newId();
  44. private:
  45.   int forward(AsyncFile *file, Request* Request);
  46.   void report(Request* request, Signal* signal);
  47.   bool scanIPC(Signal* signal);
  48.   // Declared but not defined
  49.   Ndbfs(Ndbfs & );
  50.   void operator = (Ndbfs &);
  51.   
  52.   // Used for uniqe number generation
  53.   Uint16 theLastId;
  54.   BlockReference cownref;
  55.   // Communication from files 
  56.   MemoryChannel<Request> theFromThreads;
  57.   Pool<Request>* theRequestPool;
  58.   AsyncFile* createAsyncFile();
  59.   AsyncFile* getIdleFile();
  60.   Vector<AsyncFile*> theFiles;     // List all created AsyncFiles
  61.   Vector<AsyncFile*> theIdleFiles; // List of idle AsyncFiles
  62.   OpenFiles theOpenFiles;          // List of open AsyncFiles
  63.   const char * theFileSystemPath;
  64.   const char * theBackupFilePath;
  65.   // Statistics variables
  66.   Uint32 m_maxOpenedFiles;
  67.   
  68.   // Limit for max number of AsyncFiles created
  69.   Uint32 m_maxFiles;
  70.   void readWriteRequest(  int action, Signal * signal );
  71.   static int translateErrno(int aErrno);
  72. };
  73. class VoidFs : public SimulatedBlock
  74. {
  75. public:
  76.   VoidFs(const class Configuration & conf);
  77.   virtual ~VoidFs();
  78. protected:
  79.   BLOCK_DEFINES(VoidFs);
  80.   // The signal processing functions
  81.   void execDUMP_STATE_ORD(Signal* signal);
  82.   void execFSOPENREQ(Signal* signal);
  83.   void execFSCLOSEREQ(Signal* signal);
  84.   void execFSWRITEREQ(Signal* signal);
  85.   void execFSREADREQ(Signal* signal);
  86.   void execFSSYNCREQ(Signal* signal);
  87.   void execFSAPPENDREQ(Signal* signal);
  88.   void execFSREMOVEREQ(Signal* signal);
  89.   void execSTTOR(Signal* signal);
  90. private:
  91.   // Declared but not defined
  92.   VoidFs(VoidFs & );
  93.   void operator = (VoidFs &);
  94.   
  95.   // Used for uniqe number generation
  96.   Uint32 c_maxFileNo;
  97. };
  98. #endif