ruby-utcp 1.1.6 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -1
  3. data/README.md +30 -0
  4. data/lib/utcp/version.rb +1 -1
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30241b18fd3629b65595bd41881c8c6c0b9836547b47a139e6a3a32c56111f42
4
- data.tar.gz: e19fa7d10eb36ca41bcec9286ed75438df01f4a0d5d820a4f0ba76fad202cf17
3
+ metadata.gz: fc70dcacf454b829f25903470075b802408b7dae050cd72735bf5d3c45b0fa66
4
+ data.tar.gz: a099d2eb9563e5f2db108ceeb2c375b0fd8c1f0df256e2978aa1b7232f4478af
5
5
  SHA512:
6
- metadata.gz: 634eeb0827c3eab6f57cf8b51c116ccd52981825e95b8a50f238a734f79631f174b9eaeccef60408f43fd08919dc5053d5a04b338550961d185638d5217fa2c9
7
- data.tar.gz: 439c34aa64040a117248b21a05d59fc7088f46ad8e0b853f86aa4bce691c5bf976fb9fb5750136dad984a82359f768afe9c80f5ad46ddabc92984b23f298d6a8
6
+ metadata.gz: dd570927664c2829e75a97e9c7232f41eb721736413b45915fa94102508b38b428b76cd9836d9e6e545e60e7468b3362b8c78778a52fdc63ef65dfe339afc073
7
+ data.tar.gz: 28f92a7c89c335a30fe8889074693c0f1922945f129219b239c0fd39254d5feba764e8ecfb8f37d2393630dcef9275bbc46d58fd79ba720edcb60cee890e276d
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Changelog
2
2
 
3
- ## 1.1.6 (Unreleased)
3
+ ## 1.1.7
4
+
5
+ - Add HTTP streaming and native WebRTC soak scenarios, with post-GC RSS/heap/object/thread/descriptor growth gates, workload counts, checkpointed JSON reports, and subprocess watchdogs. Run 60-second scenarios on CI pushes and pull requests; reserve full five-minute CI runs for manual dispatch. Preserve reports as artifacts.
6
+
7
+ ## 1.1.6
4
8
 
5
9
  - Add configurable `max_response_bytes` (100 MiB by default) to every transport except file, CLI, and text. Bound discovery, protocol envelopes, streaming totals, UDP datagrams, and MCP pagination; retain TCP's stricter legacy size limit.
6
10
  - Add event/item limits and total deadlines for HTTP streams; bound buffered HTTP bodies during reads and cancel gRPC streams on early exit.
data/README.md CHANGED
@@ -408,3 +408,33 @@ CI runs the tests and gem build on Ruby 2.6, 2.7, 3.0–3.4, and 4.0. A separate
408
408
  A dedicated Ruby 3.4 CI job sets `UTCP_NATIVE_TESTS=1` to install the original, unmodified backends from the Gemfile, builds libdatachannel 0.24.5 and the WebRTC extension, and runs `bundle exec rake native`. The test subprocess has a 45-second watchdog. The native dependencies remain optional for applications using the gem.
409
409
 
410
410
  The default native suite checks discovery, real calls, response limits, streaming, concurrent requests, timeouts, and client isolation. It also checks the UTCP WebRTC adapter's destruction during an active callback, cancellation of pending calls, and reuse after late responses. Additional probes of the upstream backend itself are opt-in with `UTCP_WEBRTC_SHUTDOWN_REGRESSIONS=1`; they require callback shutdown guarantees that stock `webrtc-ruby` 1.0.0 bindings do not provide and are not part of the CI job. No patches are installed into the dependency.
411
+
412
+ ### Sustained load and memory checks
413
+
414
+ ```sh
415
+ bundle exec rake 'soak[http]'
416
+ # Requires the same built native dependencies as the native CI job:
417
+ UTCP_NATIVE_TESTS=1 bundle exec rake 'soak[webrtc]'
418
+ ```
419
+
420
+ Local commands default to five minutes per scenario with eight concurrent callers. HTTP mixes SSE and NDJSON, complete reads, early enumeration exits, and oversized responses. WebRTC creates real peer pairs, checks concurrent response correlation, times out a late reply, verifies the next request, and closes a peer with a pending call from multiple threads. Both ends and fixture queues are reclaimed between WebRTC cycles. Missing native dependencies fail the command; they are never silently skipped or automatically downloaded.
421
+
422
+ Reports are written to `tmp/soak/http.json` and `tmp/soak/webrtc.json`. They contain operation counts, configuration, Ruby/platform details, and resource samples taken at quiet batch boundaries after full GC. Measurements cover both the client and its local test server in one process: RSS, retained Ruby heap bytes, live Ruby objects, Ruby threads, and file descriptors. The first post-warmup sample is the baseline. Any later sample exceeding a growth limit fails the run, even if memory subsequently falls. These are sampled, post-GC measurements, not a continuous peak-RSS measurement or proof that no leak can occur in a longer or different workload.
423
+
424
+ | Environment variable | Local default |
425
+ | --- | --- |
426
+ | `UTCP_SOAK_DURATION` | 300 seconds, including warmup |
427
+ | `UTCP_SOAK_WARMUP` | 30 seconds |
428
+ | `UTCP_SOAK_INTERVAL` | 10 seconds |
429
+ | `UTCP_SOAK_CONCURRENCY` | 8, allowed range 1–64 |
430
+ | `UTCP_SOAK_REQUESTS_PER_SECOND` | 200; `0` disables pacing |
431
+ | `UTCP_SOAK_RSS_GROWTH_MIB` | 32 MiB |
432
+ | `UTCP_SOAK_HEAP_GROWTH_MIB` | 8 MiB |
433
+ | `UTCP_SOAK_OBJECT_GROWTH` | 20,000 objects |
434
+ | `UTCP_SOAK_THREAD_GROWTH` | 4 threads |
435
+ | `UTCP_SOAK_FD_GROWTH` | 4 descriptors |
436
+ | `UTCP_SOAK_REPORT` | `tmp/soak/<scenario>.json` |
437
+
438
+ Pacing prevents a connection-churn test from exhausting a CI host's ephemeral TCP ports. Increase duration for a longer run, for example `UTCP_SOAK_DURATION=1800 bundle exec rake 'soak[http]'`. Duration must allow warmup and at least three sample intervals. A parent-process watchdog allows an additional 60 seconds for setup and cleanup, then kills a stuck subprocess and records failure. Reports are checkpointed during the run, and failed subprocesses cannot reuse a stale passing report.
439
+
440
+ On pushes and pull requests, CI runs each soak for 60 seconds, including a 10-second warmup. Full five-minute runs with a 30-second warmup are available only through manual dispatch: **Actions → CI → Run workflow**. Both modes sample every 10 seconds. The HTTP soak runs in a separate job and the WebRTC soak follows the native regression suite, using the existing pinned backend build. Both jobs upload their JSON reports as artifacts, including reports from failed runs when available.
data/lib/utcp/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UTCP
4
- VERSION = "1.1.6"
4
+ VERSION = "1.1.7"
5
5
  end
6
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-utcp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - ruby-utcp contributors