XRootD
XrdFrmPurgMain.cc File Reference
#include <unistd.h>
#include <cctype>
#include <cerrno>
#include <cstdlib>
#include <cstring>
#include <strings.h>
#include <cstdio>
#include <sys/param.h>
#include "XrdFrc/XrdFrcTrace.hh"
#include "XrdFrm/XrdFrmConfig.hh"
#include "XrdFrm/XrdFrmPurge.hh"
#include "XrdNet/XrdNetOpts.hh"
#include "XrdNet/XrdNetSocket.hh"
#include "XrdOuc/XrdOucUtils.hh"
#include "XrdSys/XrdSysError.hh"
#include "XrdSys/XrdSysHeaders.hh"
#include "XrdSys/XrdSysLogger.hh"
#include "XrdSys/XrdSysPthread.hh"
#include "XrdSys/XrdSysTimer.hh"
#include "XrdSys/XrdSysUtils.hh"
+ Include dependency graph for XrdFrmPurgMain.cc:

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 
int mainConfig ()
 
void * mainServer (void *parg)
 

Variables

XrdOucTrace XrdTrace & Say
 
static const char * XrdFrmOpts = ":bc:dfhk:l:n:O:s:S:Tvz"
 
static const char * XrdFrmUsage
 
XrdSysError XrdLog (0, "")
 
XrdOucTraceXrdXrootdTrace
 

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 131 of file XrdFrmPurgMain.cc.

132 {
134  extern int mainConfig();
135 
136 // Turn off sigpipe and host a variety of others before we start any threads
137 //
139 
140 // Set the default stack size here
141 //
142  if (sizeof(long) > 4) XrdSysThread::setStackSize((size_t)1048576);
143  else XrdSysThread::setStackSize((size_t)786432);
144 
145 // Perform configuration
146 //
147  Say.logger(&Logger);
148  XrdLog.logger(&Logger);
149  if (!Config.Configure(argc, argv, &mainConfig)) exit(4);
150 
151 // Fill out the dummy symbol to avoid crashes
152 //
154 
155 // Display configuration (deferred because mum might have been in effect)
156 //
157  if (!Config.isOTO || Config.Verbose) XrdFrmPurge::Display();
158 
159 // Now simply poke the server every so often
160 //
161  if (Config.isOTO) XrdFrmPurge::Purge();
162  else do {if (Config.StopPurge)
163  {int n = 0;
164  struct stat buf;
165  while(!stat(Config.StopPurge, &buf))
166  {if (!n--)
167  {Say.Emsg("PurgMain", Config.StopPurge,
168  "exists; purging suspended."); n = 12;}
170  }
171  }
173  XrdSysTimer::Snooze(Config.WaitPurge);
174  } while(1);
175 
176 // All done
177 //
178  exit(0);
179 }
XrdOucTrace * XrdXrootdTrace
XrdOucTrace XrdTrace & Say
XrdSysError XrdLog(0, "")
int mainConfig()
int stat(const char *path, struct stat *buf)
static void Purge()
Definition: XrdFrmPurge.cc:586
static void Display()
Definition: XrdFrmPurge.cc:295
XrdSysLogger * logger(XrdSysLogger *lp=0)
Definition: XrdSysError.hh:141
static void setStackSize(size_t stsz, bool force=false)
static void Snooze(int seconds)
Definition: XrdSysTimer.cc:168
static bool SigBlock()
Definition: XrdSysUtils.cc:188
XrdCmsConfig Config
XrdSysLogger Logger
Definition: XrdGlobals.cc:47

References XrdCms::Config, XrdFrmPurge::Display(), XrdSysError::Emsg(), XrdGlobal::Logger, XrdSysError::logger(), mainConfig(), XrdFrmPurge::Purge(), XrdFrc::Say, XrdSysThread::setStackSize(), XrdSysUtils::SigBlock(), XrdSysTimer::Snooze(), stat(), XrdLog, and XrdXrootdTrace.

+ Here is the call graph for this function:

◆ mainConfig()

int mainConfig ( )

Definition at line 185 of file XrdFrmPurgMain.cc.

