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

XrdOlbManager.hh

Go to the documentation of this file.
00001 #ifndef __OLB_MANAGER__H
00002 #define __OLB_MANAGER__H
00003 /******************************************************************************/
00004 /*                                                                            */
00005 /*                      X r d O l b M a n a g e r . h h                       */
00006 /*                                                                            */
00007 /* (c) 2003 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: XrdOlbManager.hh,v 1.17 2007/07/26 15:18:24 ganis Exp $
00014 
00015 #include <stdlib.h>
00016 #include <string.h>
00017 #include <strings.h>
00018   
00019 #include "XrdOlb/XrdOlbManList.hh"
00020 #include "XrdOlb/XrdOlbTypes.hh"
00021 #include "XrdSys/XrdSysPthread.hh"
00022 
00023 class XrdNetLink;
00024 class XrdNetWork;
00025 class XrdOlbDrop;
00026 class XrdOlbServer;
00027 
00028 // Options for ListServers
00029 //
00030 #define OLB_LS_BEST   0x0001
00031 #define OLB_LS_ALL    0x0002
00032 #define OLB_LS_IPO    0x0004
00033 
00034 // Status flags
00035 //
00036 #define OLB_SERVER_DISABLE 0x0001
00037 #define OLB_SERVER_NOSTAGE 0x0002
00038 #define OLB_SERVER_OFFLINE 0x0004
00039 #define OLB_SERVER_SUSPEND 0x0008
00040 #define OLB_SERVER_NOSPACE 0x0020
00041 #define OLB_SERVER_ISRW    0x0040
00042 //                         0x0080
00043 #define OLB_SERVER_ISMANGR 0x0100
00044 #define OLB_SERVER_ISPEER  0x0200
00045 #define OLB_SERVER_ISPROXY 0x0400
00046 #define OLB_SERVER_NOSERVR 0x0700
00047 
00048 /******************************************************************************/
00049 /*                            o o l b _ S I n f o                             */
00050 /******************************************************************************/
00051   
00052 class XrdOlbSInfo
00053 {
00054 public:
00055 
00056 XrdOlbSInfo *next;
00057 char        *Name;
00058 SMask_t      Mask;
00059 int          Id;
00060 unsigned int IPAddr;
00061 int          Port;
00062 int          Load;
00063 int          Util;
00064 int          Free;
00065 int          RefTotA;
00066 int          RefTotR;
00067 int          Status;
00068 
00069             XrdOlbSInfo(const char *sname, XrdOlbSInfo *np=0)
00070                       {Name = (sname ? strdup(sname) : 0); next=np;}
00071 
00072            ~XrdOlbSInfo() {if (Name) free(Name);}
00073 };
00074  
00075 /******************************************************************************/
00076 /*                          S t a t u s   F l a g s                           */
00077 /******************************************************************************/
00078 
00079 // Flags passed to AddServer()
00080 //
00081 const int OLB_noStage =  1;
00082 const int OLB_Suspend =  2;
00083 const int OLB_Special =  4;
00084 const int OLB_isMan   =  8;
00085 const int OLB_Lost    = 16;
00086 const int OLB_isPeer  = 32;
00087 const int OLB_isProxy = 64;
00088 
00089 // Flags passed to SelServer() full selection (long signature)
00090 //
00091 const int OLB_needrw  =  1;
00092 const int OLB_newfile =  3;
00093 const int OLB_peersok =  4;
00094   
00095 /******************************************************************************/
00096 /*                          o o l b _ M a n a g e r                           */
00097 /******************************************************************************/
00098   
00099 // This a single-instance global class
00100 //
00101 class XrdOlbManager
00102 {
00103 public:
00104 friend class XrdOlbDrop;
00105 
00106 static const int MTMax = 16;   // Maximum number of Managers
00107 static const int STMax = 64;   // Maximum number of Subscribers
00108 
00109 int         ServCnt;           // Number of active subscribers
00110 char        hasData;           // Set when we are pure data server
00111 
00112 void        Broadcast(SMask_t smask, char *buff, int blen);
00113 void        Broadcast(SMask_t smask, const struct iovec *, int iovcnt);
00114 SMask_t     getMask(unsigned int IPv4adr);
00115 int         haveManagers() {return MTHi >= 0;};
00116 void        Inform(const char *cmd, int clen=0, char *arg=0, int alen=0);
00117 void        Inform(SMask_t mmask, const char *cmd, int clen=0);
00118 XrdOlbSInfo *ListServers(SMask_t mask=(SMask_t)-1, int opts=0);
00119 void       *Login(XrdNetLink *lnkp);
00120 void       *MonPerf(void);
00121 void       *MonPing(void);
00122 void       *MonRefs(void);
00123 void       *Pander(char *manager, int port);
00124 void        Remove_Server(const char *reason, int sent, int sinst, int immed=0);
00125 void        Reset(void);
00126 void        ResetRef(SMask_t smask);
00127 void        Resume();
00128 int         SelServer(int pt, char *path, SMask_t pmsk, SMask_t amsk, char *hb,
00129                       const struct iovec *iodata=0, int iovcnt=0);
00130 int         SelServer(int opts, SMask_t pmask, char *hbuff);
00131 void        setNet(XrdNetWork *net) {NetTCPs = net;}
00132 void        setPort(int port) {Port = port;}
00133 void        Snooze(int slpsec);
00134 void        Space(int none, int doinform=1);
00135 void        Stage(int ison, int doinform=1);
00136 int         Stats(char *bfr, int bln);
00137 void        Suspend(int doinform=1);
00138 
00139       XrdOlbManager();
00140      ~XrdOlbManager() {} // This object should never be deleted
00141 
00142 private:
00143 SMask_t       AddPath(XrdOlbServer *sp);
00144 int           Add_Manager(XrdOlbServer *sp);
00145 XrdOlbServer *AddServer(XrdNetLink *lp, int port, int Status, 
00146                                         int sport, char *sid);
00147 XrdOlbServer *calcDelay(int nump, int numd, int numf, int numo,
00148                         int nums, int &delay, const char **reason);
00149 int           Drop_Server(int sent, int sinst, XrdOlbDrop *djp=0);
00150 void         *Login_Failed(const char *reason, XrdNetLink *lp, XrdOlbServer *sp=0);
00151 void          Record(char *path, const char *reason);
00152 void          Remove_Manager(const char *reason, XrdOlbServer *sp);
00153 XrdOlbServer *SelbyCost(SMask_t mask, int &nump, int &delay,
00154                         const char **reason, int needspace);
00155 XrdOlbServer *SelbyLoad(SMask_t mask, int &nump, int &delay,
00156                         const char **reason, int needspace);
00157 XrdOlbServer *SelbyRef( SMask_t mask, int &nump, int &delay,
00158                         const char **reason, int needspace);
00159 void          sendAList(XrdNetLink *lp);
00160 void          setAltMan(int snum, unsigned int ipaddr, int port);
00161 
00162 static const  int AltSize = 24;
00163 
00164 XrdSysMutex   XXMutex;
00165 XrdSysMutex   STMutex;
00166 XrdOlbServer *ServTab[STMax];
00167 XrdOlbServer *ServBat[STMax];
00168 XrdSysMutex   MTMutex;
00169 XrdOlbServer *MastTab[MTMax];
00170 XrdNetWork   *NetTCPs;
00171 char          AltMans[STMax*AltSize]; // ||123.123.123.123:12345|| = 21
00172 char         *AltMend;
00173 int           AltMent;
00174 
00175 int  MTHi;
00176 int  STHi;
00177 int  XWait;
00178 int  XnoStage;
00179 int  Port;
00180 int  SelAcnt;
00181 int  SelRcnt;
00182 int  doReset;
00183 SMask_t resetMask;
00184 SMask_t peerHost;      // Protected by STMutex
00185 SMask_t peerMask;      // Protected by STMutex
00186 };
00187 
00188 namespace XrdOlb
00189 {
00190 extern    XrdOlbManager Manager;
00191 }
00192 #endif

Generated on Wed Sep 1 2010 for xrootd by  doxygen 1.7.1