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

Re: [Condor-users] Classads and matchmakiing



 Hi Mark,

In Condor 7.5.4, which is just about to be released, there is a new feature that allows you to store in the job ad a history of machine attributes for machines the job has run on. This is done by specifying which attributes you want to store, using job_machine_attrs in the submit file and/or SYSTEM_JOB_MACHINE_ATTRS in the configuration file. Then you can specify how much history to keep using job_machine_attrs_history_length and/or SYSTEM_JOB_MACHINE_ATTRS_HISTORY_LENGTH.

In versions of Condor prior to 7.5.4, you might be able to get the effect you want. As a side-effect of $$() expansion, an additional attribute is stored in your job ad named MATCH_EXP_<AttrName>, where AttrName is an attribute in your job ad that uses $$() references. This MATCH_EXP_<AttrName> attribute is set to the value of AttrName with all $$() references expanded against the currently matched machine. The part I'm not so sure about without some testing is the lifespan of that MATCH_EXP attribute. If it lasts through the next successful matchmaking attempt for the job, then it should work for your purposes.

--Dan

On 10/20/10 10:39 AM, Mark Calleja wrote:
Hi,

My question relates to how one can set a job classad to select a subset of machines, when that subset may be different on a rescheduled job to what it was on original job submission. Consider this scenario: I have two groups of machines, which I define to be "RED" or BLUE". In the condor_config.local of those machines I put:

TEST_TYPE = "RED"  # or "BLUE"
STARTD_ATTRS = $(STARTD_ATTRS), TEST_TYPE

I now want to submit a job that initially can pick out either a RED or BLUE machine (but it must be one of these, not one without a TEST_TYPE defined). Furthermore, I want to make sure that if my job was to get preempted from a machine, then it can only be rescheduled to run on machine of the same TEST_TYPE that it started off on. So if it started it on a RED machine, then it can only be re-run on a RED machine, etc.

My (unsuccessful) attempt at a submit script to do this has:

+testType = "$$([TEST_TYPE])"
Requirements = (TEST_TYPE =!= UNDEFINED) && ((MY.testType =?= "") || (MY.testType =?= UNDEFINED) || (MY.testType == TEST_TYPE))

The problem is that this never matches. I was hoping that since the $$() construct only evaluates after a match has been made then either (MY.testType =?= "") or (MY.testType =?= UNDEFINED) would evaluate to true on the initial submission, with (MY.testType == TEST_TYPE) becoming true for a specific TEST_TYPE in any subsequent rescheduled event.

Apparently I'm doing something silly, so would any kind soul like to point out my mistake?

Best regards,
Mark

_______________________________________________
Condor-users mailing list
To unsubscribe, send a message to condor-users-request@xxxxxxxxxxx with a
subject: Unsubscribe
You can also unsubscribe by visiting
https://lists.cs.wisc.edu/mailman/listinfo/condor-users

The archives can be found at:
https://lists.cs.wisc.edu/archive/condor-users/