[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [HTCondor-users] $INT conversion failing in submit file



Thanks TJ and ToddM

This really helps me understand why $INT was not parsingâ.seems just int() is the way to go for my problem, and itâs working now.

Cheers,
Mike

> On Jan 3, 2018, at 5:33 PM, John M Knoeller <johnkn@xxxxxxxxxxx> wrote:
> 
> $INT() (and all of the $xxx macros) expand AT SUBMIT TIME.   They can refer to other variables in the submit file, but not to job attributes or to machine attributes.   Also, the body of $INT() or any of the $() macro functions may not contain any () characters.   so this
> 
>   $INT(substr(Machine,7,9),'%d') 
> 
> simply will not parse.  while this
> 
>  temp =  substr(Machine,7,9)
>  requirements = $INT(temp,%d) <= 16
> 
> Will parse, but since Machine is not defined at submit time, substr(Machine,7,9) will evaluate to undefined, which cannot be printed as an integer.
> 
> As was mentioned, you need to use int() here since you want to refer to an attribute of the slot at match time, rather than a variable of the submit file at submit time. 
> 
> Think of $INT() as just like $(), It still expands at submit time using submit variables, but you get to control the way the value is formatted. So it can be do things like having each job in the cluster match to a different (specific) machine.
> 
>     requirements = Machine == "exec_node_$INT(Process,%04d)"
> 
> So Job 10.0 will have 
> 
>   requirements = Machine == "exec_node_0000"
> 
> job 10.1 will have
> 
>   requirements = Machine == "exec_node_0001"
> 
> etc.
> 
> 
> -----Original Message-----
> From: HTCondor-users [mailto:htcondor-users-bounces@xxxxxxxxxxx] On Behalf Of Todd L Miller
> Sent: Wednesday, January 3, 2018 4:36 PM
> To: HTCondor-Users Mail List <htcondor-users@xxxxxxxxxxx>
> Subject: Re: [HTCondor-users] $INT conversion failing in submit file
> 
>> Hereâs my requirements line:
>> 
>> ( substr(Machine,0,5)=="ARCWI") && ($INT(substr(Machine,7,9),'%d') <= 16))
>> 
>> If I only use the first statement, only ARCWI machines are matched, but 
>> I also need to limit to number 16 or less.
> 
> 	As I understand it, $INT() is a macro and not a parsed function 
> cal.  That means the literal text of everything to the left of the first 
> comma inside the parentheses must be a valid macro (reference), and 
> everything to the right of it must be a valid format string.  (I'm not 
> sure if $INT() even properly nests parentheses, but based on the error 
> message you posted, I'm guessing it doesn't.)  Something like the 
> following in your submit file should work:
> 
> +MachineNumber = substr(Machine,7,2)
> Requirements = ... ($INT(MachineNumber) <= 16) ...
> 
> 	However, as ToddT noted, pretty much anywhere you can use the 
> ClassAd function int() you should prefer it to the $INT() macro (which is 
> intended for configuration files).
> 
> - ToddM
> 
> _______________________________________________
> HTCondor-users mailing list
> To unsubscribe, send a message to htcondor-users-request@xxxxxxxxxxx with a
> subject: Unsubscribe
> You can also unsubscribe by visiting
> https://lists.cs.wisc.edu/mailman/listinfo/htcondor-users
> 
> The archives can be found at:
> https://lists.cs.wisc.edu/archive/htcondor-users/