Ticket #35: 147

File 147, 10.2 KB (added by dlove, 10 years ago)
Line 
1Index: libs/sched/sge_complex_schedd.c
2===================================================================
3RCS file: /cvs/gridengine/source/libs/sched/sge_complex_schedd.c,v
4retrieving revision 1.68
5diff -b -c -r1.68 sge_complex_schedd.c
6*** libs/sched/sge_complex_schedd.c     19 Jan 2007 11:36:41 -0000      1.68
7--- libs/sched/sge_complex_schedd.c     30 Jan 2008 13:34:45 -0000
8***************
9*** 156,162 ****
10  *
11  *******************************************************************************/
12  lListElem* get_attribute(const char *attrname, lList *config_attr, lList *actual_attr, lList *load_attr,
13!    const lList *centry_list, lListElem *queue, u_long32 layer, double lc_factor, dstring *reason,
14     bool zero_utilization, u_long32 start_time, u_long32 duration)
15  {
16     lListElem *actual_el=NULL;
17--- 156,162 ----
18  *
19  *******************************************************************************/
20  lListElem* get_attribute(const char *attrname, lList *config_attr, lList *actual_attr, lList *load_attr,
21!    const lList *centry_list, lListElem *ep, u_long32 layer, double lc_factor, dstring *reason,
22     bool zero_utilization, u_long32 start_time, u_long32 duration)
23  {
24     lListElem *actual_el=NULL;
25***************
26*** 334,340 ****
27     }
28 
29     /* we are working on queue level, so we have to check for queue resource values */
30!    if (queue){
31        bool created=false;
32        if(!cplx_el){
33           cplx_el = lCopyElem(lGetElemStr(centry_list, CE_name, attrname));
34--- 334,340 ----
35     }
36 
37     /* we are working on queue level, so we have to check for queue resource values */
38!    if (ep){
39        bool created=false;
40        if(!cplx_el){
41           cplx_el = lCopyElem(lGetElemStr(centry_list, CE_name, attrname));
42***************
43*** 346,352 ****
44           lSetUlong(cplx_el, CE_pj_dominant, DOMINANT_TYPE_VALUE);
45           created = true;
46        }
47!       if (!get_queue_resource(cplx_el, queue, attrname) && created)
48           lFreeElem(&cplx_el);
49     }
50     DRETURN(cplx_el);
51--- 346,352 ----
52           lSetUlong(cplx_el, CE_pj_dominant, DOMINANT_TYPE_VALUE);
53           created = true;
54        }
55!       if (!get_queue_resource(cplx_el, ep, attrname, layer) && created)
56           lFreeElem(&cplx_el);
57     }
58     DRETURN(cplx_el);
59***************
60*** 374,385 ****
61  *
62  *
63  *******************************************************************************/
64! bool get_queue_resource(lListElem *queue_elem, const lListElem *queue, const char *attrname){
65     double dval=0.0;
66     const char *value=NULL;
67     char as_str[100];
68     int type;
69     int pos = 0;
70 
71        DENTER(BASIS_LAYER, "get_queue_resource");
72 
73--- 374,387 ----
74  *
75  *
76  *******************************************************************************/
77! bool get_queue_resource(lListElem *queue_elem, const lListElem *ep, const char *attrname, u_long32 layer){
78     double dval=0.0;
79     const char *value=NULL;
80     char as_str[100];
81     int type;
82     int pos = 0;
83+    const struct queue2cmplx *rsrcs = (layer==DOMINANT_LAYER_HOST)?host_resource:queue_resource;
84+    int nresources = (layer==DOMINANT_LAYER_HOST)?max_host_resources:max_queue_resources;
85 
86        DENTER(BASIS_LAYER, "get_queue_resource");
87 
88***************
89*** 390,397 ****
90 
91        { /* test, if its a valid queue resource */
92           bool found = false;
93!          for(; pos < max_queue_resources; pos++)
94!             if(strcmp(attrname, queue_resource[pos].name) == 0){
95                 found=true;
96                 break;
97              }
98--- 392,399 ----
99 
100        { /* test, if its a valid queue resource */
101           bool found = false;
102!          for(; pos < nresources; pos++)
103!             if(strcmp(attrname, rsrcs[pos].name) == 0){
104                 found=true;
105                 break;
106              }
107***************
108*** 403,440 ****
109        }
110 
111        /* read stuff from queue and set to new elements */
112!       type = queue_resource[pos].type;
113        switch(type) {
114        case TYPE_INT:
115!          dval = (double)lGetUlong(queue, queue_resource[pos].field);
116!          snprintf(as_str, 100, sge_u32, lGetUlong(queue, queue_resource[pos].field));
117           break;
118 
119        case TYPE_TIM:
120        case TYPE_MEM:
121        case TYPE_DOUBLE:
122!          if ((value = lGetString(queue, queue_resource[pos].field))) {
123              parse_ulong_val(&dval, NULL, type, value, NULL, 0);
124           }
125           break;
126 
127        case TYPE_BOO:
128!          dval = (double)lGetBool(queue, queue_resource[pos].field);
129!          snprintf(as_str, 100, "%d", (int)lGetBool(queue, queue_resource[pos].field));
130           break;
131 
132        case TYPE_STR:
133        case TYPE_CSTR:
134        case TYPE_RESTR:
135!          value = lGetString(queue, queue_resource[pos].field);
136           break;
137        case TYPE_HOST:
138!          value = lGetHost(queue, queue_resource[pos].field);
139           break;
140        }
141       
142   
143!       if (!is_attr_prior2(queue_elem, dval, CE_doubleval, CE_dominant)){
144           lSetUlong(queue_elem,CE_dominant , DOMINANT_LAYER_QUEUE|DOMINANT_TYPE_FIXED);
145           lSetDouble(queue_elem,CE_doubleval , dval);
146 
147--- 405,442 ----
148        }
149 
150        /* read stuff from queue and set to new elements */
151!       type = rsrcs[pos].type;
152        switch(type) {
153        case TYPE_INT:
154!          dval = (double)lGetUlong(ep, rsrcs[pos].field);
155!          snprintf(as_str, 100, sge_u32, lGetUlong(ep, rsrcs[pos].field));
156           break;
157 
158        case TYPE_TIM:
159        case TYPE_MEM:
160        case TYPE_DOUBLE:
161!          if ((value = lGetString(ep, rsrcs[pos].field))) {
162              parse_ulong_val(&dval, NULL, type, value, NULL, 0);
163           }
164           break;
165 
166        case TYPE_BOO:
167!          dval = (double)lGetBool(ep, rsrcs[pos].field);
168!          snprintf(as_str, 100, "%d", (int)lGetBool(ep, rsrcs[pos].field));
169           break;
170 
171        case TYPE_STR:
172        case TYPE_CSTR:
173        case TYPE_RESTR:
174!          value = lGetString(ep, rsrcs[pos].field);
175           break;
176        case TYPE_HOST:
177!          value = lGetHost(ep, rsrcs[pos].field);
178           break;
179        }
180       
181   
182!       if (!is_attr_prior2(ep, dval, CE_doubleval, CE_dominant)){
183           lSetUlong(queue_elem,CE_dominant , DOMINANT_LAYER_QUEUE|DOMINANT_TYPE_FIXED);
184           lSetDouble(queue_elem,CE_doubleval , dval);
185 
186***************
187*** 1265,1271 ****
188           }
189        }
190        /* SG: this should be an error case */
191!       host_el = get_attribute(attrname, config_attr, actual_attr, load_attr, centry_list, NULL, DOMINANT_LAYER_HOST,
192                                lc_factor, NULL, false, start_time, duration);
193        if (!global_el && host_el) {
194           ret_el = host_el;
195--- 1267,1273 ----
196           }
197        }
198        /* SG: this should be an error case */
199!       host_el = get_attribute(attrname, config_attr, actual_attr, load_attr, centry_list, host, DOMINANT_LAYER_HOST,
200                                lc_factor, NULL, false, start_time, duration);
201        if (!global_el && host_el) {
202           ret_el = host_el;
203Index: libs/sched/sge_complex_schedd.h
204===================================================================
205RCS file: /cvs/gridengine/source/libs/sched/sge_complex_schedd.h,v
206retrieving revision 1.19
207diff -b -c -r1.19 sge_complex_schedd.h
208*** libs/sched/sge_complex_schedd.h     19 Jan 2007 11:36:41 -0000      1.19
209--- libs/sched/sge_complex_schedd.h     30 Jan 2008 13:34:45 -0000
210***************
211*** 57,63 ****
212 
213  bool is_attr_prior(lListElem *upper_el, lListElem *lower_el);
214 
215! bool get_queue_resource(lListElem *queue_elem, const lListElem *queue, const char *attrname);
216 
217  lListElem*
218  get_attribute(const char *attrname, lList *config_attr, lList *actual_attr,
219--- 57,63 ----
220 
221  bool is_attr_prior(lListElem *upper_el, lListElem *lower_el);
222 
223! bool get_queue_resource(lListElem *queue_elem, const lListElem *queue, const char *attrname, u_long32 layer);
224 
225  lListElem*
226  get_attribute(const char *attrname, lList *config_attr, lList *actual_attr,
227Index: libs/sgeobj/sge_centry.c
228===================================================================
229RCS file: /cvs/gridengine/source/libs/sgeobj/sge_centry.c,v
230retrieving revision 1.53.2.1
231diff -b -c -r1.53.2.1 sge_centry.c
232*** libs/sgeobj/sge_centry.c    19 Jun 2007 09:29:16 -0000      1.53.2.1
233--- libs/sgeobj/sge_centry.c    30 Jan 2008 13:34:46 -0000
234***************
235*** 62,68 ****
236 
237  /* EB: ADOC: add commets */
238 
239!    const int max_host_resources=23;/* specifies the number of elements in the host_resource array */
240     const struct queue2cmplx host_resource[] = {
241        {"arch",           0, TYPE_STR},
242        {"cpu",            0, TYPE_DOUBLE},
243--- 62,68 ----
244 
245  /* EB: ADOC: add commets */
246 
247!    const int max_host_resources=24;/* specifies the number of elements in the host_resource array */
248     const struct queue2cmplx host_resource[] = {
249        {"arch",           0, TYPE_STR},
250        {"cpu",            0, TYPE_DOUBLE},
251***************
252*** 70,75 ****
253--- 70,78 ----
254        {"load_long",      0, TYPE_DOUBLE},
255        {"load_medium",    0, TYPE_DOUBLE},
256        {"load_short",     0, TYPE_DOUBLE},
257+ #if 1
258+       {"hostname",       EH_name,        TYPE_HOST},
259+ #endif
260        {"mem_free",       0, TYPE_MEM},
261        {"mem_total",      0, TYPE_MEM},
262        {"mem_used",       0, TYPE_MEM},
263***************
264*** 89,98 ****
265        {"virtual_used",   0, TYPE_MEM}
266     };
267 
268!    const int max_queue_resources=24; /* specifies the number of elements in the queue_resource array */
269     const struct queue2cmplx queue_resource[] = {
270        {"qname",            QU_qname,            TYPE_STR },
271        {"hostname",         QU_qhostname,        TYPE_HOST},
272        {"slots",            QU_job_slots,        TYPE_INT },
273        {"tmpdir",           QU_tmpdir,           TYPE_STR },
274        {"seq_no",           QU_seq_no,           TYPE_INT },
275--- 92,103 ----
276        {"virtual_used",   0, TYPE_MEM}
277     };
278 
279!    const int max_queue_resources=23; /* specifies the number of elements in the queue_resource array */
280     const struct queue2cmplx queue_resource[] = {
281        {"qname",            QU_qname,            TYPE_STR },
282+ #if 0
283        {"hostname",         QU_qhostname,        TYPE_HOST},
284+ #endif
285        {"slots",            QU_job_slots,        TYPE_INT },
286        {"tmpdir",           QU_tmpdir,           TYPE_STR },
287        {"seq_no",           QU_seq_no,           TYPE_INT },