Skip to content

Commit 830d672

Browse files
Generate stefz files for testing (#144)
Instead of storing stefz in git we generate them before tests. The files are fairly large and we store large delta everytime the format changes. Files are now deleted from git. otlp2stef tool is used to generate stefz files from OTLP .pb files that don't change. We also use a script to check compatibility of a format. The script checks out old version of otlp2stef, generates files from that, check outs current version of code and runs new test code on old files.
1 parent b71f287 commit 830d672

File tree

12 files changed

+103
-15
lines changed

12 files changed

+103
-15
lines changed

.github/workflows/build-and-test.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ jobs:
2929

3030
- name: Checkout code
3131
uses: actions/checkout@v4
32+
with:
33+
# this is needed for "make testcompat" in benchmarks to checkout a past commit
34+
fetch-depth: 0
3235

3336
- name: Go cache
3437
uses: actions/cache@v4
@@ -71,6 +74,11 @@ jobs:
7174
steps:
7275
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
7376

77+
- name: Generate test files
78+
run: |
79+
cd benchmarks
80+
make gentestfiles
81+
7482
- name: Set up JDK for running Gradle
7583
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
7684
with:
@@ -118,6 +126,11 @@ jobs:
118126
with:
119127
cache-read-only: ${{ github.event_name == 'pull_request' }}
120128

129+
- name: Generate test files
130+
run: |
131+
cd benchmarks
132+
make gentestfiles
133+
121134
- name: Generate Java code from test schemas
122135
run: |
123136
cd stefgen/generator

benchmarks/makefile

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,33 @@ build:
2121
go build -o bin/stefbench cmd/stefbench/main.go
2222
go build -o bin/otlp2stef cmd/otlp2stef/main.go
2323

24+
.PHONY: testcompat
25+
testcompat: # Test compatibility of current implementation with old format files
26+
# Generate old test files
27+
cd scripts && ./genoldtestfiles.sh
28+
# Run compatibility tests
29+
go test -v -run TestCopy
30+
# Restore/generate current test files
31+
cd scripts && ./gentestfiles.sh
32+
33+
.PHONY: gentestfiles
34+
gentestfiles:
35+
cd scripts && ./gentestfiles.sh
36+
2437
.PHONY: test
25-
test:
38+
test: gentestfiles
2639
go test -v ./...
2740

28-
benchmark:
41+
benchmark: gentestfiles
2942
go test ./... -run notest -bench . -benchtime 100ms
3043

44+
.PHONY: build-ci
45+
build-ci:
46+
make testcompat
47+
make all
48+
3149
.PHONY: benchmark-ci
32-
benchmark-ci: bench-run bench-stat-diff bench-stat
50+
benchmark-ci: gentestfiles bench-run bench-stat-diff bench-stat
3351

3452
.PHONY: bench-stat-cli
3553
bench-stat-cli:
@@ -50,8 +68,3 @@ bench-stat: bench-stat-cli
5068
.PHONY: update-charts
5169
update-charts:
5270
UPDATE_BENCH_HTML=1 go test -run TestMetricsSize\|TestMetricsMultipart -bench \(alizeNative\|Pdata\)
53-
54-
regen-testdata: build
55-
bin/otlp2stef --compression zstd --input testdata/astronomy-otelmetrics.zst
56-
bin/otlp2stef --compression zstd --input testdata/hipstershop-otelmetrics.zst
57-
bin/otlp2stef --compression zstd --input testdata/hostandcollector-otelmetrics.zst

benchmarks/readwrite_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestCopy(t *testing.T) {
2828

2929
for _, file := range files {
3030

31-
tefBytes, err := os.ReadFile("testdata/" + file)
31+
tefBytes, err := os.ReadFile("testdata/generated/" + file)
3232
require.NoError(t, err)
3333

3434
tefReader, err := oteltef.NewMetricsReader(bytes.NewBuffer(tefBytes))
@@ -77,7 +77,7 @@ func TestCopy(t *testing.T) {
7777
}
7878

7979
func BenchmarkReadSTEF(b *testing.B) {
80-
tefBytes, err := os.ReadFile("testdata/hipstershop-otelmetrics.stefz")
80+
tefBytes, err := os.ReadFile("testdata/generated/hipstershop-otelmetrics.stefz")
8181
require.NoError(b, err)
8282

8383
tefSrc, err := oteltef.NewMetricsReader(bytes.NewBuffer(tefBytes))
@@ -131,7 +131,7 @@ func BenchmarkReadSTEF(b *testing.B) {
131131
}
132132

133133
func BenchmarkReadSTEFZ(b *testing.B) {
134-
tefBytes, err := os.ReadFile("testdata/hipstershop-otelmetrics.stefz")
134+
tefBytes, err := os.ReadFile("testdata/generated/hipstershop-otelmetrics.stefz")
135135
require.NoError(b, err)
136136

137137
recCount := 0
@@ -158,7 +158,7 @@ func BenchmarkReadSTEFZ(b *testing.B) {
158158
}
159159

160160
func BenchmarkReadSTEFZWriteSTEF(b *testing.B) {
161-
tefBytes, err := os.ReadFile("testdata/hipstershop-otelmetrics.stefz")
161+
tefBytes, err := os.ReadFile("testdata/generated/hipstershop-otelmetrics.stefz")
162162
require.NoError(b, err)
163163

164164
recCount := 0
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/bin/bash
2+
3+
# This script generates .stefz files from .zst files using the otlp2stef tool
4+
# built from a specific base branch. It checks out the base branch, builds the tool,
5+
# converts the files, and then checks out the original branch again.
6+
7+
set -euo pipefail
8+
9+
# Remember the current branch or commit hash if in detached HEAD state.
10+
CUR_BRANCH=$(git symbolic-ref -q --short HEAD || git rev-parse HEAD)
11+
echo "Remembering current branch/commit hash as $CUR_BRANCH"
12+
13+
TMPDIR=$(mktemp -d)
14+
cp ./gentestfiles.sh "$TMPDIR/"
15+
16+
# Checkout the base branch to compare to
17+
BASE_BRANCH=21f498a293dbdf6e29c75385ba0043dc0f5e4009
18+
git -c advice.detachedHead=false checkout $BASE_BRANCH
19+
20+
# Convert/generate the files.
21+
$TMPDIR/gentestfiles.sh
22+
23+
# Checkout the previously remembered branch
24+
git checkout "$CUR_BRANCH"
25+

benchmarks/scripts/gentestfiles.sh

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/bin/bash
2+
3+
# This script generates .stefz files from .zst files using the otlp2stef tool
4+
# Generated files are placed in testdata/generated/.
5+
6+
set -euo pipefail
7+
8+
# Build otlp2stef tool (see makefile for how to do it)
9+
echo
10+
echo "Building otlp2stef tool"
11+
go build -o ../bin/otlp2stef ../cmd/otlp2stef/main.go
12+
13+
# Copy .zst files to a temp directory
14+
echo
15+
echo "Converting .zst files to .stefz format using otlp2stef tool"
16+
TMPDIR=$(mktemp -d)
17+
cp ../testdata/astronomy-otelmetrics.zst "$TMPDIR/"
18+
cp ../testdata/hipstershop-otelmetrics.zst "$TMPDIR/"
19+
cp ../testdata/hostandcollector-otelmetrics.zst "$TMPDIR/"
20+
21+
# Use otlp2stef tool to convert these files to stefz format
22+
for f in astronomy-otelmetrics hipstershop-otelmetrics hostandcollector-otelmetrics; do
23+
../bin/otlp2stef \
24+
-compression=zstd \
25+
--input="$TMPDIR/$f.zst"
26+
done
27+
28+
# Copy stefz files from temp directory into testdata directory, overwriting if they exist
29+
echo
30+
echo "Copying converted .stefz files to ../testdata/generated/ directory"
31+
mkdir -p "../testdata/generated/"
32+
cp "$TMPDIR/astronomy-otelmetrics.stefz" ../testdata/generated/
33+
cp "$TMPDIR/hipstershop-otelmetrics.stefz" ../testdata/generated/
34+
cp "$TMPDIR/hostandcollector-otelmetrics.stefz" ../testdata/generated/
35+
36+
echo "Test files generated."

benchmarks/testdata/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
generated
-1.57 MB
Binary file not shown.
-91.1 KB
Binary file not shown.
-81 KB
Binary file not shown.

java/src/main/java/net/stef/benchmarks/STEF.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
@Threads(1)
2525
@State(Scope.Thread)
2626
public class STEF {
27-
public static final String stefRefFile = "../benchmarks/testdata/hipstershop-otelmetrics.stefz";
27+
public static final String stefRefFile = "../benchmarks/testdata/generated/hipstershop-otelmetrics.stefz";
2828
public static long stefRecordCount = 66816; // Number of records in stefRefFile
2929

3030
public ByteBuffer stefData;

0 commit comments

Comments
 (0)