From 5c8b32618c686a2e34c456b183b8210c0d99d1c4 Mon Sep 17 00:00:00 2001 From: Noah Hilverling Date: Wed, 17 Mar 2021 13:34:07 +0100 Subject: [PATCH] RedisConnection::WriteRESP: Use one asio::async_write instead of many --- lib/icingadb/redisconnection.hpp | 35 ++++++-------------------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/lib/icingadb/redisconnection.hpp b/lib/icingadb/redisconnection.hpp index 253f75e77..7b075491e 100644 --- a/lib/icingadb/redisconnection.hpp +++ b/lib/icingadb/redisconnection.hpp @@ -139,9 +139,6 @@ namespace icinga template static void WriteRESP(AsyncWriteStream& stream, const Query& query, boost::asio::yield_context& yc); - template - static void WriteInt(AsyncWriteStream& stream, intmax_t i, boost::asio::yield_context& yc); - RedisConnection(boost::asio::io_context& io, String host, int port, String path, String password, int db); void Connect(boost::asio::yield_context& yc); @@ -493,36 +490,16 @@ void RedisConnection::WriteRESP(AsyncWriteStream& stream, const Query& query, bo { namespace asio = boost::asio; - asio::async_write(stream, asio::const_buffer("*", 1), yc); - WriteInt(stream, query.size(), yc); - asio::async_write(stream, asio::const_buffer("\r\n", 2), yc); + asio::streambuf writeBuffer; + std::ostream msg(&writeBuffer); + + msg << "*" << query.size() << "\r\n"; for (auto& arg : query) { - asio::async_write(stream, asio::const_buffer("$", 1), yc); - - WriteInt(stream, arg.GetLength(), yc); - - asio::async_write(stream, asio::const_buffer("\r\n", 2), yc); - asio::async_write(stream, asio::const_buffer(arg.CStr(), arg.GetLength()), yc); - asio::async_write(stream, asio::const_buffer("\r\n", 2), yc); + msg << "$" << arg.GetLength() << "\r\n" << arg << "\r\n"; } -} -/** - * Write a Redis protocol int to stream - * - * @param stream Redis server connection - * @param i Redis protocol int - */ -template -void RedisConnection::WriteInt(AsyncWriteStream& stream, intmax_t i, boost::asio::yield_context& yc) -{ - namespace asio = boost::asio; - - char buf[21] = {}; - sprintf(buf, "%jd", i); - - asio::async_write(stream, asio::const_buffer(buf, strlen(buf)), yc); + asio::async_write(stream, writeBuffer, yc); } }