#include <XrdCmsAdmin.hh>
Definition at line 45 of file XrdCmsAdmin.hh.
◆ XrdCmsAdmin()
XrdCmsAdmin::XrdCmsAdmin |
( |
| ) |
|
|
inline |
Definition at line 67 of file XrdCmsAdmin.hh.
67 {Sname = 0; Stype =
"Server"; Primary = 0;}
◆ ~XrdCmsAdmin()
XrdCmsAdmin::~XrdCmsAdmin |
( |
| ) |
|
|
inline |
◆ InitAREvents()
bool XrdCmsAdmin::InitAREvents |
( |
void * |
arFunc | ) |
|
|
static |
Definition at line 176 of file XrdCmsAdmin.cc.
187 {
Say.
Emsg(
"InitAREvents", errno,
"start arevent relay");
int(* XrdOssStatInfo2_t)(const char *path, struct stat *buff, int opts, XrdOucEnv *envP, const char *lfn)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
static int Run(pthread_t *, void *(*proc)(void *), void *arg, int opts=0, const char *desc=0)
References XrdSysError::Emsg(), XrdSysThread::Run(), and XrdCms::Say.
◆ Login()
void XrdCmsAdmin::Login |
( |
int |
socknum | ) |
|
Definition at line 200 of file XrdCmsAdmin.cc.
202 const char *epname =
"Admin_Login";
203 const char *sMsg[2] = {
"temporary suspend requested by",
204 "long-term suspend requested by"};
214 if ((request = Stream.
GetLine()))
215 {
DEBUG(
"initial request: '" <<request <<
"'");
216 if (!(tp = Stream.
GetToken()) || strcmp(
"login", tp) || !do_Login())
217 {
Say.
Emsg(epname,
"Invalid admin login sequence");
220 }
else {
Say.
Emsg(epname,
"No admin login specified");
226 while((request = Stream.
GetLine()))
227 {
DEBUG(
"received request: '" <<request <<
"'");
229 {
if (!strcmp(
"resume", tp))
230 {
if ((tp = Stream.
GetToken()) && *tp ==
't') sPerm = 0;
234 else if (!strcmp(
"rmdid", tp)) do_RmDid();
235 else if (!strcmp(
"newfn", tp)) do_RmDud();
236 else if (!strcmp(
"perf", tp)) do_Perf();
237 else if (!strcmp(
"PERF", tp)) do_Perf(
true);
238 else if (!strcmp(
"suspend", tp))
239 {
if ((tp = Stream.
GetToken()) && *tp ==
't') sPerm = 0;
242 Say.
Emsg(
"Login", sMsg[sPerm], Stype, Sname);
244 else Say.
Emsg(epname,
"invalid admin request,", tp);
250 Say.
Emsg(
"Login", Stype, Sname,
"logged out");
static void Relay(int setSock, int newSock)
void Update(StateType StateT, int ActivVal, int StageVal=0)
int Attach(int FileDescriptor, int bsz=2047)
char * GetToken(int lowcase=0)
References XrdCmsState::Active, XrdCms::CmsState, DEBUG, XrdSysError::Emsg(), XrdCmsState::FrontEnd, XrdCms::Say, and XrdCmsState::Update().
Referenced by XrdXrootdLoginAdmin().
◆ MonAds()
void XrdCmsAdmin::MonAds |
( |
| ) |
|
Definition at line 268 of file XrdCmsAdmin.cc.
270 const char *epname =
"MonAds";
272 char buff[256], pname[64];
277 Say.
Emsg(epname,
"Monitoring", pname);
282 do{sFD = Con2Ads(pname);
284 do {
do {rc =
read(sFD, buff,
sizeof(buff));}
while(rc > 0);
285 }
while(rc < 0 && errno == EINTR);
287 if (rc < 0)
Say.
Emsg(epname, errno,
"maintain contact with", pname);
288 else Say.
Emsg(epname,
"Lost contact with", pname);
ssize_t read(int fildes, void *buf, size_t nbyte)
static void Snooze(int seconds)
References XrdCmsConfig::adsPort, close, XrdCms::CmsState, XrdCms::Config, XrdSysError::Emsg(), XrdCmsState::FrontEnd, read(), XrdCms::Say, XrdSysTimer::Snooze(), and XrdCmsState::Update().
◆ Notes()
Definition at line 301 of file XrdCmsAdmin.cc.
303 const char *epname =
"Notes";
309 Stream.
Attach(AnoteSock->Detach());
310 Sname = strdup(
"anon");
314 do {
while((request = Stream.
GetLine()))
315 {
DEBUG(
"received notification: '" <<request <<
"'");
317 {
if (!strcmp(
"gone", tp)) do_RmDid(1);
318 else if (!strcmp(
"rmdid", tp)) do_RmDid(0);
319 else if (!strcmp(
"have", tp)) do_RmDud(1);
320 else if (!strcmp(
"newfn", tp)) do_RmDud(0);
321 else if (!strcmp(
"nostage", tp))
323 Say.
Emsg(
"Notes",
"nostage requested by",Stype,Sname);
325 else if (!strcmp(
"stage", tp))
327 else Say.
Emsg(epname,
"invalid notification,", tp);
336 Say.
Emsg(epname, rc,
"accept notification");
References XrdCms::CmsState, DEBUG, XrdNetSocket::Detach(), XrdSysError::Emsg(), XrdCms::Say, XrdCmsState::Stage, and XrdCmsState::Update().
Referenced by XrdCmsStartAnote().
◆ Relay()
void XrdCmsAdmin::Relay |
( |
int |
setSock, |
|
|
int |
newSock |
|
) |
| |
|
static |
Definition at line 344 of file XrdCmsAdmin.cc.
346 const char *epname =
"Admin_Relay";
347 static const int HdrSz =
sizeof(
CmsRRHdr);
350 static int curSock = -1;
352 int retc, mySock = -1;
357 if (curSock >= 0)
close(curSock);
358 else if (newSock >= 0) SReady.Post();
359 if (newSock < 0) curSock = -1;
367 do {
while(mySock < 0)
369 if (curSock < 0) {SMutex.
UnLock(); SReady.Wait(); SMutex.
Lock();}
370 mySock = curSock; curSock = -1;
374 do {arP = AdminReq::getReq();
376 if ((retc =
write(mySock, &arP->
Hdr, HdrSz)) != HdrSz
378 retc = (retc < 0 ? errno : ECANCELED);
380 delete arP; retc = 0;
384 if (retc)
Say.
Emsg(
"AdminRelay", retc,
"relay", arP->
Req);
ssize_t write(int fildes, const void *buf, size_t nbyte)
static int setOpts(int fd, int options, XrdSysError *eDest=0)
References close, XrdCms::AdminReq::Data, DEBUG, XrdCms::AdminReq::Dlen, XrdSysError::Emsg(), XrdCms::AdminReq::getReq(), XrdCms::AdminReq::Hdr, XrdSysMutex::Lock(), XrdCms::AdminReq::Path, XrdSysSemaphore::Post(), XrdCms::AdminReq::Req, XrdCms::AdminReq::Requeue(), XrdCms::Say, XrdNetSocket::setOpts(), XrdSysMutex::UnLock(), XrdSysSemaphore::Wait(), and write().
◆ RelayAREvent()
void XrdCmsAdmin::RelayAREvent |
( |
| ) |
|
|
static |
Definition at line 395 of file XrdCmsAdmin.cc.
405 while((evP = areFirst))
406 {
if (evP == areLast) areFirst = areLast = 0;
407 else areFirst = evP->
next;
412 {
if (mod & CmsHaveRequest::Pending)
423 (*areFunc)(evP->
text, 0, evType, 0, evP->
text);
424 DEBUG(
"sending managers " <<evWhat <<evP->
text);
static void Inform(const char *What, const char *Data, int Dlen)
static const int PendAdded
Path has been added in pending mode.
static const int FileRemoved
Path has been removed.
static const int FileAdded
Path has been added.
References DEBUG, EPNAME, XrdOssStatEvent::FileAdded, XrdOssStatEvent::FileRemoved, XrdCmsManager::Inform(), XrdCms::kYR_have, XrdOucTList::next, XrdOssStatEvent::PendAdded, XrdCms::CmsHaveRequest::Pending, and XrdOucTList::text.
◆ Send()
void XrdCmsAdmin::Send |
( |
const char * |
Req, |
|
|
XrdCmsRRData & |
Data |
|
) |
| |
◆ setSync()
◆ Start()
Definition at line 451 of file XrdCmsAdmin.cc.
453 const char *epname =
"Start";
460 Say.
Emsg(epname, errno,
"start admin relay");
467 AdminSock->
SockName(dest,
sizeof(dest));
468 Say.
Emsg(epname,
"Waiting for primary server to login via", dest);
471 else if (SyncUp) {SyncUp->
Post(); SyncUp = 0;}
475 while(1)
if ((InSock = AdminSock->
Accept()) >= 0)
478 {
Say.
Emsg(epname, errno,
"start admin");
481 }
else Say.
Emsg(epname, errno,
"accept connection");
int SockName(char *buff, int blen)
References XrdNetSocket::Accept(), XrdCmsConfig::adsPort, close, XrdCms::Config, XrdCmsConfig::doWait, XrdSysError::Emsg(), XrdSysThread::Run(), XrdCms::Say, XrdNetSocket::setOpts(), and XrdNetSocket::SockName().
Referenced by XrdCmsStartAdmin(), and XrdXrootdInitAdmin().
The documentation for this class was generated from the following files: