     (measure-method [:get-batch ids]
       (->> ids
            (block/get-batch store)
-           (map (partial metered-block this ::read-bytes)))))
+           (map (partial metered-block this ::io-read)))))
 
 
   (-put-batch!
     [this blocks]
     (measure-method [:put-batch! (mapv :id blocks)]
       (->> blocks
-           (map (partial metered-block this ::write-bytes))
+           (map (partial metered-block this ::io-write))
            (block/put-batch! store)
-           (map (partial metered-block this ::read-bytes)))))
+           (map (partial metered-block this ::io-read)))))
 
 
   (-delete-batch!



(defn- metering-input-stream
  "Wrap the given input stream in a proxy which will call the given
  `record-io!` function with the number of bytes read."
  [^InputStream input-stream record-io!]
  (let [meter (volatile! [(System/nanoTime) 0])]
    (letfn [(flush!
              []
              (let [[last-time sum] @meter
                    elapsed (/ (- (System/nanoTime) last-time) 1e9)]
                (when (pos? sum)
                  ; TODO: wire up label
                  (log/tracef "Transferred %s of block %s (%s)"
                              (format-bytes sum "B")
                              (format-bytes (/ sum elapsed) "Bps"))
                  (record-io! sum))
                (vreset! [(System/nanoTime) 0])))]
      (proxy [ProxyInputStream] [input-stream]


  (-get
    [this id]
    (measure-method [:get id]
      (metered-block this ::io-read (store/-get store id))))


  (-put!
    [this block]
    (measure-method [:put! (:id block)]
      (->> block
           (metered-block this ::io-write)
           (store/-put! store)
           (metered-block this ::io-read))))


  (-delete!
