Why: CI failures need enough test harness output for quick diagnosis.
Impact: CI make check jobs now print verbose Automake test details.
Before/After: Failed test logs were easier to miss; CI now requests verbose test output.
Technical Overview: Add VERBOSE=1 to direct make check invocations in the CI workflows. Apply the same setting in devtools/run-ci.sh so shared container-based CI paths inherit verbose Automake test logging. This keeps the change limited to diagnostic output and does not alter the selected tests.
With the help of AI-Agents: Codex
Why:
Safe disk queue recovery reconstructs queue files from scratch.
Keeping stale on-disk byte accounting can make the new queue appear
full and block later enqueues when maxDiskSpace is configured.
Impact:
Recovered disk queues no longer retain stale disk usage limits.
Before/After:
Before: recovered queue could stay blocked by old sizeOnDisk value.
After: recovery clears sizeOnDisk with other queue size counters.
Technical Overview:
- extend qqueueResetRecoveredQueueSize() to reset disk byte accounting
for disk and disk-assisted queues
- keep existing queue-size and dequeue-log resets unchanged
- apply the change only in the shared recovery reset helper to keep
behavior centralized
With the help of AI-Agents: GPT-5.3-Codex
Explicit continue statements become S_NOP nodes while the optimizer walks the statement tree. That state is expected: removeNOPs() drops those nodes after optimization, so logging an optimizer error during traversal was misleading and could make strict config validation appear dirty.
Treat S_NOP as a normal intermediate and cover the regression with an AbortOnUncleanConfig -N1 test for the continue-in-if pattern from #2524 and #2568.
Fixes#2524.
Fixes#2568.
Why:
A short HTTP outage can leave omhttp retry.ruleset work stuck.
The worker may wait at the full-delay mark on its own retry queue.
Impact:
Retry rulesets keep bounded backpressure and gain recovery coverage.
Before/After:
Before, retry messages used FULL_DELAY. After, they use LIGHT_DELAY.
The worker can keep draining retry work after the outage.
Technical Overview:
- Change retry.ruleset message flow control to LIGHT_DELAY.
- Keep existing fire-and-forget retry enqueue ownership unchanged.
- Add an omhttp helper mode for time-bounded HTTP failures.
- Add an omhttp retry.ruleset recovery regression test.
- Register the test in the existing OMHTTP test family.
Refs: https://github.com/rsyslog/rsyslog/issues/5693
With the help of AI-Agents: OpenAI Codex
Why:
Operators need parsed RFC5424 structured data below a predictable
JSON object name, and old large structured-data messages could exceed
module-local assumptions.
Impact:
Adds two action parameters, expands structured-data length storage,
and enables mmpstrucdata in the Ubuntu 26.04 TSAN lane.
Before/After:
Before, mmpstrucdata always wrote `rfc5424-sd` and could fail on very
large SD. After, the container is configurable and SD size is bounded.
Technical Overview:
- Add `container` with default `rfc5424-sd`.
- Add `maxStructuredDataSize`, defaulting to global max message size.
- Store message structured-data length as `rs_size_t` instead of 16 bit.
- Allocate parameter-value parse buffers from the actual SD length.
- Preserve RFC3164/no-SD skip behavior and represent RFC5424 NILVALUE
as JSON null under the configured container.
- Document RainerScript and YAML usage and add parameter reference pages.
- Add focused regression tests for custom containers, NILVALUE, large SD,
oversized SD, and RFC3164 skip behavior.
- Remove the old mmpstrucdata TSAN suppression and codify container
clean/rebuild guidance for local validation.
Special credits:
Bogoslovskii Fedor provided good analysis that facilitated parts of the
implementation.
Closes https://github.com/rsyslog/rsyslog/issues/3297
Closes https://github.com/rsyslog/rsyslog/issues/1891
With the help of AI-Agents: Codex
Co-authored-by: Bogoslovskii Fedor <Fedorasta@gmail.com>
Why:
wolfSSL send retries must yield when a nonblocking read cannot
make progress. Swallowing that retry can keep a worker in the
SSL_write loop without waiting for socket readiness.
Impact:
wolfSSL TLS sends now return RS_RET_RETRY instead of spinning.
Before/After:
Before, send-side WANT_READ could busy-loop on read retry; after,
the retry is propagated to the existing event-loop path.
Technical Overview:
The wolfSSL-specific SSL_ERROR_WANT_READ path still drives a local
osslRecordRecv() so wolfSSL can process read-side TLS traffic while
sending. When that read reports RS_RET_RETRY, Send() now aborts with
RS_RET_RETRY instead of clearing retry state and immediately calling
SSL_write() again. Successful local reads continue to clear retry
state before retrying SSL_write(), matching the generic helper's
state handling without changing successful progress behavior.
With the help of AI-Agents: GPT-5.3-Codex
Why:
The old AI local-review workflow was experimental, duplicated newer
validation guidance, and still carried stale review behavior on main.
Impact:
Local validation keeps useful checks in the maintained planner and
removes the obsolete experiment while retaining shared prompt assets.
Before/After:
Before, local review policy lived partly in an unused AI script and a
deleted workflow entry point. After, the planner and skills own the
reusable checks and prompt guidance.
Technical Overview:
Remove ai/local-review-workflow.sh and .agent/workflows/audit.md.
Teach devtools/local-validation-plan.sh to derive its default base from
RSYSLOG_LOCAL_VALIDATION_BASE, rsyslog.localValidationBase, or the
worktree HEAD reflog baseline.
Use the same base for local Cubic review so committed branch changes are
reviewed against the worktree creation point.
Add advisory raw allocation and test antipattern scans, and run fast mock
distcheck for distribution-risk test/build changes.
Fold the old audit prompt guidance into the local container testing skill
as late manual prompt audits without launching another AI CLI.
Document ai/ as the central shared prompt-asset library and remove stale
references to deleted workflow paths.
With the help of AI-Agents: OpenAI Codex
Why: Daily focused runs are intended to exercise the current tree and current runner environment without stale cross-run configure state.
Impact: The daily Kafka lane no longer reuses config.cache, setup failures do not trigger secondary coverage failures, and the tracking issue identifies failed lanes.
Before/After: Before, a restored Kafka config.cache could reject new coverage flags and obscure the root cause with coverage cleanup failures. After, Kafka configures fresh and failure reports name the failed lane and artifact.
Technical Overview: Removed the actions/cache step for the daily Kafka configure cache.
Technical Overview: Removed --cache-file=config.cache from the Kafka configure command.
Technical Overview: Added an id to the prepare step and run coverage/Codecov only after configure succeeds.
Technical Overview: Extended the report job to read workflow jobs and include failed daily lanes plus expected ci-failure artifact names in the tracking issue.
Technical Overview: Added actions:read permission for the report job so it can inspect run jobs.
Issue: https://github.com/rsyslog/rsyslog/issues/7156
With the help of AI-Agents: Codex
Why: HUP can permanently hang omkafka while messages are being
produced. Deployments that reload via logrotate or manual SIGHUP
need the action to recover without a forced kill.
Before/After: before, doHUP could enter Kafka handle teardown outside
the doAction serialization domain. After, HUP first enters
mut_doAction and only then touches file mutexes or the Kafka handle.
Technical overview:
- doAction and pollCallbackThread hold mut_doAction while polling
librdkafka.
- Callbacks from that poll path may write stats or error files.
- doHUP now takes mut_doAction before mutErrFile and mutStatsFile.
- Kafka handle recreate/poll continues inside that same outer critical
section.
- This keeps runtime ordering consistent:
mut_doAction -> narrower file mutexes / rkLock.
- tryResume already follows the same outer mut_doAction rule.
Impact: HUP handling waits for any in-progress Kafka action before
closing files or recreating/polling the handle.
Fixes: https://github.com/rsyslog/rsyslog/issues/4230
With the help of AI-Agents: Claude Sonnet 4.6 2026-05, Codex
Why:
Keep the scheduled 8.2606 release notes current after recent
user-visible and maintainer-visible changes accumulated.
Impact:
Release-note readers see the important recent changes.
Before/After:
Before, the block stopped at older entries. After, it covers
recent selected fixes and features without listing generic churn.
Technical Overview:
- Add selective entries for new modules and user-visible fixes.
- Keep broad hardening and testbench work under the existing umbrella.
- Preserve the established 8.2606 ChangeLog style and issue links.
- Leave build, CI, and low-signal documentation churn out of the block.
With the help of AI-Agents: Codex
Why:
Keep the scheduled 8.2606 release notes current after recent
user-visible and maintainer-visible changes accumulated.
Impact:
Release-note readers see the important recent changes.
Before/After:
Before, the block stopped at older entries. After, it covers
recent selected fixes and features without listing generic churn.
Technical Overview:
- Add selective entries for new modules and user-visible fixes.
- Keep broad hardening and testbench work under the existing umbrella.
- Preserve the established 8.2606 ChangeLog style and issue links.
- Leave build, CI, and low-signal documentation churn out of the block.
With the help of AI-Agents: Codex