未验证 提交 dabc405a 编写于 作者: D Dejan Mijić 提交者: GitHub

Use Chunk.foldLeft (#798)

上级 940ce275
......@@ -46,23 +46,18 @@ final class SingleNodeExecutor private (
private def drainWith(e: RedisError): UIO[Unit] = responses.takeAll.flatMap(ZIO.foreachDiscard(_)(_.fail(e)))
private def send: IO[RedisError.IOError, Option[Unit]] =
requests.takeBetween(1, RequestQueueSize).flatMap { reqs =>
val buffer = ChunkBuilder.make[Byte]()
val it = reqs.iterator
while (it.hasNext) {
val req = it.next()
buffer ++= RespValue.Array(req.command).asBytes
}
val bytes = buffer.result()
requests.takeBetween(1, RequestQueueSize).flatMap { requests =>
val bytes =
requests
.foldLeft(ChunkBuilder.make[Byte]())((buffer, req) => buffer ++= RespValue.Array(req.command).asBytes)
.result()
connection
.write(bytes)
.mapError(RedisError.IOError(_))
.tapBoth(
e => ZIO.foreachDiscard(reqs)(_.promise.fail(e)),
_ => ZIO.foreachDiscard(reqs)(req => responses.offer(req.promise))
e => ZIO.foreachDiscard(requests)(_.promise.fail(e)),
_ => ZIO.foreachDiscard(requests)(req => responses.offer(req.promise))
)
}
......
......@@ -39,7 +39,7 @@ private[redis] sealed trait RespValue extends Product with Serializable { self =
Headers.BulkString +: (encode(bytes.length.toString) ++ bytes ++ CrLf)
case Array(elements) =>
val data = elements.foldLeft[Chunk[Byte]](Chunk.empty)(_ ++ _.asBytes)
val data = elements.foldLeft(Chunk.empty[Byte])(_ ++ _.asBytes)
Headers.Array +: (encode(elements.size.toString) ++ data)
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册