12 #ifndef ROOT_XrdProofdPriorityMgr
13 #define ROOT_XrdProofdPriorityMgr
28 #include "XrdOuc/XrdOucHash.hh"
29 #include "XrdOuc/XrdOucString.hh"
33 class XrdProofdDirective;
34 class XrdProofdManager;
39 #define XPPM_NOPRIORITY 999999
40 class XrdProofdSessionEntry {
49 XrdProofdSessionEntry(
const char *u,
const char *g,
int pid);
50 virtual ~XrdProofdSessionEntry();
52 int SetPriority(
int priority = XPPM_NOPRIORITY);
55 class XrdProofdPriorityMgr :
public XrdProofdConfig {
57 XrdSysRecMutex fMutex;
59 XrdProofdManager *fMgr;
60 XrdOucHash<XrdProofdSessionEntry> fSessions;
61 XrdOucHash<XrdProofdPriority> fPriorities;
69 void RegisterDirectives();
70 int DoDirectivePriority(
char *, XrdOucStream *,
bool);
71 int DoDirectiveSchedOpt(
char *, XrdOucStream *,
bool);
74 XrdProofdPriorityMgr(XrdProofdManager *mgr, XrdProtocol_Config *pi, XrdSysError *e);
75 virtual ~XrdProofdPriorityMgr() { }
77 enum PMProtocol { kChangeStatus = 0, kSetGroupPriority = 1 };
79 int Config(
bool rcf = 0);
80 int DoDirective(XrdProofdDirective *d,
81 char *val, XrdOucStream *cfg,
bool rcf);
83 inline XrdProofdPipe *Pipe() {
return &fPipe; }
85 int AddSession(
const char *u,
const char *g,
int pid);
86 int RemoveSession(
int pid);
87 void SetGroupPriority(
const char *grp,
int priority);
90 bool IsSchedOn() {
return ((fSchedOpt != kXPD_sched_off) ? 1 : 0); }
91 int SetNiceValues(
int opt = 0);
92 void SetSchedOpt(
int opt) { XrdSysMutexHelper mhp(&fMutex);
94 int SetProcessPriority(
int pid,
const char *usr,
int &dp);