41 lines
2.2 KiB
Bash
Executable File
41 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Regenerate every file under docs/output/. Needs a JDK and nothing else: protoc and the gRPC
|
|
# codegen plugin resolve as Maven artifacts, and all three servers start inside the test JVM.
|
|
#
|
|
# The benchmark numbers are NOT deterministic. They are re-measured on every run and the ratios
|
|
# between the three protocols are what the documentation quotes.
|
|
set -eu
|
|
cd "$(dirname "$0")/.."
|
|
LOG=/tmp/protocol-comparison-test.log
|
|
|
|
# Everything, for the test count and the non-timing transcripts.
|
|
MAVEN_OPTS=${MAVEN_OPTS:--Xmx900m} mvn -B test > "$LOG" 2>&1
|
|
|
|
# The two timing benchmarks are then re-run ALONE. This is not tidiness: the back-pressure and
|
|
# isReady tests leave unbounded producers spinning, and on a two-core box that halves every
|
|
# throughput number measured after them. Benchmarks share a JVM with nothing.
|
|
BENCH=/tmp/protocol-comparison-bench.log
|
|
MAVEN_OPTS=${MAVEN_OPTS:--Xmx900m} mvn -B test \
|
|
-Dtest=RequestResponseBenchmarkTest,StreamThroughputBenchmarkTest > "$BENCH" 2>&1
|
|
|
|
# Interleaved log lines from other contexts have to come out, or the transcripts are unreadable.
|
|
clean() { grep -vE '^2026-|^\s*$|^WARNING|^[[:space:]]+at |^Caused by|^java\.|^org\.|Initializing|Completed initialization'; }
|
|
|
|
sed -n '/=== one Quote, five fields/,/^JSON is /p' "$LOG" | clean > docs/output/payload-sizes.txt
|
|
sed -n '/=== request\/response/,/^WebSocket /p' "$BENCH" | clean > docs/output/request-response.txt
|
|
sed -n '/=== server streaming, 50000/,/^WebSocket /p' "$BENCH" | clean > docs/output/stream-throughput.txt
|
|
{ grep -m1 '=== unbounded stream' "$LOG"; grep -m1 '^protocol ' "$LOG"
|
|
grep -m1 '^RSocket *[0-9]' "$LOG"; grep -m1 '^gRPC *[0-9]' "$LOG"
|
|
grep -m1 '^WebSocket *[0-9]' "$LOG"
|
|
sed -n '/^RSocket is flat/,/JIT-compiled/p' "$LOG"; } > docs/output/backpressure.txt
|
|
{ grep -m1 '=== gRPC server streaming' "$LOG"; grep -m1 '^handler ' "$LOG"
|
|
grep -m1 '^plain onNext loop' "$LOG"; grep -m1 '^isReady() checked' "$LOG"; } \
|
|
> docs/output/grpc-isready.txt
|
|
|
|
sed -n '/=== Boot-configured RSocketStrategies/,/^bare RSocketStrategies/p' "$LOG" | clean \
|
|
> docs/output/rsocket-codecs.txt
|
|
|
|
grep -E 'Tests run:.*in com\.ankurm' "$LOG" | sed 's/^\[INFO\] //' > docs/output/tests.txt
|
|
|
|
echo "regenerated:"; ls -1 docs/output/
|