Recipe: How to require a submit file to contain some specific request

Some pool administrators prefer their users to always set some specific attribute, or to request some minimum amount of resources. The condor_schedd SUBMIT_REQUIREMENT_<Name> mechanism can enforce this, and cause condor_submit to fail when the user does not follow the site policies. Optionally, this can be configured to be a warning instead of an error, which can be useful when a site is transitioning to a new policy. Because this is implemented in the condor_schedd, this same mechanism works for submits from python.

Requiring jobs to request a minimum amount of memory

Let’s say that an administrator wants to require that all jobs request at least one gigabyte of memory. The first thing to do is to define a new submit requirements rule with a distinct name. Let’s call this MinimalRequestMemory. We must then add this rule to this list of submit requirements rules that the schedd will enforce. Note that the condor_schedd will enforce all the rules in order in this list, so if you have multiple rules, the order matters.

SUBMIT_REQUIREMENT_NAMES = $(SUBMIT_REQUIREMENT_NAMES) MinimalRequestMemory

The next thing is to define which jobs will be affected by this rule. In our case, we want this to apply to all jobs that request less than one gigabyte of memory. Because the unit of memory in HTCondor is megabytes, and because the SUBMIT_REQUIREMENT mechanism does not support unit suffices, we more express this as “1000” instead of “1 GB”, with the “megabytes” being implied. Note that the expression defines what a successful job looks like. In our case, we want to say that the job’s RequestMemory attribute must be greater than 1000, in order to successfully pass this rule. This is done by defining

SUBMIT_REQUIREMENT_MinimalRequestMemory = RequestMemory > 1000

The above two knobs are sufficient to enforce the policy. However, the error message that the user will see when they violate this policy is generally not very helpful. We can improve this by defining a custom error message to be shown when this rule is violated. This is done by defining a macro named SUBMIT_REQUIREMENT_<Name>_REASON, where <Name> is the name of the rule we defined above. An example might look like

SUBMIT_REQUIREMENT_MinimalRequestMemory_REASON = "All jobs must request at least 1 GB of memory."

Finally, if we want this to be a warning, and allow submit to proceed, we can make this a warning by setting the SUBMIT_REQUIREMENT_<Name>_IS_WARNING to true. For example,

SUBMIT_REQUIREMENT_MinimalRequestMemory_IS_WARNING = True

Changing these will require a condor_reconfig of the condor_schedd to take effect.