refactor(drivers): delete GetMemoryFootprint / FlushOptionalCachesAsync (#525)
Both `IDriver` members had no production call site. Their only consumer was `MemoryTracking`, deleted with the driver-tier recycle machinery in #522, and `GetMemoryFootprint`'s doc-comment claimed "polled every 30s by Core" — which had not been true since v3, even before #522 removed the poller. Owner decision on #525 was (a) delete rather than (b) build the process-wide watchdog that would consume them. The driver-side implementations are in git history and were mostly reusable; what was always missing is the trigger, and a member nobody calls is how the misleading doc-comment survived this long. Removed from `IDriver`, all 12 driver implementations, and every test stub — plus the support code that existed only to feed them, which is the part a member-only deletion would have left behind as dead weight: - MTConnect's three per-entry byte-weight constants, its cached `ProbeModelDataItemCount`, and `CountDataItems` — a full device-tree walk run on every cache fill to populate a number with no remaining reader. - OpcUaClient's `_discoveredNodeCount` field and the discovery-pass write to it. - MQTT's `ApproxBytesPerAuthoredTag`. Two behavioural notes, neither a change in what the software does: - `AbCipTemplateCache` now has no production reset path. Its only caller was AB CIP's flush, which itself had no caller — so nothing changes except how visible the fact is. Recorded on the type, along with the correction that its comment's claim about a device `ReinitializeAsync` also flushing it was never true. A UDT redefined on a live controller keeps its stale shape until the driver instance is rebuilt. - MTConnect's `/probe` cache is still dropped, by `InvalidateProbeModel()` on an Agent restart. That is now `internal` rather than `private` so the tests which used the flush purely to empty the cache drive the real path instead — they now cover a case that actually occurs in production. Several unrelated doc comments cited `FlushOptionalCachesAsync` as the canonical CAS example and are repointed to it. Tests: the ones that existed only to assert on the removed members are deleted (3 OpcUaClient, 3 Galaxy, 2 MQTT, 1 MTConnect, 1 AbCip). Worth noting one was vacuous — `FlushOptionalCachesAsync_resets_footprint_counter` asserted a footprint of 0 before the flush and 0 after with no discovery in between, so it would have passed against a flush that did nothing at all. Full suite green except 7 failures verified identical on master before and after (4 AbLegacy integration with the compose profile down, 3 Host.IntegrationTests), checked by name rather than assumed. Docs corrected where they described this as live: `DriverLifecycle.md` (which carried the #525 placeholder), `drivers/AbCip.md`, `drivers/AbLegacy.md`, and `v2/driver-stability.md` — whose "polls this every 30 s" + per-driver `DriverConfig` memory budget were never built as written and are now banner-ed as design intent rather than description. Claude-Session: https://claude.ai/code/session_015p7wGqy3YpZNCpDzTpGMKo
This commit is contained in:
+23
-7
@@ -136,15 +136,31 @@ the real per-capability timeout / retry / breaker policies, resolved via
|
||||
Every driver runs Tier A because no factory passes a tier, so today that means
|
||||
one uniform policy set.
|
||||
|
||||
⚠️ Two `IDriver` members are now **consumerless**: `GetMemoryFootprint()` and
|
||||
`FlushOptionalCachesAsync()` existed to feed `MemoryTracking`. All 12 drivers
|
||||
still implement them and nothing calls them. They were left in place rather
|
||||
than swept, since removing them touches every driver and every test stub —
|
||||
tracked as Gitea **#525**.
|
||||
`IDriver` **no longer carries `GetMemoryFootprint()` or
|
||||
`FlushOptionalCachesAsync()`** (Gitea **#525**). They existed to feed
|
||||
`MemoryTracking`, deleted with the rest of the driver-tier recycle machinery in
|
||||
**#522**; after that nothing called them, and their doc-comments still claimed
|
||||
Core polled the footprint every 30 s, which had not been true since v3. The
|
||||
sweep removed them from the interface, all 12 drivers, and every test stub,
|
||||
along with the support code that existed only to feed them — MTConnect's
|
||||
per-entry byte weights and its cached data-item count, OpcUaClient's
|
||||
`_discoveredNodeCount`, and MQTT's per-tag byte estimate.
|
||||
|
||||
Two consequences worth knowing:
|
||||
|
||||
- `AbCipTemplateCache` now has **no production reset path**. Its only caller was
|
||||
AB CIP's flush — which itself had no caller, so nothing has actually changed
|
||||
in behaviour, only in how visible the fact is. A UDT redefined on a live
|
||||
controller keeps its stale shape until the driver instance is rebuilt.
|
||||
- MTConnect's `/probe` cache is still dropped, by `InvalidateProbeModel()` on an
|
||||
Agent restart. The tests that used to reach it through the flush now drive
|
||||
that path instead, so they cover a case that actually occurs.
|
||||
|
||||
If per-driver memory protection is wanted again, build it for the architecture
|
||||
as it is now: a process-wide watchdog, not a per-driver tier whose only remedy
|
||||
requires a supervisor that cannot exist in-process.
|
||||
as it is now: a process-wide watchdog that can ask drivers to flush, not a
|
||||
per-driver tier whose only remedy requires a supervisor that cannot exist
|
||||
in-process. The deleted per-driver implementations are in git history and were
|
||||
mostly reusable — what was always missing is the trigger.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user