Galaxy picker-form alarm ack before the feed names it dials the bare tag.Attr (gateway refuses) #904
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-up from the #895 review (
d5288388).Gap. For a Galaxy native alarm authored in the AdminUI picker form (
attributeRef = <tag>.<Attr>), the driver learns the provider-qualified referenceGalaxy!<Area>.<tag>.<Attr>from the alarm feed. Until this driver instance has seen a transition or snapshot entry for that alarm,AcknowledgeAsyncdials the bare<tag>.<Attr>, and the gateway'sAcknowledgeAlarmrefuses it because the reference has no provider prefix.When it can happen. The host restores condition state from LocalDb on bootstrap (seen in the G6 gate,
docs/drivers/evidence/galaxy-g6-e2e-2026-11-12.mdStep 6). So after a restart a condition can showActive, Unacknowledgedbefore the feed's snapshot has reached the new driver, for example when the gateway is unreachable or slow to answer. An ack in that window is refused and the host reverts it. The failure is visible, not silent, and a retry after the snapshot arrives succeeds. The window is small. The provider-formattributeRefdoes not have this gap.Options.
tag.AttrinAcknowledgeAlarm. The worker acknowledges by writing<alarm_name>.AckMsg, so the group is only needed to parse the reference.Not urgent. Filed so the residual is tracked.
Fixed on the driver side in
c9640f5c(pushed tomaster).Fix
InitialSnapshotCompletedsignal. It completes when the gateway'ssnapshot_completesentinel arrives, which is after every snapshot entry has been raised throughResolveAlarmRawPath.AcknowledgeAsyncnow gets its reference fromResolveAlarmAckReferenceAsync. That method waits only when all three hold:!),tag.Attris dialled as before and the gateway refuses it visibly. A warning is logged and the host reverts the ack.Why not the other options
tag.Attr: this needs a cross-repo deploy on every tier. The gateway would resolve the reference from the same monitor cache that the snapshot already delivers to the driver. The default wnwrap consumer ignores the group, but the subtag consumer needs the exact reference, so an area-free ack isn't uniform there anyway. No mxaccessgw change was made.Tests
GalaxyDriverRawPathKeyingTests, 5 cases:Galaxy!Area2…GatewayGalaxyAlarmFeedTests: the signal completes on the sentinel, after the entries.TrySetResultremoved, the feed case fails.Live check (windev TEST Galaxy, gateway
10.100.0.48:5120)GalaxyPickerAckBeforeSnapshotLiveTestswithGALAXY_904_ALARM_REF=TestMachine_015.TestAlarm003. It raises the alarm with a supervisory write, waits until the feed names itGalaxy!TestArea.TestMachine_015.TestAlarm003, and then runs two checks:TestMachine_015.TestAlarm003. The gateway refuses it withInvalidRequest.Galaxy!TestArea.TestMachine_015.TestAlarm003and is confirmed.alarm_full_reference must be a canonical GUID or 'Provider!Group.Tag' format.g904-ack-livewas revoked.:5130/health/readyreturned 200 throughout.The live check was driver-level, not a full Host restart from LocalDb, but it exercises the same window: a new driver instance acking before its feed snapshot.
Deployed to DEV vd03 + QA vq03/vq04 in
c9640f5con 2026-11-13. Not exercised live: neither tier has a Galaxy driver.Record:
docs/deploy/2026-11-13-vd03-qa-to-c9640f5c.md(c0ba450d).