override def get()

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
  }