/******************************************************************************/ /* */ /* X r d F r m X f r M a i n . c c */ /* */ /* (c) 2010 by the Board of Trustees of the Leland Stanford, Jr., University */ /* All Rights Reserved */ /* Produced by Andrew Hanushevsky for Stanford University under contract */ /* DE-AC02-76-SFO0515 with the Department of Energy */ /* */ /* This file is part of the XRootD software suite. */ /* */ /* XRootD is free software: you can redistribute it and/or modify it under */ /* the terms of the GNU Lesser General Public License as published by the */ /* Free Software Foundation, either version 3 of the License, or (at your */ /* option) any later version. */ /* */ /* XRootD is distributed in the hope that it will be useful, but WITHOUT */ /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */ /* License for more details. */ /* */ /* You should have received a copy of the GNU Lesser General Public License */ /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */ /* COPYING (GPL license). If not, see . */ /* */ /* The copyright holder's institutional names and contributor's names may not */ /* be used to endorse or promote products derived from this software without */ /* specific prior written permission of the institution or contributor. */ /******************************************************************************/ /* This is the "main" part of the frm_xfragent & frm_xfrd commands. */ /* This is the "main" part of the frm_migrd command. Syntax is: */ static const char *XrdFrmOpts = ":bc:dfhk:l:n:s:S:Tvz"; static const char *XrdFrmUsage = " [-b] [-c ] [-d] [-f] [-k {num|sz{k|m|g}|sig] [-l [=]] [-n name]\n" " [-s pidfile] [-S site] [-T] [-v] [-z]\n"; /* Where: -b Run as a true daemon in the bacground (only for xfrd). -c The configuration file. The default is '/opt/xrootd/etc/xrootd.cf' -d Turns on debugging mode. -f Fix orphaned files (i.e., lock and pin) by removing them. -k Keeps num log files or no more that sz log files. -l Specifies location of the log file. This may also come from the XrdOucLOGFILE environmental variable. By default, error messages go to standard error. -n The instance name. -s The pidfile name. -S The site name. -T Runs in test mode (no actual migration will occur). -v Verbose mode, typically prints each file details. */ /******************************************************************************/ /* i n c l u d e f i l e s */ /******************************************************************************/ #include #include #include #include #include #include #include #include #include "XrdFrc/XrdFrcTrace.hh" #include "XrdFrm/XrdFrmConfig.hh" #include "XrdFrm/XrdFrmXfrAgent.hh" #include "XrdFrm/XrdFrmXfrDaemon.hh" #include "XrdSys/XrdSysError.hh" #include "XrdSys/XrdSysHeaders.hh" #include "XrdSys/XrdSysLogger.hh" #include "XrdSys/XrdSysPthread.hh" #include "XrdSys/XrdSysUtils.hh" using namespace XrdFrc; using namespace XrdFrm; /******************************************************************************/ /* G l o b a l V a r i a b l e s */ /******************************************************************************/ XrdFrmConfig XrdFrm::Config(XrdFrmConfig::ssXfr, XrdFrmOpts, XrdFrmUsage); // The following is needed to resolve symbols for objects included from xrootd // XrdOucTrace *XrdXrootdTrace; XrdSysError XrdLog(0, ""); XrdOucTrace XrdTrace(&Say); /******************************************************************************/ /* m a i n */ /******************************************************************************/ int main(int argc, char *argv[]) { XrdSysLogger Logger; extern int mainConfig(); char *pP; // Turn off sigpipe and host a variety of others before we start any threads // XrdSysUtils::SigBlock(); // Set the default stack size here // if (sizeof(long) > 4) XrdSysThread::setStackSize((size_t)1048576); else XrdSysThread::setStackSize((size_t)786432); // If we are named frm_pstg then we are runnng in agent-mode // if (!(pP = rindex(argv[0], '/'))) pP = argv[0]; else pP++; if (strncmp("frm_xfrd", pP, 8)) Config.isAgent = 1; // Perform configuration // Say.logger(&Logger); XrdLog.logger(&Logger); if (!Config.Configure(argc, argv, &mainConfig)) exit(4); // Fill out the dummy symbol to avoid crashes // XrdXrootdTrace = new XrdOucTrace(&Say); // All done, simply exit based on our persona // exit(Config.isAgent ? XrdFrmXfrAgent::Start() : XrdFrmXfrDaemon::Start()); } /******************************************************************************/ /* m a i n C o n f i g */ /******************************************************************************/ int mainConfig() { // Initialize the daemon, depending on who we are to be // return (Config.isAgent ? 0 : !XrdFrmXfrDaemon::Init()); }