ROOT  6.06/09
Reference Guide
XrdProofSched.h
Go to the documentation of this file.
1 // @(#)root/proofd:$Id$
2 // Author: G. Ganis Jun 2007
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_XrdProofSched
13 #define ROOT_XrdProofSched
14 
15 //////////////////////////////////////////////////////////////////////////
16 // //
17 // XrdProofSched //
18 // //
19 // Authors: G. Ganis, CERN, 2007 //
20 // //
21 // Interface for a PROOF scheduler. //
22 // Alternative scheduler implementations should be provided as shared //
23 // library containing an implementation of this class. The library //
24 // must also provide a function to load an instance of this class //
25 // with the following signature (see commented example in //
26 // XrdProofSched.cxx): //
27 // extern "C" { //
28 // XrdProofSched *XrdgetProofSched(const char *cfg, //
29 // XrdProofdManager *mgr, //
30 // XrdProofGroupMgr *grpmgr, //
31 // XrdSysError *edest); //
32 // } //
33 // Here 'cfg' is the xrootd config file where directives to configure //
34 // the scheduler are specified, 'mgr' is the instance of the cluster //
35 // manager from where the scheduler can get info about the available //
36 // workers and their status, 'grpmgr' is the instance of the group //
37 // bringing the definition of the groups for this run, and 'edest' is //
38 // instance of the error logger to be used. //
39 // The scheduler is identified by a name of max 16 chars. //
40 // //
41 //////////////////////////////////////////////////////////////////////////
42 
43 #include <list>
44 
45 #include "XrdProofdAux.h"
46 #include "XrdOuc/XrdOucHash.hh"
47 #include "XrdOuc/XrdOucString.hh"
48 
49 #include "XrdSysToOuc.h"
50 
51 #include "XrdProofdConfig.h"
52 
53 #define kXPSMXNMLEN 17
54 
55 class XrdProofdManager;
56 class XrdProofGroupMgr;
57 class XrdProofdProofServ;
58 class XrdProofWorker;
59 class XrdSysError;
60 class XrdOucStream;
61 
63 
64 public:
65  XrdProofSched(const char *name,
66  XrdProofdManager *mgr, XrdProofGroupMgr *grpmgr,
67  const char *cfn, XrdSysError *e = 0);
68  virtual ~XrdProofSched() { }
69 
70  // Returns list of workers to be used by session 'xps'.
71  // The return code must be one of the following:
72  // -1 Some failure occured; cannot continue
73  // 0 A new list has been assigned to the session 'xps' and
74  // returned in 'wrks'
75  // 1 The list currently assigned to the session is the one
76  // to be used
77  // 2 No worker could be assigned now; session should be queued
78  virtual int GetWorkers(XrdProofdProofServ *xps,
79  std::list<XrdProofWorker *> */*wrks*/,
80  const char *);
81 
82  // To be called after some nodes become free
83  virtual int Reschedule();
84 
85  // Update info about a session
86  virtual int UpdateSession(XrdProofdProofServ *, int = 0, void * = 0) { return 0; }
87 
88  // Max number of essions we are allowed to start
89  virtual int MaxSessions() const { return fMaxSessions; }
90 
91  // Update group properties according to the current state
92  virtual int UpdateProperties() { return 0; }
93 
94  virtual int ExportInfo(XrdOucString &);
95 
96  virtual bool IsValid() { return fValid; }
97 
98  const char *Name() const { return (const char *) &fName[0]; }
99 
100  virtual int ProcessDirective(XrdProofdDirective *d,
101  char *val, XrdOucStream *cfg, bool rcf);
102  virtual int Enqueue(XrdProofdProofServ *xps, XrdProofQuery *query);
103  virtual void DumpQueues(const char *prefix = 0);
104 
105  virtual XrdProofdProofServ *FirstSession();
106 
107  int CheckFrequency() const { return fCheckFrequency; }
108  inline XrdProofdPipe *Pipe() { return &fPipe; }
109 
110  virtual int Config(bool rcf = 0);
111  virtual int DoDirective(XrdProofdDirective *d,
112  char *val, XrdOucStream *cfg, bool rcf);
113 
115 
116 protected:
117  char fName[kXPSMXNMLEN]; // Name of this protocol
118  bool fValid; // TRUE if the scheduler is usable
119  XrdProofdManager *fMgr; // Cluster manager
120  XrdProofGroupMgr *fGrpMgr; // Groups manager
121 
122  int fMaxSessions; // max number of sessions
123  int fMaxRunning; // max number of running sessions
124  int fWorkerMax; // max number or workers per user
125  int fWorkerSel; // selection option
126  int fNextWrk; // Reference index for RR sel option
127  int fOptWrksPerUnit; // optimal # of workers per CPU/HD
128  int fMinForQuery; // Minimal number of workers for a query
129  double fNodesFraction; // the fraction of free units to assign
130  // to a query.
131  bool fUseFIFO; // use FIFO or refuse if overloaded
132  std::list<XrdProofdProofServ *> fQueue; // the queue with sessions (jobs);
133 
134  XrdOucHash<XrdProofdDirective> fConfigDirectives; // Config directives
135 
138 
139  XrdSysError *fEDest; // Error message handler
140 
141 
142  virtual void RegisterDirectives();
143  virtual int DoDirectiveSchedParam(char *, XrdOucStream *, bool);
144  virtual int DoDirectiveResource(char *, XrdOucStream *, bool);
145 
146  virtual int GetNumWorkers(XrdProofdProofServ *xps);
147  virtual void ResetParameters();
148 };
149 
150 
151 // Plugin loader handle
152 typedef XrdProofSched *(*XrdProofSchedLoader_t)(const char *, XrdProofdManager *,
153  XrdProofGroupMgr *, const char *,
154  XrdSysError *);
155 
156 #endif
const char * Name() const
Definition: XrdProofSched.h:98
char fName[kXPSMXNMLEN]
XrdProofGroupMgr * fGrpMgr
#define kXPSMXNMLEN
Definition: XrdProofSched.h:53
virtual int ProcessDirective(XrdProofdDirective *d, char *val, XrdOucStream *cfg, bool rcf)
Update the priorities of the active sessions.
virtual int ExportInfo(XrdOucString &)
Fill sbuf with some info about our current status.
virtual void DumpQueues(const char *prefix=0)
Dump the content of the waiting sessions queue.
virtual int DoDirectiveSchedParam(char *, XrdOucStream *, bool)
Process 'schedparam' directive.
XrdProofdPipe * Pipe()
virtual int Config(bool rcf=0)
Configure this instance using the content of file 'cfn'.
XrdProofdManager * fMgr
virtual int Enqueue(XrdProofdProofServ *xps, XrdProofQuery *query)
Queue a query in the session; if this is the first querym enqueue also the session.
virtual int DoDirective(XrdProofdDirective *d, char *val, XrdOucStream *cfg, bool rcf)
Update the priorities of the active sessions.
std::list< XrdProofdProofServ * > fQueue
int CheckFrequency() const
virtual void ResetParameters()
Reset values for the configurable parameters.
#define XrdSysError
Definition: XpdSysError.h:8
virtual int MaxSessions() const
Definition: XrdProofSched.h:89
virtual int UpdateSession(XrdProofdProofServ *, int=0, void *=0)
Definition: XrdProofSched.h:86
virtual int UpdateProperties()
Definition: XrdProofSched.h:92
XrdSysError * fEDest
virtual bool IsValid()
Definition: XrdProofSched.h:96
XrdOucHash< XrdProofdDirective > fConfigDirectives
#define name(a, b)
Definition: linkTestLib0.cpp:5
virtual void RegisterDirectives()
Register directives for configuration.
double fNodesFraction
virtual int GetWorkers(XrdProofdProofServ *xps, std::list< XrdProofWorker * > *, const char *)
Get a list of workers that can be used by session 'xps'.
virtual XrdProofdProofServ * FirstSession()
Get first valid session.
virtual int DoDirectiveResource(char *, XrdOucStream *, bool)
Process 'resource' directive.
virtual int Reschedule()
Consider starting some query from the queue.
virtual ~XrdProofSched()
Definition: XrdProofSched.h:68
XrdProofSched(const char *name, XrdProofdManager *mgr, XrdProofGroupMgr *grpmgr, const char *cfn, XrdSysError *e=0)
Constructor.
virtual int GetNumWorkers(XrdProofdProofServ *xps)
Calculate the number of workers to be used given the state of the cluster.
XrdProofdPipe fPipe