From patchwork Fri Dec 8 14:53:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13485485 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="W9Nyo+9G"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="C7cE9wxd" Received: from wout5-smtp.messagingengine.com (wout5-smtp.messagingengine.com [64.147.123.21]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D95F226A9 for ; Fri, 8 Dec 2023 06:53:44 -0800 (PST) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 25BD93200A26; Fri, 8 Dec 2023 09:53:44 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Fri, 08 Dec 2023 09:53:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:sender :subject:subject:to:to; s=fm1; t=1702047223; x=1702133623; bh=MR 8/vdeKYlYQpksNgtUNJ5uwcpcroH1Gk4ksTnYEmuM=; b=W9Nyo+9GmALbV7PkKG tdsqY+QjR20tXmjDMjtX6Z+M/w9F0E/uYA2Wt5K6UTUtqgqKN5GdZPnVba+Fhtqf ABb5Qegx+XI1FnvNfgIwVg2zRpiynhooU2vobDlalb3obubMUY3oJismMvGxtQx/ o9piGmuli744FdkiXkfWQpIE0Ox0WlO6x2hPfm4ey0J4Hkc9Hvalt1g0x5PU8cbf i6c84VFriHS++hXi+k1jon5/OtaNkwzZ9u+VgkWa3xbe/8mGzcakYicBkrKOMYBn g14QpnbmXXrZ3qiU6ZMiy5zjU1xFMG8MKhVGfj06Ql7f1Y6hXabsCxdqia+cu0/E N01w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:sender:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; t=1702047223; x=1702133623; bh=MR8/vdeKYlYQp ksNgtUNJ5uwcpcroH1Gk4ksTnYEmuM=; b=C7cE9wxdxCKFOZ/VDbMouxcCZ4So0 yGQHOkygBNksb0tSMeoeW+drop9TL6RL7gBzXGe91L/QR9Bl4Yy6IgOVWlz6wR43 nOVIU5RPH1oa7q2PickN1vgRyAoGr7wbH2QQ4sp9qP4qHCrDnfu5r97wtvdwEC5M BJEhYtDL7Ootese/DFnrmqCE3R/yq9NFwaUhVzzJgYNO/8AgJ5BjSy/mcGtRk0J6 eS8W4dRGno2JYOwPeHkQsByMbbxgTqmoHFMq2PHv5d/Pu9qamDxHxGeo54Wnp1dg 8kyBGjlnt0Y4r/s0gkL6YWsFSTqxuEjCFd8Iq5oR51W8ed/uNioJdMH5w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrudekiedgjedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 8 Dec 2023 09:53:42 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id be602c60 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Fri, 8 Dec 2023 14:52:11 +0000 (UTC) Date: Fri, 8 Dec 2023 15:53:40 +0100 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Han-Wen Nienhuys , Jonathan Nieder Subject: [PATCH v2 11/11] reftable/block: reuse buffer to compute record keys Message-ID: <02b11f3a80608ba8748a0d0e2294f432e02464e5.1702047081.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: When iterating over entries in the block iterator we compute the key of each of the entries and write it into a buffer. We do not reuse the buffer though and thus re-allocate it on every iteration, which is wasteful. Refactor the code to reuse the buffer. Signed-off-by: Patrick Steinhardt --- reftable/block.c | 19 ++++++++----------- reftable/block.h | 2 ++ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/reftable/block.c b/reftable/block.c index 8c6a8c77fc..1df3d8a0f0 100644 --- a/reftable/block.c +++ b/reftable/block.c @@ -323,30 +323,28 @@ int block_iter_next(struct block_iter *it, struct reftable_record *rec) .len = it->br->block_len - it->next_off, }; struct string_view start = in; - struct strbuf key = STRBUF_INIT; uint8_t extra = 0; int n = 0; if (it->next_off >= it->br->block_len) return 1; - n = reftable_decode_key(&key, &extra, it->last_key, in); + n = reftable_decode_key(&it->key, &extra, it->last_key, in); if (n < 0) return -1; - if (!key.len) + if (!it->key.len) return REFTABLE_FORMAT_ERROR; string_view_consume(&in, n); - n = reftable_record_decode(rec, key, extra, in, it->br->hash_size); + n = reftable_record_decode(rec, it->key, extra, in, it->br->hash_size); if (n < 0) return -1; string_view_consume(&in, n); strbuf_reset(&it->last_key); - strbuf_addbuf(&it->last_key, &key); + strbuf_addbuf(&it->last_key, &it->key); it->next_off += start.len - in.len; - strbuf_release(&key); return 0; } @@ -377,6 +375,7 @@ int block_iter_seek(struct block_iter *it, struct strbuf *want) void block_iter_close(struct block_iter *it) { strbuf_release(&it->last_key); + strbuf_release(&it->key); } int block_reader_seek(struct block_reader *br, struct block_iter *it, @@ -387,7 +386,6 @@ int block_reader_seek(struct block_reader *br, struct block_iter *it, .r = br, }; struct reftable_record rec = reftable_new_record(block_reader_type(br)); - struct strbuf key = STRBUF_INIT; int err = 0; struct block_iter next = BLOCK_ITER_INIT; @@ -414,8 +412,8 @@ int block_reader_seek(struct block_reader *br, struct block_iter *it, if (err < 0) goto done; - reftable_record_key(&rec, &key); - if (err > 0 || strbuf_cmp(&key, want) >= 0) { + reftable_record_key(&rec, &it->key); + if (err > 0 || strbuf_cmp(&it->key, want) >= 0) { err = 0; goto done; } @@ -424,8 +422,7 @@ int block_reader_seek(struct block_reader *br, struct block_iter *it, } done: - strbuf_release(&key); - strbuf_release(&next.last_key); + block_iter_close(&next); reftable_record_release(&rec); return err; diff --git a/reftable/block.h b/reftable/block.h index 51699af233..17481e6331 100644 --- a/reftable/block.h +++ b/reftable/block.h @@ -84,10 +84,12 @@ struct block_iter { /* key for last entry we read. */ struct strbuf last_key; + struct strbuf key; }; #define BLOCK_ITER_INIT { \ .last_key = STRBUF_INIT, \ + .key = STRBUF_INIT, \ } /* initializes a block reader. */