       (while true
         (let [[[user connector] ch] (alts! [chan (timeout timeout-processing-loop)])]
           (when (not-nil? user)
+            (swap! busy mark-busy [(get-name user) connector])
             (try
-              (log/log-debug (str "executing collect request for " (get-name user) " and " (.getConnectorInstanceName connector)))
+              (log/log-info (str "executing collect request for " (get-name user) " and " (.getConnectorInstanceName connector)))
               (collect! user connector)
               (if (updator/metering-enabled?)
-                (update-metric! user))
+                 (update-metric! user))
               (catch Exception e (log/log-warn "caught exception executing collect request: " (.getMessage e))))))))))
 
 (defonce ^:dynamic *online-collect-processor* (collect-readers online-collector-chan))

; This is the channel for queuing all user requests
(def all-collector-chan (chan (sliding-buffer collector-chan-size)))

(defn collect!
  [user connector]
  (let [ch (chan 1)]
    (go
      (let [[v c] (alts! [ch (timeout timeout-collect)])]
        (if (nil? v)
          (log/log-error
            "Timeout collecting vms for user "
            (get-name user)
            " on cloud "
            (.getConnectorInstanceName connector))
          (log/log-info "Number of VMs collected for user " (get-name user)
            " on cloud "
            (.getConnectorInstanceName connector) ": " v))))
    (go (>! ch (Collector/collect user connector)))))

(defn update-metric!
  [user]

    :name slipstream.async.Collector
    :methods [#^{:static true
                 :doc "Takes: run user"}
[start [] void]]))

(defn seconds-in-msecs
  [seconds]
  (* 1000 seconds))

(defn msecs-in-seconds
  [msecs]
  (/ msecs 1000))

(def busy (atom #{}))

(defn- mark-busy
 [current-busy v]
 (conj current-busy v))

(defn- free
 [current-busy v]
 (disj current-busy v))

(def collector-chan-size 512)
(def number-of-readers 32)
(def timeout-all-users-loop (seconds-in-msecs 240))
(def timeout-online-loop (seconds-in-msecs 10))
(def timeout-collect (* 2 timeout-collect-loop))
(def timeout-collect-reader-release (+ timeout-collect (seconds-in-msecs 2)))
(def timeout-processing-loop (seconds-in-msecs 60))

(defn get-value
