Skip to content

S24.17: Collapse per-platform pool-size tunables to role-based tunables #501

Description

@DavidCozens

Parent epic: #254

Problem

Core/Interface/SolidSyslogTunablesDefaults.h carries 35 *_POOL_SIZE tunables. For platform/vendor-selected classes the same role is named once per implementation — SOLIDSYSLOG_POSIX_TCP_STREAM_POOL_SIZE, _WINSOCK_TCP_STREAM_, _PLUS_TCP_TCP_STREAM_, _LWIP_RAW_TCP_STREAM_ are four names for "how many TCP streams". Only one implementation is ever live in a given build (platform backends are mutually exclusive at link time), so:

  • the integrator must know which platform they are on to find the knob that matters, and reasons about a role they cannot name;
  • the table grows O(roles) with every new OS / network stack / crypto vendor instead of O(1).

SOLIDSYSLOG_ADDRESS_POOL_SIZE already proves the role-based model — one tunable shared across the Posix / Winsock / PlusTcp Address implementations. This story extends that established pattern consistently to the remaining platform- and vendor-selected classes.

Change

Collapse 8 role groups to single role-named tunables. Clean break — no deprecated aliases (pre-1.0).

New role tunable Replaces Default
SOLIDSYSLOG_TCP_STREAM_POOL_SIZE POSIX / WINSOCK / PLUS_TCP / LWIP_RAW TCP stream 2
SOLIDSYSLOG_DATAGRAM_POOL_SIZE POSIX / WINSOCK / PLUS_TCP / LWIP_RAW datagram 1
SOLIDSYSLOG_RESOLVER_POOL_SIZE GETADDRINFO / WINSOCK / PLUS_TCP / LWIP_RAW / LWIP_RAW_DNS 1
SOLIDSYSLOG_MUTEX_POOL_SIZE POSIX / WINDOWS / FREE_RTOS mutex 1
SOLIDSYSLOG_FILE_POOL_SIZE POSIX / WINDOWS / FATFS file 1
SOLIDSYSLOG_ATOMIC_COUNTER_POOL_SIZE STD / WINDOWS atomic counter 1
SOLIDSYSLOG_TLS_STREAM_POOL_SIZE OpenSSL / mbedTLS TLS stream (name already exists for OpenSSL; mbedTLS folds in) 1
SOLIDSYSLOG_HMAC_SHA256_POLICY_POOL_SIZE OpenSSL / mbedTLS HMAC policy 1

Net: 35 -> 18 pool tunables.

Within every role group the current defaults are already uniform (all TCP streams = 2; all datagrams / resolvers / mutexes / files / counters / TLS / HMAC = 1), so there is no default-value reconciliation — each role macro simply takes the group common value. Preserve all floor static_asserts.

Convention (the new rule)

Documented at the head of the tunables file and codified in docs/NAMING.md:

Pool-size tunables are named by role, not platform. The pool counts what the integrator creates, regardless of which platform/vendor implementation provides it.

Two same-platform coexistence cases now share a role pool (instead of two pools of 1):

  • lwIP numeric + DNS resolver — both compile on an lwIP target and may coexist (DNS is a superset). Wire both -> set SOLIDSYSLOG_RESOLVER_POOL_SIZE to 2.
  • Two crypto vendors in one binary (OpenSSL + mbedTLS TLS stream, or both HMAC policies) — one vendor per build is the norm, but if both are wired, set the role pool accordingly.

This matches how Sender / Buffer pools already behave.

Files affected

One mechanical macro reference per file, no logic change:

  • Core/Interface/SolidSyslogTunablesDefaults.h — consolidate 25 macro blocks into 8 role blocks (keep floor static_asserts).
  • ~25 Platform/**/*Static.c — point each pool array at its role macro.
  • ~25 Tests/** — reference the role macro (pool/exhaustion tests).
  • Bdd/Targets/FreeRtos/solidsyslog_user_tunables.h, Bdd/Targets/FreeRtosLwip/solidsyslog_user_tunables.hFREE_RTOS_MUTEX_POOL_SIZE -> MUTEX_POOL_SIZE.
  • Tests/Fixtures/SmallMessageSizeTunables.h — two atomic-counter override lines collapse to one SOLIDSYSLOG_ATOMIC_COUNTER_POOL_SIZE.
  • CLAUDE.md, docs/NAMING.md, docs/integrating-lwip.md, docs/misra-deviations.md — name updates + convention.

No cross-macro value conflicts exist in the tree (verified): the only multi-override sites already set the same value for siblings that merge.

Test evidence

  • debug + clang-debug green.
  • FreeRTOS-host, lwIP, and mbedTLS local images green (touches all platform trees).
  • No coverage delta — rename / consolidation only, no new branches.

Acceptance criteria

  • 35 pool tunables reduced to 18; the 17 removed names appear nowhere in the tree.
  • All 8 role tunables retain a floor static_assert.
  • Role-not-platform convention documented in the tunables header and docs/NAMING.md.
  • All platform CI lanes green.

Metadata

Metadata

Assignees

No one assigned

    Labels

    storyStory issue

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions