The GitHub Actions job "Validate and test" on 
pekko-grpc.git/optimize/adaptive-compression has failed.
Run started by GitHub user He-Pin (triggered by He-Pin).

Head commit for run:
6c18e672b1b2709174b8a7d0a9895398d8a54d97 / 虎鸣 <[email protected]>
feat: add adaptive gzip compression for gRPC responses

Motivation:
The previous PR always used Identity (no compression) for native gRPC
responses to avoid CPU overhead on small messages. However, large
messages benefit significantly from gzip compression. An adaptive
approach that compresses only messages above a configurable threshold
provides the best of both worlds.

Modification:
- Add AdaptiveGzip codec that only compresses messages above a
  configurable threshold (default 1024 bytes). Messages below the
  threshold pass through uncompressed while the grpc-encoding header
  still advertises gzip.
- Add Codec.compressWithFlag() returning (ByteString, Boolean) to
  signal per-frame compression status accurately in the gRPC frame
  header (bit 0 of the 5-byte header). This fixes a correctness bug
  where streaming frames would incorrectly set the compression flag
  even for uncompressed data.
- Add pekko.grpc.server.compression-threshold config (default 1024).
  Generated Scala handlers read config once at handler creation and
  pass the threshold as Int to avoid per-request config overhead.
- Pre-compute NativeIdentityAdaptiveGzip negotiation result and cache
  the default AdaptiveGzip instance for zero per-request allocation
  on the common path.
- Add ProtobufFrameSerializer.serializedDataSize() for efficient
  size checking without double serialization.
- Add adaptive fast path in GrpcResponseHelpers for small messages
  using serializeDataFrame single-allocation path.

Result:
- Messages below threshold: zero compression CPU overhead, sent
  uncompressed with correct frame header flag.
- Messages above threshold: gzip compressed with correct frame header
  flag. Per gRPC spec, per-frame compression flag tells clients
  whether each frame is compressed.
- Default threshold of 1024 bytes aligns with industry consensus
  (Netty, Ktor, OneUptime gRPC guide) as the break-even point where
  gzip CPU cost is justified by bandwidth savings on protobuf data.
- JIT/GC optimized: zero per-request allocation on common path via
  pre-computed negotiation result and cached AdaptiveGzip singleton.

Tests:
- runtime / Test / test - 152 tests passed
- plugin-tester-scala / Test / testOnly ErrorReportingSpec - passed
- 30 new AdaptiveGzip tests covering codec behavior, boundary
  conditions, compressWithFlag, streaming frame header correctness,
  round-trip encode/decode, instance caching, and negotiate integration

References:
Refs #739

Report URL: https://github.com/apache/pekko-grpc/actions/runs/28039350614

With regards,
GitHub Actions via GitBox


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to