• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

XrdOlbServer.hh

Go to the documentation of this file.
00001 #ifndef __OLB_SERVER__H
00002 #define __OLB_SERVER__H
00003 /******************************************************************************/
00004 /*                                                                            */
00005 /*                       X r d O l b S e r v e r . h h                        */
00006 /*                                                                            */
00007 /* (c) 2002 by the Board of Trustees of the Leland Stanford, Jr., University  */
00008 /*                            All Rights Reserved                             */
00009 /*   Produced by Andrew Hanushevsky for Stanford University under contract    */
00010 /*              DE-AC03-76-SFO0515 with the Department of Energy              */
00011 /******************************************************************************/
00012 
00013 //         $Id: XrdOlbServer.hh,v 1.22 2007/11/03 00:19:05 abh Exp $
00014 
00015 #include <string.h>
00016 #include <unistd.h>
00017 #include <sys/uio.h>
00018   
00019 #include "XrdNet/XrdNetLink.hh"
00020 #include "XrdOlb/XrdOlbTypes.hh"
00021 #include "XrdOlb/XrdOlbReq.hh"
00022 #include "XrdOlb/XrdOlbRRQ.hh"
00023 #include "XrdSys/XrdSysPthread.hh"
00024 
00025 class XrdOlbCInfo;
00026 class XrdOlbDrop;
00027 class XrdOlbPInfo;
00028 class XrdOlbPrepArgs;
00029 
00030 class XrdOlbServer
00031 {
00032 public:
00033 friend class XrdOlbManager;
00034 
00035        char  isDisable;    // Set via admin command to temporarily remove server
00036        char  isOffline;    // Set when a link failure occurs
00037        char  isNoStage;    // Set upon a nostage event
00038        char  isSpecial;    // Set when server can be redirected
00039        char  isMan;        // Set when server can act as manager
00040        char  isPeer;       // Set when server can act as peer manager
00041        char  isProxy;      // Set when server can act as a proxy
00042        char  isSuspend;    // Set upon a suspend event
00043        char  isActive;     // Set when server is functioning
00044        char  isBound;      // Set when server is in the configuration
00045        char  isRW;         // Set when server can write or stage data
00046        char  isKnown;      // Set when we have recieved a "state"
00047        char  isBusy;       // Set when server has an active thread
00048        char  isGone;       // Set when server must be deleted
00049 
00050        int   do_Locate(char *, const char *, SMask_t hfVec, SMask_t rwVec);
00051 
00052 inline int   Inst() {return Instance;}
00053 
00054 inline int   isServer(SMask_t smask) {return (smask & ServMask) != 0;}
00055 inline int   isServer(const char *hn)
00056                       {return Link && !strcmp(Link->Name(), hn);}
00057 inline int   isServer(unsigned int ipa)
00058                       {return ipa == IPAddr;}
00059 inline int   isServer(unsigned int ipa, int port)
00060                       {return ipa == IPAddr && port == Port && port;}
00061 inline int   isServer(unsigned int ipa, int port, char *sid)
00062                       {if (sid) return ipa == IPAddr && !strcmp(mySID, sid);
00063                                 return ipa == IPAddr && port == Port && port;
00064                       }
00065 inline       char *Name()   {return (myName ? myName : (char *)"?");}
00066 inline const char *Nick()   {return (myNick ? myNick : (char *)"?");}
00067 inline void    Lock() {myMutex.Lock();}
00068 inline void  UnLock() {myMutex.UnLock();}
00069 
00070        int  Login(int Port, int Status, int Lvl);
00071 
00072        void Process_Director(void);
00073        int  Process_Requests(void);
00074        int  Process_Responses(void);
00075 
00076 static int  Resume(XrdOlbPrepArgs *pargs);
00077 
00078        int  Send(const char *buff, int blen=0);
00079        int  Send(const struct iovec *iov, int iovcnt);
00080 
00081        void setName(XrdNetLink *lnkp, int port);
00082 
00083 static void setRelay(XrdNetLink *rlyp) {Relay = rlyp;}
00084 
00085 static void setSpace(int Dfree, int Dutil) {dsk_free = Dfree; dsk_totu = Dutil;}
00086 
00087             XrdOlbServer(XrdNetLink *lnkp, int port=0, char *sid=0);
00088            ~XrdOlbServer();
00089 
00090 private:
00091        int   do_AvKb(char *rid);
00092        int   do_Chmod(char *rid, int do4real);
00093        int   do_Delay(char *rid);
00094        int   do_Disc(char *rid, int sendDisc);
00095        int   do_Gone(char *rid);
00096        int   do_Have(char *rid);
00097        int   do_Load(char *rid);
00098        int   do_Mkdir(char *rid, int do4real);
00099        int   do_Mkpath(char *rid, int do4real);
00100        int   do_Mv(char *rid, int do4real);
00101        int   do_Ping(char *rid);
00102        int   do_Pong(char *rid);
00103        int   do_Port(char *rid);
00104        int   do_PrepAdd(char *rid, int server=0);
00105 static int   do_PrepAdd4Real(XrdOlbPrepArgs *pargs);
00106        int   do_PrepDel(char *rid, int server=0);
00107 static int   do_PrepSel(XrdOlbPrepArgs *pargs, int stage);
00108        int   do_Rm(char *rid, int do4real);
00109        int   do_Rmdir(char *rid, int do4real);
00110        int   do_RST(char *rid);
00111        int   do_Select(char *rid, int refresh=0);
00112        int   do_Space(char *rid);
00113        int   do_State(char *rid, int reset);
00114        int   do_StateFWD(char *tp, int reset);
00115        int   do_Stats(char *rid, int wantdata);
00116        int   do_StNst(char *rid, int Resume);
00117        int   do_SuRes(char *rid, int Resume);
00118        int   do_Try(char *rid);
00119        int   do_Usage(char *rid);
00120        int   getMode(const char *, const char *, const char *, mode_t &);
00121 static int   Inform(const char *cmd, XrdOlbPrepArgs *pargs);
00122 static int   isOnline(char *path, int upt=1, XrdNetLink *lnk=0);
00123        int   Mkpath(char *local_path, mode_t mode);
00124        char *prepScan(char **Line,XrdOlbPrepArgs *pargs,const char *Etxt);
00125        char *Receive(char *idbuff, int blen);
00126        int   Reissue(char *rid, const char *op, char *arg1, char *path, char *arg3=0);
00127 
00128 static XrdNetLink   *Relay;
00129 XrdSysMutex       myMutex;
00130 XrdNetLink       *Link;
00131 unsigned int      IPAddr;
00132 XrdOlbServer     *Next;
00133 time_t            DropTime;
00134 XrdOlbDrop       *DropJob;
00135 XrdOlbRRQInfo     Info;
00136 XrdOlbReq         Req;
00137 
00138 SMask_t    ServMask;
00139 int        ServID;
00140 int        Instance;
00141 int        Port;
00142 int        myLevel;
00143 char      *mySID;
00144 char      *myName;
00145 char      *myNick;
00146 char      *Stype;
00147 
00148 static     const int     redr_iov_cnt = 3;
00149            struct iovec  redr_iov[redr_iov_cnt];
00150 
00151 int        pingpong;     // Keep alive field
00152 int        newload;
00153 int        logload;
00154 int        DiskFree;     // Largest free KB
00155 int        DiskNums;     // Number of file systems
00156 int        DiskTotu;     // Total disk utilization
00157 int        myCost;       // Overall cost (determined by location)
00158 int        myLoad;       // Overall load
00159 int        RefA;         // Number of times used for allocation
00160 int        RefTotA;
00161 int        RefR;         // Number of times used for redirection
00162 int        RefTotR;
00163 
00164 // The following fields are used to keep the supervisor's load values
00165 //
00166 static XrdSysMutex mlMutex;
00167 static int         xeq_load;
00168 static int         cpu_load;
00169 static int         mem_load;
00170 static int         pag_load;
00171 static int         net_load;
00172 static int         dsk_free;
00173 static int         dsk_totu;
00174 };
00175 #endif

Generated on Wed Sep 1 2010 for xrootd by  doxygen 1.7.1