XRootD
Loading...
Searching...
No Matches
XrdOfsPrepGPI.cc File Reference
#include <string>
#include <vector>
#include <stdio.h>
#include <unistd.h>
#include "Xrd/XrdJob.hh"
#include "Xrd/XrdScheduler.hh"
#include "XrdOfs/XrdOfsPrepare.hh"
#include "XrdOss/XrdOss.hh"
#include "XrdOuc/XrdOuca2x.hh"
#include "XrdOuc/XrdOucBuffer.hh"
#include "XrdOuc/XrdOucEnv.hh"
#include "XrdOuc/XrdOucErrInfo.hh"
#include "XrdOuc/XrdOucGatherConf.hh"
#include "XrdOuc/XrdOucProg.hh"
#include "XrdOuc/XrdOucStream.hh"
#include "XrdOuc/XrdOucString.hh"
#include "XrdOuc/XrdOucTList.hh"
#include "XrdSec/XrdSecEntity.hh"
#include "XrdSfs/XrdSfsInterface.hh"
#include "XrdSys/XrdSysError.hh"
#include "XrdSys/XrdSysE2T.hh"
#include "XrdSys/XrdSysPthread.hh"
#include "XrdSys/XrdSysTrace.hh"
#include "XrdVersion.hh"
+ Include dependency graph for XrdOfsPrepGPI.cc:

Go to the source code of this file.

Classes

class  XrdOfsPrepGPIReal::PrepGRun
 
struct  XrdOfsPrepGPIReal::PrepRequest
 

Namespaces

namespace  XrdOfsPrepGPIReal
 

Macros

#define DEBUG(usr, x)   if (Debug) SYSTRACE(SysTrace.,usr,EPName,0,x)
 
#define EPNAME(x)   const char *EPName=x
 

Functions

XrdOfsPrepareXrdOfsgetPrepare (XrdOfsgetPrepareArguments)
 
 XrdVERSIONINFO (XrdOfsgetPrepare, PrepGPI)
 

Variables

bool XrdOfsPrepGPIReal::addCGI = false
 
XrdOucBuffPoolXrdOfsPrepGPIReal::bPool = 0
 
bool XrdOfsPrepGPIReal::Debug = false
 
XrdSysErrorXrdOfsPrepGPIReal::eLog = 0
 
XrdSysMutex XrdOfsPrepGPIReal::gpiMutex
 
int XrdOfsPrepGPIReal::maxFiles = 48
 
int XrdOfsPrepGPIReal::maxResp = XrdOucEI::Max_Error_Len
 
static const int XrdOfsPrepGPIReal::okAll = 0x1f
 
static const int XrdOfsPrepGPIReal::okCancel = 0x01
 
static const int XrdOfsPrepGPIReal::okEvict = 0x02
 
static const int XrdOfsPrepGPIReal::okPrep = 0x04
 
static const int XrdOfsPrepGPIReal::okQuery = 0x08
 
char XrdOfsPrepGPIReal::okReq = 0
 
static const int XrdOfsPrepGPIReal::okStage = 0x10
 
XrdOssXrdOfsPrepGPIReal::ossP = 0
 
XrdOucProgXrdOfsPrepGPIReal::pgmObj = 0
 
int XrdOfsPrepGPIReal::qryAllow = 8
 
XrdSysCondVar XrdOfsPrepGPIReal::qryCond (0, "prepG query")
 
static const int XrdOfsPrepGPIReal::qryMaxWT = 33
 
int XrdOfsPrepGPIReal::qryWait = 0
 
XrdSchedulerXrdOfsPrepGPIReal::schedP = 0
 
XrdSysTrace XrdOfsPrepGPIReal::SysTrace ("PrepGPI")
 
bool XrdOfsPrepGPIReal::usePFN = false
 

Macro Definition Documentation

◆ DEBUG

#define DEBUG (   usr,
 
)    if (Debug) SYSTRACE(SysTrace.,usr,EPName,0,x)

Definition at line 40 of file XrdOfsPrepGPI.cc.

◆ EPNAME

#define EPNAME (   x)    const char *EPName=x

Definition at line 42 of file XrdOfsPrepGPI.cc.

Function Documentation

◆ XrdOfsgetPrepare()

XrdOfsPrepare * XrdOfsgetPrepare ( XrdOfsgetPrepareArguments  )

Definition at line 821 of file XrdOfsPrepGPI.cc.

