55extern XrdScheduler*
schedP;
57extern XrdSysError
Elog;
59extern XrdOssArcConfig
Config;
78 {
return strcmp(a->
path, b->
path) < 0;}
100do{
DEBUG(
"Staging "<<arcvPath);
102 if ((fd = XrdSysFD_Open(arcvPath, O_RDONLY)) < 0)
103 StageError(errno,
"open/stage file", arcvPath);
105 seTime = time(0) - seTime;
106 DEBUG(arcvPath<<
" staged in "<<seTime<<
" second(s)");
129 int n =
Config.maxStage++;
131 DEBUG(
"Staging queue empty; MaxStage="<<n+1);
144 DEBUG(
"Running "<<
Config.MssComName<<
" online "<<path);
145 rc =
Config.MssComProg->Run(
"online", path);
149 if (rc < -1 || rc > 1) finrc = -1;
151 DEBUG(
"MssComCmd returned "<<rc<<
" -> "<<finrc);
153 return static_cast<MssRC>(finrc);
160void XrdOssArcStage::Reset(
const char* path)
168 auto it = Active.find(&aInfo);
169 if (it != Active.end())
194 auto it = Active.find(&aInfo);
195 if (it != Active.end())
197 if ((*it)->rc == 0) rc = EINPROGRESS;
198 else {rc = (*it)->rc;
212 case isTrue:
return 0;
break;
213 default:
return EINVAL;
break;
224 auto iResult = Active.insert(stageInfo);
250 DEBUG(
"MaxStage="<<smx<<
" staging '"<<path<<(smx?
"' scheduled":
"' queued"));
261void XrdOssArcStage::StageError(
int rc,
const char* what,
const char* path)
268 auto it = Active.find(&aInfo);
270 if (it != Active.end()) (*it)->rc = rc;
274 Elog.Emsg(
"Stage", rc, what, path);
XrdJob(const char *desc="")
virtual void DoIt() override
XrdOssArcStage(const char *aPath)
static MssRC isOnline(const char *path)
static int Stage(const char *path, const char *mssPath)
std::set< ActInfo *, decltype(&cmpLess)> Active & cmpLess
std::queue< const char * > Pending
XrdSysError Elog(0, "OssArc_")
ActInfo(const char *p, bool cpy=false)