mirror of
https://github.com/rsyslog/rsyslog.git
synced 2026-06-04 22:13:12 +02:00
Why: To provide agents with clear, foolproof guidance on how to register tests in the refactored Makefile.am and ensure distribution integrity. Impact: Improves CI reliability and agent consistency when adding tests. Before/After: Undocumented test registration / Standardized "Define at Top, Distribute Unconditionally, Register Conditionally" pattern. Technical Overview: The rsyslog_test skill now enforces declaring test variables at the top of Makefile.am and adding them to EXTRA_DIST unconditionally, while keeping execution (TESTS +=) conditional. This prevents missing-file errors in VPATH builds. Additionally, the "Mock Smoke Check" pattern (make distcheck TEST_RUN_TYPE=MOCK-OK) is integrated as a mandatory pre-commit validation step for test changes. The rsyslog_module and rsyslog_commit skills are updated with cross-references to these standards. With the help of AI-Agents: Antigravity
2.1 KiB
2.1 KiB
name, description
| name | description |
|---|---|
| rsyslog_module | Encodes technical requirements for rsyslog modules, including concurrency, metadata, and initialization. |
rsyslog_module
This skill captures the essential technical patterns for authoring and maintaining rsyslog modules (plugins/contrib).
Quick Start
- Locking: Follow the "Belt and Suspenders" rule (
assert()+if). - State:
pData(shared) vsWID(per-worker). - Boilerplate: Use
BEGINmodInit,CODESTARTmodInit, etc.- Resource: See Common Snippets for boilerplate code.
Detailed Instructions
1. Concurrency & Locking
Rsyslog v8 has a high-concurrency worker model.
- Shared State (
pData): Mutable state shared across workers MUST be protected by a mutex inpData. - Per-Worker State (
WID): Never sharewrkrInstanceData_t. - Belt and Suspenders:
assert(pData != NULL); if (pData == NULL) { // Handle error gracefully } - Headers: Every output module should have a "Concurrency & Locking" header block.
2. Module Lifecycle
Every module must implement and register standard entry points:
modInit(): Initialize static data and registry interfaces.modExit(): Finalize and cleanup.beginTransaction()/commitTransaction(): For efficient batch-based output.
3. Metadata Consistency
- Location:
MODULE_METADATA.yamlin the module directory. - Synchronization: Keep
doc/ai/module_map.yamlin sync with locking and concurrency changes.
4. Build Configuration
- Update
plugins/Makefile.amandconfigure.acwhen adding new modules. - Test Registration: Follow the "Define at Top, Distribute Unconditionally, Register Conditionally" pattern in
tests/Makefile.am. See thersyslog_testskill for details. This is critical formake distcheckvalidity. - Use
MODULE_TYPE(eMOD_OUT)and other macros fromruntime/module-template.h.
Related Skills
rsyslog_build: For compiling the module.rsyslog_test: For creating module-specific smoke tests.rsyslog_doc: For documentation requirements.