 ;; TODO: slots that have dead task should be reused as long as supervisor is active
 
 ;; public so it can be mocked out
-(defn compute-new-task->node+port [conf storm-id existing-assignment storm-cluster-state available-slots callback task-heartbeats-cache]
-  (let [existing-assigned (reverse-map (:task->node+port existing-assignment))
+(defn compute-new-task->node+port [conf storm-id existing-assignment storm-cluster-state callback task-heartbeats-cache]
+  (let [available-slots (available-slots conf storm-cluster-state callback)
+        existing-assigned (reverse-map (:task->node+port existing-assignment))
         storm-conf (read-storm-conf conf storm-id)
         all-task-ids (set (.task-ids storm-cluster-state storm-id))
         alive-ids (set (alive-tasks conf storm-id storm-cluster-state

              supervisor-ids))
       )))

(defn- available-slots
  [conf storm-cluster-state callback]
  (let [supervisor-ids (.supervisors storm-cluster-state callback)


(declare reassign-topology)
(declare delay-event)
(declare mk-assignments)

(defn kill-transition [nimbus storm-id]
  (fn [kill-time]