822{
823 XrdOucGatherConf gpiConf("prepgpi.parms", eDest);
824 XrdOucString RunPgm, Token;
825 char *tokP;
826 int maxReq = 4;
827
828// Save some of the arguments that we may need later
829//
830 eLog = eDest;
831 ossP = theOss;
832 schedP = (XrdScheduler *)(envP->GetPtr("XrdScheduler*"));
833
834// If parameters specified on the preplib directive, use them. Otherwise,
835// get them from the config file.
836//
837 if (!gpiConf.useData(parms)
838 && gpiConf.Gather(confg, XrdOucGatherConf::only_body) < 0) return 0;
839
840// Verify we actually have parameters (there is only one line of them).
841//
842 if (!(tokP = gpiConf.GetLine()) || !*tokP)
843 {eLog->Emsg("PrepGPI", "Parameters not specified.");
844 return 0;
845 }
846
847// Parse the parameters, they are space delimited
848//
849 while((tokP = gpiConf.GetToken()))
850 {Token = tokP;
851 if (Token == "-admit")
852 {if (!(tokP = gpiConf.GetToken()) || *tokP == '-')
853 {eLog->Emsg("PrepGPI", "-admit argument not specified.");
854 return 0;
855 }
856 XrdOucString Args(tokP);
857 int argPos = 0;
858 bool argOK = false;
859 while((argPos = Args.tokenize(Token, argPos, ',')) != -1)
860 { if (Token == "cancel") okReq |= okCancel;
861 else if (Token == "evict") okReq |= okEvict;
862 else if (Token == "prep") okReq |= okPrep;
863 else if (Token == "query") okReq |= okQuery;
864 else if (Token == "stage") okReq |= okStage;
865 else if (Token == "all") okReq |= okAll;
866 else {eLog->Emsg("PrepGPI", "Invalid -admit request -",
867 Token.c_str());
868 return 0;
869 }
870 argOK = true;
871 }
872 if (!argOK)
873 {eLog->Emsg("PrepGPI", "invalid -admit request list");
874 return 0;
875 }
876 }
877 else if (Token == "-cgi") addCGI= true;
878 else if (Token == "-debug") Debug = true;
879 else if (Token == "-maxfiles")
880 {if (!(tokP = gpiConf.GetToken()) || *tokP == '-')
881 {eLog->Emsg("PrepGPI", "-maxfiles argument not specified.");
882 return 0;
883 }
884 if (XrdOuca2x::a2i(*eLog, "PrepPGI -maxfiles", tokP,
885 &maxFiles, 1, 1024)) return 0;
886 }
887 else if (Token == "-maxquery")
888 {if (!(tokP = gpiConf.GetToken()) || *tokP == '-')
889 {eLog->Emsg("PrepGPI", "-maxquery argument not specified.");
890 return 0;
891 }
892 if (XrdOuca2x::a2i(*eLog, "PrepPGI -maxquery", tokP,
893 &qryAllow, 1, 64)) return 0;
894 }
895 else if (Token == "-maxreq")
896 {if (!(tokP = gpiConf.GetToken()) || *tokP == '-')
897 {eLog->Emsg("PrepGPI", "-maxreq argument not specified.");
898 return 0;
899 }
900 if (XrdOuca2x::a2i(*eLog, "PrepPGI -maxreq", tokP,
901 &maxReq, 1, 64)) return 0;
902 }
903 else if (Token == "-maxresp")
904 {if (!(tokP = gpiConf.GetToken()) || *tokP == '-')
905 {eLog->Emsg("PrepGPI", "-maxresp argument not specified.");
906 return 0;
907 }
908 long long rspsz;
909 if (XrdOuca2x::a2sz(*eLog, "PrepPGI -maxresp", tokP,
910 &rspsz, 2048, 16777216)) return 0;
911 maxResp = static_cast<int>(rspsz);
912 }
913 else if (Token == "-pfn") usePFN = true;
914 else if (Token == "-run")
915 {if (!(tokP = gpiConf.GetToken()) || *tokP == '-')
916 {eLog->Emsg("PrepGPI", "-run argument not specified.");
917 return 0;
918 }
919 RunPgm = tokP;
920 }
921 else {eLog->Emsg("PrepGPI", "Invalid option -", Token.c_str());
922 return 0;
923 }
924 }
925
926// Make sure at least one request was enabled
927//
928 if (!(okReq & okAll))
929 {eLog->Emsg("PrepGPI", "'-admit' was not specified.");
930 return 0;
931 }
932
933// Make sure the prepare program was specified
934//
935 if (!RunPgm.length())
936 {eLog->Emsg("PrepGPI", "prepare program not specified.");
937 return 0;
938 }
939
940// Create a buffer pool for query responses if we need to
941//
944
945// Set final debug flags
946//
947 if (!Debug) Debug = getenv("XRDDEBUG") != 0;
949
950// Obtain an instance of the program object for this command. Note that
951// all grun object will share this program as it's thread safe in the
952// context in which we will use it (i.e. read/only).
953//
954 pgmObj = new XrdOucProg(eLog, 0); // EFD????
955 if (pgmObj->Setup(RunPgm.c_str()))
956 {delete pgmObj;
957 eLog->Emsg("PrepGPI", "Unable to use prepare program", RunPgm.c_str());
958 return 0;
959 }
960
961// Create as many run object as we need
962//
963 PrepGRun *gRun;
964 while(maxReq--)
965 {gRun = new PrepGRun(*pgmObj);
966 gRun->next = PrepGRun::Q;
967 PrepGRun::Q = gRun;
968 }
969
970// Create one additional such object for queries to pass to the plugin
971//
972 gRun = new PrepGRun(*pgmObj);
973
974// Return an instance of the prepare plugin
975//
976 return new PrepGPI(*gRun);
977}
static XrdSysError eDest(0,"crypto_")
void * GetPtr(const char *varname)
Definition XrdOucEnv.cc:263
@ only_body
Only directive bodies as a string blob.
int Setup(const char *prog, XrdSysError *errP=0, int(*Proc)(XrdOucStream *, char **, int)=0)
int length() const
const char * c_str() const
static int a2i(XrdSysError &, const char *emsg, const char *item, int *val, int minv=-1, int maxv=-1)
Definition XrdOuca2x.cc:45
static int a2sz(XrdSysError &, const char *emsg, const char *item, long long *val, long long minv=-1, long long maxv=-1)
Definition XrdOuca2x.cc:257
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
XrdSysLogger * logger(XrdSysLogger *lp=0)
void SetLogger(XrdSysLogger *logp)
XrdOucBuffPool * bPool
XrdSysTrace SysTrace("PrepGPI")
static const int okCancel
XrdOucProg * pgmObj
XrdSysError * eLog
static const int okEvict
XrdScheduler * schedP
static const int okQuery
static const int okStage
static const int okAll
static const int okPrep
XrdOucEnv * envP
Definition XrdPss.cc:108
static const size_t Max_Error_Len

