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

Re: [HTCondor-users] behaviour of if on 'false' /macro return



ah, shoot - of course, I let EVALSET work on the temporary variables
tmp.baz & tmp.foo only at the end! So that the regexp()s just at the
start are not happening there...

On 2018-11-02 14:57, Thomas Hartmann wrote:
> btw: are/is the transforms/syntax actually a stack?? (in one or the
> other direction?)
> 
> I just noticed, that the order of steps seems to be 'inverse' to what I
> have naively assumed, i.e., the rules top-down [1].
> 
> mytmp.baz gets true when evaluating the requirements string - that got
> modified 'before' etc. ð
> 
> Cheers,
>   Thomas
> 
> 
> [1]
>> condor_transform_ads -verbose -rule /tmp/my.rule.order
> /tmp/my.classads.sl6
> EVALMACRO tmp.MyRequirements to
> regexps("(.*)SL6(.*)",unparse(Requirements),"\\1CentOS7\\2")
>           tmp.MyRequirements = ( OpSysAndVer == "CentOS7" && (
> TARGET.Arch == "X86_64" ) )
> SET Requirements to ( OpSysAndVer == "CentOS7" && ( TARGET.Arch ==
> "X86_64" ) )
> SET +SingularityImage to "/foo/sl6"
> EVALSET mytmpfoo to regexp("OpSysAndVer == \"SL6\"",unparse(Requirements))
>     SET mytmpfoo to false
> EVALSET mytmpbaz to regexp("OpSysAndVer ==
> \"CentOS7\"",unparse(Requirements))
>     SET mytmpbaz to true
> +SingularityImage = "/foo/sl6"
> DiskUsage = 250000
> executable = mypayload.sh
> input = mypayload.data
> mytmpbaz = true
> mytmpfoo = false
> requirements = ( OpSysAndVer == "CentOS7" && ( TARGET.Arch == "X86_64" ) )
> universe = vanilla
> 
> 
> 
> On 2018-11-02 12:40, Thomas Hartmann wrote:
>> Hi all,
>>
>> a short question how if/else in the old-style syntax handles false
>> returns from macros:
>>
>> ~~> I have a set of class ads 'my.classads.{sl6,el7}' (see attachement)
>> which I want to transform with 'my.rule'
>>
>> my.rule has an if/else on the return of a regexp(), that is supposed to
>> return true when finding 'SL6' and false else. Applying my.rule to the
>> ClassAds with the stringified requirements containing 'SL6' works fine [1].
>> But if I apply the same rule to a string where regexp does not match,
>> the whole transform just fails [2] - where I would have expected that
>> the rule would just take the else branch.
>>
>> To test if regexp() does not return ERROR on a non-string argument or
>> so, in a cross-check 'my.rule.set' just sets the result of regexp() as
>> ClassAd [3].
>> For
>>   my.classads.{sl6,el7}
>> the return values are a boolean
>>   WhatIsRegexp = {true,false}
>> as far as I can see ~~> and my.rule should take the else-branch on
>> false, or?
>>
>> If the target is not a string but an ad, EVALSET regexp() ends up as
>> undefined [4], which I suppose is the way for EVAL* to interpolate ERROR.
>>
>> Long story short: why does the transform fail on 'if false'? ;)
>>
>> Cheers and thanks for any hints,
>>   Thomas
>>
>>
>>
>> [1]
>>> condor_transform_ads -verbose -rule /tmp/my.rule /tmp/my.classads.sl6
>> EVALMACRO tmp.MyRequirements to
>> regexps("(.*)SL6(.*)",unparse(Requirements),"\\1CentOS7\\2")
>>           tmp.MyRequirements = ( OpSysAndVer == "CentOS7" && (
>> TARGET.Arch == "X86_64" ) )
>> SET Requirements to ( OpSysAndVer == "CentOS7" && ( TARGET.Arch ==
>> "X86_64" ) )
>> SET +SingularityImage to "/foo/sl6"
>> +SingularityImage = "/foo/sl6"
>> DiskUsage = 250000
>> executable = mypayload.sh
>> input = mypayload.data
>> requirements = ( OpSysAndVer == "CentOS7" && ( TARGET.Arch == "X86_64" ) )
>> universe = vanilla
>>
>> [2]
>>> condor_transform_ads -verbose -rule /tmp/my.rule /tmp/my.classads.el7
>> Transform of ad  failed!
>>
>> [3]
>>> condor_transform_ads -verbose -rule /tmp/my.rule.set
>> /tmp/my.classads.{sl6,el7}
>>
>> [4]
>>> condor_transform_ads -verbose -rule
>> /tmp/my.rule.set.nonstringasregexptarget /tmp/my.classads.el7
>> ...
>> WhatIsRegexp = undefined
>>
>>
>>
>>
>> _______________________________________________
>> 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/
>>
>>
>>
>> _______________________________________________
>> 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/

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature