Mailing List Archives
Authenticated access
|
|
|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [HTCondor-users] select multiple elements from lists, eval order in job transforms
- Date: Thu, 11 Jun 2020 20:51:55 +0000
- From: John M Knoeller <johnkn@xxxxxxxxxxx>
- Subject: Re: [HTCondor-users] select multiple elements from lists, eval order in job transforms
yes, the 'random' evaluation order of the old job-router style transform language leaves a lot to be desired.
This is the main reason why the Schedd supports a new optional transform language base on the config/submit language
Steps in the new transform language are evaluated in order, and temporary variables are permitted. The schedd
can tell which language you use by looking for the enclosing [] around the transform staements. leave them off
for the new language like this.
JOB_TRANSFORM_TagJob @=end
EVALSET AcctGroup toLower(AcctGroup)
# these two statements set temporary variables, they do not alter the job
EVALMACRO lead = split(AcctGroup,".")[0]
EVALMACRO prio = split(AcctGroup,".")[1]
# set AccountingGroup using the first two fields from AcctGroup that we stored in temp variables
EVALSET AccountingGroup join(".", "$(lead)","$(prio)",AcctGroupUser)
@end
The keywords and rules for the new transform language are in the latest 8.9.7 manual, but the language
itself actually works in 8.8 for Schedd transforms, this was the internal language that your job-router style
transform was converted into. You can see the conversion happen by looking at the SchedLog on startup.
-tj
-----Original Message-----
From: HTCondor-users <htcondor-users-bounces@xxxxxxxxxxx> On Behalf Of Carsten Aulbert
Sent: Tuesday, June 9, 2020 8:54 AM
To: HTCondor-Users Mail List <htcondor-users@xxxxxxxxxxx>
Subject: [HTCondor-users] select multiple elements from lists, eval order in job transforms
Dear condor wizards, sorcerers, conjurers and initiates,
for accounting purposes we let our users put something like
accounting_group = a.b.c.d
into their submit files and let condor_submit/schedd complain via submit
requirements if it does not conform to something expected.
Now, we want to modify the given value to only retain the leading two
bits and but it into the AccountingGroup job ad along with the user. For
a single piece of the value this can be easily done via
JOB_TRANSFORM_TagJob @=end
Eval_set_AccountingGroup = join(".", split(toLower(AcctGroup),
".")[1], AcctGroupUser);
Eval_set_AcctGroup = toLower(AcctGroup);
]
@end
however, I have no idea how to select say the first and second or the
first and third from the result of "split" - is there a direct way?
As a workaround I started creating a number of intermediate results:
JOB_TRANSFORM_TagJob @=end
[
Eval_set_AccountingLead = split(toLower(AcctGroup), ".")[0];
Eval_set_AccountingPrio = split(toLower(AcctGroup), ".")[1];
Eval_set_AccountingGroup = join(".", AccountingLead, AccountingPrio,
AcctGroupUser);
Eval_set_AcctGroup = toLower(AcctGroup);
]
@end
however, condor does re-order the eval_sets by alphabet (as can be seen
in the SchedLog:
06/09/20 13:41:39 (pid:3239) JOB_TRANSFORM_TagJob setup as transform
rule #1 :
NAME TagJob
EVALSET AccountingGroup
join(".",AccountingLead,AccountingPrio,AcctGroupUser)
EVALSET AccountingLead split(toLower(AcctGroup),".")[0]
EVALSET AccountingPrio split(toLower(AcctGroup),".")[1]
EVALSET AcctGroup toLower(AcctGroup)
And, quite correctly: AccountingGroup = undefined
Changing the job transform slightly:
JOB_TRANSFORM_TagJob @=end
[
Eval_set_AccountingALead = split(toLower(AcctGroup), ".")[0];
Eval_set_AccountingAPrio = split(toLower(AcctGroup), ".")[1];
Eval_set_AccountingGroup = join(".", AccountingALead, AccountingAPrio,
AcctGroupUser);
Eval_set_AcctGroup = toLower(AcctGroup);
]
@end
yiekds the wanted result:
AcctGroup = "admin.test.parallel1"
is transformed into
AccountingGroup = "admin.test.carsten"
Now, my two questions:
(1) Is there a way to get multiple elements from a list?
(2) Why is the ordering of job transforms so broken^Wsurprising for the
uninitiated?
Cheers
Carsten
--
Dr. Carsten Aulbert, Max Planck Institute for Gravitational Physics,
CallinstraÃe 38, 30167 Hannover, Germany
Phone: +49 511 762 17185