Summary
Follow-up to the runtime NodeSet feature (#3974, PR #3990).
The runtime NodeSet loader (AddRuntimeNodeSet) currently imports NodeSet2 documents only during server startup, inside each node manager's CreateAddressSpaceAsync. There is intentionally no way to add, reload, or remove NodeManager instances (or their namespaces) after the server has started accepting client connections.
This issue tracks the follow-up work to support adding NodeManager instances to a running server (and, by extension, live reload/removal of runtime NodeSets).
Why it was out of scope for #3990
Post-start address-space mutation is a substantially larger, protocol-level feature than startup-time loading. It requires, at minimum:
- A thread-safe way to register/unregister a NodeManager in
MasterNodeManager after construction (today the namespace routing table is a one-time snapshot taken at construction).
- Updating the server
NamespaceArray (ns=0;i=2255) and emitting the appropriate OPC UA ModelChangeEvent / semantic-change notifications (Part 3).
- Re-evaluating existing sessions, subscriptions, and monitored items against the newly added/removed namespaces.
- Partial-failure/rollback semantics when a runtime load fails midway.
- Re-priming the server complex-type factory for newly added
DataTypeDefinitions, and defining behavior for reloading/removing DataTypes that existing sessions may already reference.
Proposed scope
- Design a supported API to add a NodeManager (including a runtime NodeSet source) to an already-running
StandardServer.
- Optionally support reloading/removing a previously added runtime NodeSet.
- Wire the namespace-table update, model-change events, and complex-type re-priming.
- Add integration tests covering browse/subscribe behavior across a live add.
References
Summary
Follow-up to the runtime NodeSet feature (#3974, PR #3990).
The runtime NodeSet loader (
AddRuntimeNodeSet) currently imports NodeSet2 documents only during server startup, inside each node manager'sCreateAddressSpaceAsync. There is intentionally no way to add, reload, or remove NodeManager instances (or their namespaces) after the server has started accepting client connections.This issue tracks the follow-up work to support adding NodeManager instances to a running server (and, by extension, live reload/removal of runtime NodeSets).
Why it was out of scope for #3990
Post-start address-space mutation is a substantially larger, protocol-level feature than startup-time loading. It requires, at minimum:
MasterNodeManagerafter construction (today the namespace routing table is a one-time snapshot taken at construction).NamespaceArray(ns=0;i=2255) and emitting the appropriate OPC UAModelChangeEvent/ semantic-change notifications (Part 3).DataTypeDefinitions, and defining behavior for reloading/removing DataTypes that existing sessions may already reference.Proposed scope
StandardServer.References
Docs/RuntimeNodeSets.md(see the startup-only semantics and non-goals sections).