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

Re: [Condor-users] Custom job classads?



There is a way to accomplish this, but it involves getting into the state machine a bit more here. So the startd has an _expression_ isOwner that determines when the machine is in the "Owner" state. By default this value is set to:
isOwner= $(START) =?= False

This means that the machine is in the Owner state when START is false. Here's where it gets complicated. The isOwner _expression_ is purely evaluated in the context of the machine classad, while the start _expression_ is evaluated in the context of the job being considered and the machine ClassAd. Thus, if you put terms in your START _expression_ that reference the job, they won't evaluate properly in your isOwner _expression_.

The way around this is to define the isOwner to contain portions of the START policy that only reference the machine ad, while keeping START the same.

So let's take an example. Suppose you want to have the machine run jobs after the keyboard is idle for 10 minutes and Foo is set to True, you would set:
START=  (KeyboardIdle > 10 * $(MINUTE)) && (Foo=?=True)
Because the isOwner _expression_ has no idea what foo is, you would set it to be:
isOwner=(KeyboardIdle > 10 * $(MINUTE)) =?= False

Alternately, to keep your policies well organized you could create,
#my start policy referencing machine attributes
MY_MACHINE_START= (KeyboardIdle > 10 * $(MINUTE))
#you change MY_MACHINE_START and it changes in both
#of the appropriate places below
START = $(MY_MACHINE_START) && (Foo=?=True)
isOwner= $(MY_MACHINE_START) =?= False

Either way, the isOwner _expression_ only relies on the Machine oriented policies in your start _expression_, while the Start _expression_ implements the full policy using machine and job attributes.

I hope this helps,
Jason

==========================
Jason A. Stowe

Cycle Computing, LLC
http://www.cyclecomputing.com