186 {
187  XrdFrmConfig::Policy *pP = Config.dfltPolicy.Next;
188  XrdFrmConfig::VPInfo *vP = Config.VPList;
189  XrdNetSocket *udpSock;
190  pthread_t tid;
191  int retc, udpFD;
192 
193 // If test is in effect, remove the fix flag
194 //
195  if (Config.Test) Config.Fix = 0;
196 
197 // Go through the policy list and add each policy
198 //
199  while((pP = Config.dfltPolicy.Next))
200  {if (!XrdFrmPurge::Policy(pP->Sname))
202  pP->Hold, pP->Ext);
203  Config.dfltPolicy.Next = pP->Next;
204  delete pP;
205  }
206 
207 // Make sure we have a public policy
208 //
209  if (!XrdFrmPurge::Policy("public"))
210  XrdFrmPurge::Policy("public", Config.dfltPolicy.minFree,
211  Config.dfltPolicy.maxFree,
212  Config.dfltPolicy.Hold,
213  Config.dfltPolicy.Ext);
214 
215 // Now add any missing policies (we need one for every space)
216 //
217  while(vP)
218  {if (!XrdFrmPurge::Policy(vP->Name))
219  XrdFrmPurge::Policy(vP->Name, Config.dfltPolicy.minFree,
220  Config.dfltPolicy.maxFree,
221  Config.dfltPolicy.Hold,
222  Config.dfltPolicy.Ext);
223  vP = vP->Next;
224  }
225 
226 // Enable the appropriate spaces and over-ride config value
227 //
228  if (!XrdFrmPurge::Init(Config.spacList, Config.cmdFree, Config.cmdHold))
229  return 1;
230 
231 // We are done if this is a one-time-only call
232 //
233  if (Config.isOTO) return 0;
234 
235 // Get a UDP socket for the server
236 //
237  if (!(udpSock = XrdNetSocket::Create(&Say, Config.AdminPath,
238  "purg.udp", Config.AdminMode, XRDNET_UDPSOCKET))) return 1;
239  else {udpFD = udpSock->Detach(); delete udpSock;}
240 
241 // Start the Server thread
242 //
243  if ((retc = XrdSysThread::Run(&tid, mainServer, (void *)&udpFD,
244  XRDSYSTHREAD_BIND, "Server")))
245  {Say.Emsg("main", retc, "create server thread"); return 1;}
246 
247 // All done
248 //
249  return 0;
250 }
void * mainServer(void *parg)
#define XRDNET_UDPSOCKET
Definition: XrdNetOpts.hh:79
#define XRDSYSTHREAD_BIND
static int Init(XrdOucTList *sP=0, long long minV=-1, int hVal=-1)
Definition: XrdFrmPurge.cc:409
static XrdFrmPurge * Policy(const char *sname)
Definition: XrdFrmPurge.hh:52
static XrdNetSocket * Create(XrdSysError *Say, const char *path, const char *fn, mode_t mode, int isudp=0)
static int Run(pthread_t *, void *(*proc)(void *), void *arg, int opts=0, const char *desc=0)
char Sname[XrdOssSpace::minSNbsz]

References XrdCms::Config, XrdNetSocket::Create(), XrdNetSocket::Detach(), XrdSysError::Emsg(), XrdFrmConfig::Policy::Ext, XrdFrmConfig::Policy::Hold, XrdFrmPurge::Init(), mainServer(), XrdFrmConfig::Policy::maxFree, XrdFrmConfig::Policy::minFree, XrdFrmConfig::VPInfo::Name, XrdFrmConfig::VPInfo::Next, XrdFrmConfig::Policy::Next, XrdFrmPurge::Policy(), XrdSysThread::Run(), XrdFrc::Say, XrdFrmConfig::Policy::Sname, XRDNET_UDPSOCKET, and XRDSYSTHREAD_BIND.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mainServer()

void* mainServer ( void *  parg)

Definition at line 120 of file XrdFrmPurgMain.cc.

121 {
122 // int udpFD = *static_cast<int *>(parg);
123 // XrdFrmPurge::Server(udpFD);
124  return (void *)0;
125 }

Referenced by mainConfig().

+ Here is the caller graph for this function:

Variable Documentation

◆ Say

XrdOucTrace XrdTrace& Say

Definition at line 114 of file XrdFrmPurgMain.cc.

◆ XrdFrmOpts

const char* XrdFrmOpts = ":bc:dfhk:l:n:O:s:S:Tvz"
static

Definition at line 33 of file XrdFrmPurgMain.cc.

◆ XrdFrmUsage

const char* XrdFrmUsage
static
Initial value:
=
" [-b] [-c <cfgfile>] [-d] [-f] [-k {num|sz{k|m|g}|sig] [-l [=]<fn>] [-n name]"
" [-O free[,hold]] [-s pidfile] [-S site] [-T] [-v] [-z] [<spaces>] [<paths>]\n"

Definition at line 34 of file XrdFrmPurgMain.cc.

◆ XrdLog

XrdSysError XrdLog(0, "") ( ,
""   
)

Referenced by main().

◆ XrdXrootdTrace

XrdOucTrace* XrdXrootdTrace

Definition at line 112 of file XrdFrmPurgMain.cc.

Referenced by main().