Skip to content

Commit 197817b

Browse files
committed
Optimize read+write of headers
1 parent dade14e commit 197817b

File tree

2 files changed

+42
-13
lines changed

2 files changed

+42
-13
lines changed

adapters/repos/db/lsmkv/segmentindex/header.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,20 @@ type Header struct {
4242
}
4343

4444
func (h *Header) WriteTo(w io.Writer) (int64, error) {
45-
if err := binary.Write(w, binary.LittleEndian, &h.Level); err != nil {
46-
return -1, err
47-
}
48-
if err := binary.Write(w, binary.LittleEndian, &h.Version); err != nil {
49-
return -1, err
50-
}
51-
if err := binary.Write(w, binary.LittleEndian, &h.SecondaryIndices); err != nil {
52-
return -1, err
53-
}
54-
if err := binary.Write(w, binary.LittleEndian, h.Strategy); err != nil {
55-
return -1, err
45+
data := make([]byte, HeaderSize)
46+
rw := byteops.NewReadWriter(data)
47+
rw.WriteUint16(h.Level)
48+
rw.WriteUint16(h.Version)
49+
rw.WriteUint16(h.SecondaryIndices)
50+
rw.WriteUint16(uint16(h.Strategy))
51+
rw.WriteUint64(h.IndexStart)
52+
53+
write, err := w.Write(data)
54+
if err != nil {
55+
return 0, err
5656
}
57-
if err := binary.Write(w, binary.LittleEndian, &h.IndexStart); err != nil {
58-
return -1, err
57+
if write != HeaderSize {
58+
return 0, fmt.Errorf("expected to write %d bytes, got %d", HeaderSize, write)
5959
}
6060

6161
return int64(HeaderSize), nil

adapters/repos/db/lsmkv/segmentindex/header_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
1+
// _ _
2+
// __ _____ __ ___ ___ __ _| |_ ___
3+
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
4+
// \ V V / __/ (_| |\ V /| | (_| | || __/
5+
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
6+
//
7+
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
8+
//
9+
// CONTACT: [email protected]
10+
//
11+
112
package segmentindex
213

314
import (
415
"bytes"
16+
"os"
517
"testing"
618

719
"github.com/stretchr/testify/require"
@@ -16,3 +28,20 @@ func BenchmarkParseHeader(b *testing.B) {
1628
require.NoError(b, err)
1729
}
1830
}
31+
32+
func BenchmarkWriteHeader(b *testing.B) {
33+
header := Header{
34+
Version: 1,
35+
Level: 1,
36+
SecondaryIndices: 35,
37+
Strategy: StrategyReplace,
38+
IndexStart: 234,
39+
}
40+
path := b.TempDir()
41+
b.ResetTimer()
42+
for i := 0; i < b.N; i++ {
43+
f, err := os.Create(path + "/test.tmp")
44+
require.NoError(b, err)
45+
header.WriteTo(f)
46+
}
47+
}

0 commit comments

Comments
 (0)