dc_instance.h

Go to the documentation of this file.
00001 // -*- c++ -*-
00002 // ****************************************************************************
00003 //  Name: dc_instance.h
00004 //  Athr: Michael D. Beynon (mdb)
00005 //  Date: 08/10/2000 : mdb - Created.
00006 //  Desc: DataCutter Filter Service user library.
00007 // ****************************************************************************
00010 #if !defined(H_DC_INSTANCE)
00011 #define H_DC_INSTANCE
00012 
00013 #include "lib/dc_standard.h"
00014 #include "lib/dc_argv.h"
00015 #include "lib/dc_configinfo.h"
00016 #include "lib/dc_socket.h"
00017 #include "lib/dc_memory.h"
00018 #include "lib/dc_map.h"
00019 #include "lib/dc_timer.h"
00020 #include "lib/dc_metric.h"
00021 #include "lib/dc_mutex.h"
00022 #include "lib/dc_cond.h"
00023 #include "lib/dc_regex.h"
00024 
00025 #include "packet-tags.h"
00026 #include "dc_work.h"
00027 #include "dc_filterlayout.h"
00028 #include "dc_placement.h"
00029 #include "dc_policy.h"
00030 
00031 
00032 class DC_ConsoleStreamSpec {
00033   //friend ostream &operator<<(ostream &os, DC_ConsoleStreamSpec &spec);
00034 public:
00035   char *sbName;
00036   Types::uint i;  
00037   Types::uint iFilterSource, iFilterSink;
00038   DC_StreamWritePolicy_t eStreamWritePolicy;  
00039   char *sbWritePolicyUD;
00040 
00042   class WriteRules_t {
00043   public:
00044     DC_Regex reSource;
00045     DC_Regex reSink;
00046     bool     fNone;
00047     DC_StreamWritePolicy_t eStreamWritePolicy;    
00048   };
00049   DArrayPtr<WriteRules_t*> daWriteRules;
00050 
00051   DC_ConsoleStreamSpec(const char *sbName_in)
00052     : sbName(StrDup(sbName_in)),
00053       i(Types::uintMax),
00054       iFilterSource(Types::uintMax), iFilterSink(Types::uintMax),
00055       eStreamWritePolicy(DC_StreamWritePolicy_RR),
00056       sbWritePolicyUD(NULL) {
00057   };
00058   ~DC_ConsoleStreamSpec(void) {
00059     TestDeleteNull(sbName);
00060     TestDeleteNull(sbWritePolicyUD);
00061     for (Types::uint j=0; j<daWriteRules.NumElem(); ++j)
00062       delete daWriteRules[j];
00063   };
00064 };
00065 
00066 
00067 class DC_ConsoleFilterSpec {
00068   friend ostream &operator<<(ostream &os, DC_ConsoleFilterSpec &spec);
00069 public:
00070   // name syntax: <filter-name>[:<copy-set-name>]
00071   char *sbName;  
00072   class CopySet_t {
00073   public:
00074     Types::uint iPlacement;  
00075     char *sbName;  
00076     bool fAllowCopies;
00077     int  nCopies;            
00078     int  nCopiesLow, nCopiesHigh;
00079     int  rankTotalCopiesStart;
00080   };
00081   DArray<CopySet_t> daCopySet;
00082   int maxTotalCopies;
00083 
00084   bool fConsole;  
00085   int  wSinkQueueSize, wWorkQueueSize;
00086 
00087   DArray<DC_ConsoleStreamSpec*> daStreamSpecIn;   
00088   DArray<DC_ConsoleStreamSpec*> daStreamSpecOut;  
00089 
00090   DC_ConsoleFilterSpec(const char *sbName_in)
00091     : sbName(StrDup(sbName_in)), maxTotalCopies(0) {
00092     fConsole = (strcmp(sbName_in, "<console>") == 0);
00093   };
00094   ~DC_ConsoleFilterSpec(void) {
00095     TestDeleteNull(sbName);
00096     for (Types::uint i=0; i<daCopySet.NumElem(); ++i)
00097       TestDeleteNull(daCopySet[i].sbName);
00098   };
00099 
00100   CopySet_t *find_placement(Types::uint iPlacement, Types::uint *piFound=NULL);
00101 };
00102 
00103 
00112 class DC_FilterInstance_t {
00113   friend class DC_FilterService_t;
00114   friend class DC_ConsoleProcessState;
00115 protected:
00116   DC_FilterService_t *pDC;
00117   DC_ConsoleProcessState *pConsole;
00118   int wInstanceNum;
00119   char *sbLayoutName;
00120 
00125   bool fDetached;
00126 
00134   enum { INIT, WAIT, WORK, STOP, DONE } eState;
00135 
00136   int wNextWorkNum;  // BUGBUG: int rollover?
00137 
00138   int wRemoteInstances;    
00139   int cRemoteInstanceExit; 
00140   //DC_Cond cvDone;
00141 
00142   DArray<DC_ConsoleFilterSpec*> daFilterSpec;
00143   DArray<DC_ConsoleStreamSpec*> daStreamSpec;
00144 
00145   DC_Mutex mutex;
00146 
00147 public:
00149   DC_Filter_Base_t::arg_t arg;
00150 
00151 protected:
00152   Types::uint find_filter(const char *sbName);
00153   DC_ConsoleStreamSpec *find_stream(const char *sbName, Types::uint &iStream);
00154 
00155   bool _isDetached(void) { return fDetached; };
00156 
00157   void _Delete(void);
00158   int _Reset(DC_FilterService_t *pDC_in, DC_ConsoleProcessState *pConsole_in);
00159   int _ProcessLayout(DC_FilterLayout_t &layout);
00160   int _ProcessPlacement(DC_Placement_t &placement);
00161   int _StartInstance(void);
00162   int _StopInstance(void);
00163   int _WaitUntilInstanceDone(void);
00164 
00165   int _InstanceExit_Reader(void);
00166 
00167 public:
00168   DC_FilterInstance_t(void);
00169   ~DC_FilterInstance_t(void);
00170 
00172   DC_WorkHandle_t AppendWork(DC_Work_t &work, bool fWait=true);
00173 };
00174 
00175 
00176 #endif /* H_DC_INSTANCE */
00177 // ****************************************************************************

Generated at Mon Mar 3 13:53:21 2003 for DataCutter by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001