From 152a151b4d269ca3967594604892a0c18ff77591 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Sun, 24 Dec 2023 11:12:31 -0600 Subject: [PATCH 1/2] Avoid making an extra heap copy in DecodeBytes --- fastnode/fast_node.go | 1 + internal/encoding/encoding.go | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fastnode/fast_node.go b/fastnode/fast_node.go index 149ac9b26..5d00bd997 100644 --- a/fastnode/fast_node.go +++ b/fastnode/fast_node.go @@ -30,6 +30,7 @@ func NewNode(key []byte, value []byte, version int64) *Node { } // DeserializeNode constructs an *FastNode from an encoded byte slice. +// It assumes we do not mutate this input []byte. func DeserializeNode(key []byte, buf []byte) (*Node, error) { ver, n, err := encoding.DecodeVarint(buf) if err != nil { diff --git a/internal/encoding/encoding.go b/internal/encoding/encoding.go index 17a994bc1..d8b7dea59 100644 --- a/internal/encoding/encoding.go +++ b/internal/encoding/encoding.go @@ -30,6 +30,7 @@ var uvarintPool = &sync.Pool{ // decodeBytes decodes a varint length-prefixed byte slice, returning it along with the number // of input bytes read. +// Assumes bz will not be mutated. func DecodeBytes(bz []byte) ([]byte, int, error) { s, n, err := DecodeUvarint(bz) if err != nil { @@ -51,9 +52,9 @@ func DecodeBytes(bz []byte) ([]byte, int, error) { if len(bz) < end { return nil, n, fmt.Errorf("insufficient bytes decoding []byte of length %v", size) } - bz2 := make([]byte, size) - copy(bz2, bz[n:end]) - return bz2, end, nil + // bz2 := make([]byte, size) + // copy(bz2, bz[n:end]) + return bz[n:end], end, nil } // decodeUvarint decodes a varint-encoded unsigned integer from a byte slice, returning it and the From 58b3dff2c6fce9a012ff575e3636f9adec21a708 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Sun, 24 Dec 2023 11:27:06 -0600 Subject: [PATCH 2/2] Remove commented out lines --- internal/encoding/encoding.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/encoding/encoding.go b/internal/encoding/encoding.go index d8b7dea59..40d558da3 100644 --- a/internal/encoding/encoding.go +++ b/internal/encoding/encoding.go @@ -52,8 +52,6 @@ func DecodeBytes(bz []byte) ([]byte, int, error) { if len(bz) < end { return nil, n, fmt.Errorf("insufficient bytes decoding []byte of length %v", size) } - // bz2 := make([]byte, size) - // copy(bz2, bz[n:end]) return bz[n:end], end, nil }