Concurrency limits allow for protecting resources by providing a way to cap the number of jobs requiring a specific resource that can run at one time.
For instance, limit licenses and filer access at four regional data centers.
CONCURRENCY_LIMIT_DEFAULT = 15 license.north_LIMIT = 30 license.south_LIMIT = 30 license.east_LIMIT = 30 license.west_LIMIT = 45 filer.north_LIMIT = 75 filer.south_LIMIT = 150 filer.east_LIMIT = 75 filer.west_LIMIT = 75
Notice the repetition.
In addition to the repetition, every license.* and filer.* must be known and recorded in configuration. The set may be small in this example, but imagine imposing a limit on each user or each submission. The set of users is board, dynamic and may differ by region. The set of submissions is a more extreme version of the users case, yet it is still realistic.
To simplify the configuration management for groups of limits, a new feature to provide group defaults to limit was added for the Condor 7.8 series.
The feature requires that only the exception to a rule be called out explicitly in configuration. For instance, license.west and filer.south are the exceptions in the configuration above. Simplified configuration available in 7.8,
CONCURRENCY_LIMIT_DEFAULT = 15 CONCURRENCY_LIMIT_DEFAULT_license = 30 CONCURRENCY_LIMIT_DEFAULT_filer = 75 license.west_LIMIT = 45 filer.south_LIMIT = 150
In action,
$ for limit in license.north license.south license.east license.west filer.north filer.south filer.east filer.west; do echo queue 1000 | condor_submit -a cmd=/bin/sleep -a args=1d -a concurrency_limits=$limit; done $ condor_q -format '%s\n' ConcurrencyLimits -const 'JobStatus == 2' | sort | uniq -c | sort -n 30 license.east 30 license.north 30 license.south 45 license.west 75 filer.east 75 filer.north 75 filer.west 150 filer.south
