Changeset 48 for trunk/pbs_drmaa/submit.c
- Timestamp:
- 12/07/11 18:00:32 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/pbs_drmaa/submit.c
r45 r48 49 49 #endif 50 50 51 static void 52 pbsdrmaa_submit_destroy( pbsdrmaa_submit_t *self ); 53 54 static char * 55 pbsdrmaa_submit_submit( pbsdrmaa_submit_t *self ); 56 57 static void 58 pbsdrmaa_submit_eval( pbsdrmaa_submit_t *self ); 59 60 61 static void 62 pbsdrmaa_submit_set( pbsdrmaa_submit_t *self, const char *pbs_attr, 63 char *value, unsigned placeholders ); 51 static void pbsdrmaa_submit_destroy( pbsdrmaa_submit_t *self ); 52 53 static char *pbsdrmaa_submit_submit( pbsdrmaa_submit_t *self ); 54 55 static void pbsdrmaa_submit_eval( pbsdrmaa_submit_t *self ); 56 57 static void pbsdrmaa_submit_set( pbsdrmaa_submit_t *self, const char *pbs_attr, char *value, unsigned placeholders ); 64 58 65 59 static void pbsdrmaa_submit_apply_defaults( pbsdrmaa_submit_t *self ); … … 101 95 self->apply_job_environment = pbsdrmaa_submit_apply_job_environment; 102 96 self->apply_email_notification = pbsdrmaa_submit_apply_email_notification; 103 self->apply_native_specification = 104 pbsdrmaa_submit_apply_native_specification; 97 self->apply_native_specification = pbsdrmaa_submit_apply_native_specification; 105 98 106 99 self->pbs_job_attributes = pbsdrmaa_pbs_template_new(); … … 143 136 TRY 144 137 { 145 constfsd_template_t *pbs_tmpl = self->pbs_job_attributes;146 unsignedi;138 fsd_template_t *pbs_tmpl = self->pbs_job_attributes; 139 int i; 147 140 int tries_left = ((pbsdrmaa_session_t *)self->session)->max_retries_count; 148 141 int sleep_time = 1; 149 142 150 for( i = 0; i < PBSDRMAA_N_PBS_ATTRIBUTES; i++ )143 for( i = PBSDRMAA_N_PBS_ATTRIBUTES - 1; i >= 0; i-- ) /* down loop -> start with custom resources */ 151 144 { 152 145 const char *name = pbs_tmpl->by_code( pbs_tmpl, i )->name; 153 if( name && name[0] != '!' && pbs_tmpl->get_attr( pbs_tmpl, name ) ) 146 const char *value = pbs_tmpl->get_attr( pbs_tmpl, name ); 147 148 if (!value) 149 continue; 150 151 if ( i == PBSDRMAA_ATTR_CUSTOM_RESOURCES) 154 152 { 155 const char *value; 156 157 value = pbs_tmpl->get_attr( pbs_tmpl, name ); 153 char *value_copy = fsd_strdup(value); 154 char *tok_comma_ctx = NULL; 155 char *res_token = NULL; 156 /* matlab:2,simulink:1 */ 157 158 for (res_token = strtok_r(value_copy, ",", &tok_comma_ctx); res_token; res_token = strtok_r(NULL, ",", &tok_comma_ctx)) 159 { 160 char *value_p = strstr(res_token, ":"); 161 162 if (value_p) 163 { 164 char *name_p = NULL; 165 *value_p = '\0'; 166 value_p++; 167 name_p = fsd_asprintf("Resource_List.%s",res_token); 168 pbs_attr = pbsdrmaa_add_attr( pbs_attr, name_p, value_p ); 169 fsd_free(name_p); 170 } 171 else 172 { 173 fsd_exc_raise_code( FSD_DRMAA_ERRNO_INVALID_ATTRIBUTE_VALUE ); 174 } 175 } 176 177 fsd_free(value_copy); 178 } 179 else if (i == PBSDRMAA_ATTR_NODE_PROPERTIES) 180 { 181 const char *nodes_value = pbs_tmpl->get_attr( pbs_tmpl, PBSDRMAA_NODES ); 182 char *final_value = NULL; 183 184 if (!nodes_value) 185 { 186 final_value = fsd_asprintf("%s:%s",nodes_value, value); 187 } 188 else 189 { 190 final_value = fsd_asprintf("1:%s", value); 191 } 192 193 pbs_tmpl->set_attr( pbs_tmpl, PBSDRMAA_NODES, final_value); 194 fsd_free(final_value); 195 } 196 else 197 { 158 198 pbs_attr = pbsdrmaa_add_attr( pbs_attr, name, value ); 159 199 } … … 448 488 } 449 489 490 491 450 492 void 451 493 pbsdrmaa_submit_apply_job_environment( pbsdrmaa_submit_t *self ) … … 471 513 472 514 if (env_v) 473 {515 { 474 516 ii = 0; 475 while (env_v[ii]) { 517 while (env_v[ii]) 518 { 476 519 len += strlen(env_v[ii]) + 1; 477 520 ii++; 478 }479 }521 } 522 } 480 523 481 524 len+= strlen("PBS_O_WORKDIR=") + strlen(wd); … … 531 574 } 532 575 533 static void parse_resources(fsd_template_t *pbs_attr,const char *resources) 576 static const char *get_job_env(pbsdrmaa_submit_t *self, const char *env_name) 577 { 578 const fsd_template_t *jt = self->job_template; 579 const char *const *env_v = jt->get_v_attr( jt, DRMAA_V_ENV); 580 int ii = 0; 581 582 while (env_v[ii]) 583 { 584 char *eq_p = strstr(env_v[ii], "="); 585 586 if ((eq_p) && (strncmp(env_v[ii], env_name, eq_p - env_v[ii]) == 0)) 587 return ++eq_p; 588 589 ii++; 590 } 591 592 return NULL; 593 } 594 595 static void parse_resources(pbsdrmaa_submit_t *self, fsd_template_t *pbs_attr,const char *resources) 534 596 { 535 597 char * volatile name = NULL; … … 550 612 name = fsd_asprintf("Resource_List.%s", arg); 551 613 value = ++psep; 552 pbs_attr->set_attr( pbs_attr, name , value ); 614 if (value[0] == '$' && get_job_env(self, value + 1)) 615 pbs_attr->set_attr( pbs_attr, name , get_job_env(self, value + 1) ); /*get value from job env variable */ 616 else 617 pbs_attr->set_attr( pbs_attr, name , value ); 553 618 fsd_free(name); 554 619 name = NULL; … … 600 665 const char *native_specification ) 601 666 { 602 667 fsd_log_enter(( "({native_specification=%s})", native_specification )); 603 668 604 669 if( native_specification == NULL ) … … 700 765 break; 701 766 case 'l' : 702 parse_resources( pbs_attr, arg);767 parse_resources( self, pbs_attr, arg); 703 768 break; 704 769 default :
Note: See TracChangeset
for help on using the changeset viewer.