From f2adddd076f1a6b082e209723beb7aecf0b32fb2 Mon Sep 17 00:00:00 2001 From: Kathryn Zhou <52860192+kathryn-zhou@users.noreply.github.com> Date: Fri, 25 Sep 2020 15:47:34 -0400 Subject: [PATCH] Optimize user-defined-constraint (#1685) * extract job-constant values into defrecord * pass in job constraints instead of job itself Co-authored-by: Kathryn Zhou --- scheduler/src/cook/scheduler/constraints.clj | 5 ++--- scheduler/test/cook/test/scheduler/constraints.clj | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/scheduler/src/cook/scheduler/constraints.clj b/scheduler/src/cook/scheduler/constraints.clj index 156b20d601..7fa39fa910 100644 --- a/scheduler/src/cook/scheduler/constraints.clj +++ b/scheduler/src/cook/scheduler/constraints.clj @@ -227,7 +227,7 @@ ; threads and we want to avoid contention in LazySeq vec))) -(defrecord user-defined-constraint [job] +(defrecord user-defined-constraint [constraints] JobConstraint (job-constraint-name [this] (get-class-name this)) (job-constraint-evaluate @@ -243,7 +243,6 @@ (log/error (str "Unknown operator " operator " api.clj should have prevented this from happening.")) true)))) - constraints (job->constraints job) passes? (every? vm-passes-constraint? constraints)] [passes? (when-not passes? "Host doesn't pass at least one user supplied constraint.")])) @@ -255,7 +254,7 @@ "Constructs a user-defined-constraint. The constraint asserts that the vm passes the constraints the user supplied as host constraints" [job] - (->user-defined-constraint job)) + (->user-defined-constraint (job->constraints job))) (defrecord estimated-completion-constraint [estimated-end-time host-lifetime-mins] JobConstraint diff --git a/scheduler/test/cook/test/scheduler/constraints.clj b/scheduler/test/cook/test/scheduler/constraints.clj index 6a0d28e8f8..9edf919252 100644 --- a/scheduler/test/cook/test/scheduler/constraints.clj +++ b/scheduler/test/cook/test/scheduler/constraints.clj @@ -46,8 +46,7 @@ {:constraint/attribute "instance_type" :constraint/operator :constraint.operator/equals :constraint/pattern "mem.large"}] - job {:job/constraint constraints} - user-defined-constraint (constraints/->user-defined-constraint job)] + user-defined-constraint (constraints/->user-defined-constraint constraints)] (is (= true (first (constraints/job-constraint-evaluate user-defined-constraint nil {"is_spot" "true" "instance_type" "mem.large"})))) (is (= false (first (constraints/job-constraint-evaluate user-defined-constraint nil {"is_spot" "true" "instance_type" "cpu.large"})))) (is (= false (first (constraints/job-constraint-evaluate user-defined-constraint nil {"is_spot" "false" "instance_type" "mem.large"}))))