in storehaus-core/src/main/scala/com/twitter/storehaus/MinBatchingReadableStore.scala [61:84]
override def get(k: K): Future[Option[V]] = multiGet(Set(k)).apply(k)
override def multiGet[K1 <: K](keys: Set[K1]): Map[K1, Future[Option[V]]] = {
val res: Map[K1, Promise[Option[V]]] =
keys.map(_ -> new Promise[Option[V]]())(breakOut)
toGet.effect { case (size, pending) =>
// order does not matter, so just push on
val next = res.foldLeft(pending) { (l, pair) => pair::l }
val newSize = size + res.size
if (newSize >= minMultiGetSize) {
// time to run:
(Some(next), empty)
}
else {
// Wait for another get
(None, (newSize, next))
}
}
._1
.foreach(doMulti(_))
// always return the promise
res
}