Skip to content

[Server] Runtime NodeSet: add/reload/remove NodeManager instances on a running server #3993

Description

@marcschier

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementAPI or feature enhancement

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions