Figuring out how evaluation happens in configuration and policy is a common problem. The confusion is justified.
Configuration provides substitution with $() syntax, while policy is full ClassAd language evaluation without $() syntax.
Configuration is all the parameters listed in files discoverable with condor_config_val -config
.
$ condor_config_val -config Configuration source: /etc/condor/condor_config Local configuration sources: /etc/condor/config.d/00personal_condor.config
Policy is the ClassAd expression found on the right-hand side of specific configuration parameters. For instance,
$ condor_config_val -v START START: ( (KeyboardIdle > 15 * 60) && ( ((LoadAvg - CondorLoadAvg) <= 0.3) || (State != "Unclaimed" && State != "Owner")) ) Defined in '/etc/condor/condor_config', line 753.
Configuration evaluation allows for substitution of configuration parameters with $()
.
$ cat /etc/condor/condor_config | head -n753 | tail -n1 START = $(UWCS_START) $ condor_config_val -v UWCS_START UWCS_START: ( (KeyboardIdle > 15 * 60) && ( ((LoadAvg - CondorLoadAvg) <= 0.3) || (State != "Unclaimed" && State != "Owner")) ) Defined in '/etc/condor/condor_config', line 808. $ cat /etc/condor/condor_config | head -n808 | tail -n3 UWCS_START = ( (KeyboardIdle > $(StartIdleTime)) \ && ( $(CPUIdle) || \ (State != "Unclaimed" && State != "Owner")) )
Here START is actually the value of UWCS_START, provided by $(UWCS_START).
The substitution is recursive. Explore /etc/condor/condor_config and the JustCPU parameter. It is actually a parameter that is never read by daemons or tools. It is only useful in other configuration parameters. It’s shorthand.
Policy evaluation is full ClassAd expression evaluation. The evaluation happens at the appropriate times while daemons or tools are running.
Taking START as an example, the words KeyboardIdle, LoadAvg, CondorLoadAvg, State
are attributes found on machine ads, and it is evaluated by the condor_startd and condor_negotiator to figure out if a job is allowed to start on a resource.
$ condor_status -l slot1@eeyore.local | grep -e ^KeyboardIdle -e ^LoadAvg -e ^CondorLoadAvg -e ^State KeyboardIdle = 0 LoadAvg = 0.290000 CondorLoadAvg = 0.0 State = "Owner"
Evaluation happens by recursively evaluating those attributes. The expression ((KeyboardIdle > 15 * 60) && (((LoadAvg - CondorLoadAvg) <= 0.3) || (State != "Unclaimed" && State != "Owner")))
becomes ((0 > 15 * 60) && (((0.29 - 0.0) <= 0.3) || ("Owner" != "Unclaimed" && "Owner" != "Owner")))
. And so forth.
That’s it.