References XrdOuca2x::a2i(), XrdOuca2x::a2sz(), XrdOfsPrepGPIReal::addCGI, XrdOfsPrepGPIReal::bPool, XrdOucString::c_str(), XrdOfsPrepGPIReal::Debug, eDest, XrdOfsPrepGPIReal::eLog, XrdSysError::Emsg(), XrdOucGatherConf::Gather(), XrdOucGatherConf::GetLine(), XrdOucEnv::GetPtr(), XrdOucGatherConf::GetToken(), XrdOucString::length(), XrdSysError::logger(), XrdOucEI::Max_Error_Len, XrdOfsPrepGPIReal::maxFiles, XrdOfsPrepGPIReal::maxResp, XrdOfsPrepGPIReal::PrepGRun::next, XrdOfsPrepGPIReal::okAll, XrdOfsPrepGPIReal::okCancel, XrdOfsPrepGPIReal::okEvict, XrdOfsPrepGPIReal::okPrep, XrdOfsPrepGPIReal::okQuery, XrdOfsPrepGPIReal::okReq, XrdOfsPrepGPIReal::okStage, XrdOucGatherConf::only_body, XrdOfsPrepGPIReal::ossP, XrdOfsPrepGPIReal::pgmObj, XrdOfsPrepGPIReal::PrepGRun::Q, XrdOfsPrepGPIReal::qryAllow, XrdOfsPrepGPIReal::schedP, XrdSysTrace::SetLogger(), XrdOucProg::Setup(), XrdOfsPrepGPIReal::SysTrace, XrdOucString::tokenize(), XrdOucGatherConf::useData(), and XrdOfsPrepGPIReal::usePFN.

+ Here is the call graph for this function:

◆ XrdVERSIONINFO()

XrdVERSIONINFO ( XrdOfsgetPrepare  ,
PrepGPI   
)