Skip to content

Add OPC UA Part 17 Alias Names support - #1834

Merged
kevinherron merged 3 commits into
integration/1.2from
feature/alias-manager
Aug 3, 2026
Merged

Add OPC UA Part 17 Alias Names support#1834
kevinherron merged 3 commits into
integration/1.2from
feature/alias-manager

Conversation

@kevinherron

@kevinherron kevinherron commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Summary

This adds support for OPC UA Part 17 Alias Names, which lets clients look up Nodes by a well-known alias name (e.g. a tag name) instead of needing to know their NodeIds. Clients search for aliases with the standard FindAlias and FindAliasVerbose Methods, and can optionally be allowed to manage aliases themselves via AddAliasesToCategory and DeleteAliasesFromCategory.

The feature is implemented as AliasManager, an opt-in component an application creates and starts alongside its OpcUaServer. It binds the Find Methods on the standard Aliases, TagVariables, and Topics categories, and applications can add their own category trees and aliases through its API. Alias and category Nodes live in an application-supplied NodeManager, LastChange version tracking persists through a pluggable AliasVersionStore, and an AliasAuthorizationPolicy SPI controls who may search and configure.

Servers that don't install a manager now mark the standard FindAlias Methods non-executable, so absent alias support no longer looks like a callable Method that always fails.

Also included are two standalone supporting changes: the Part 4 LIKE pattern matching used by the event filter Like operator was extracted into a reusable LikeMatcher (now shared by alias search), and AbstractLifecycle was fixed to leave a lifecycle stopped when onStartup() throws.

🤖 Generated with Claude Code

kevinherron and others added 2 commits August 2, 2026 16:49
The events Like operator owned the only implementation of the Part 4
LIKE grammar, and alias name search needs the same matching. Move
parsing, matching, and the LRU pattern cache into a reusable
LikeMatcher; the operator delegates with no behavior change. The new
compile() entry point lets callers that evaluate one pattern against
many values parse it once.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
startup() transitioned to RUNNING before invoking onStartup() and never
reverted, so a failed startup left isRunning() reporting true and a
defensive shutdown() would run onShutdown() against state that never
finished initializing. Transition to STOPPED instead, making a
lifecycle whose startup failed safely disposable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kevinherron
kevinherron force-pushed the feature/alias-manager branch 2 times, most recently from 8d0e7bd to cf58483 Compare August 3, 2026 02:13
@kevinherron
kevinherron marked this pull request as ready for review August 3, 2026 02:19
AliasManager is an opt-in server component that binds FindAlias (and
optionally FindAliasVerbose) on the standard Aliases, TagVariables, and
Topics categories, supports application-defined category trees, and
optionally exposes AddAliasesToCategory/DeleteAliasesFromCategory for
client-driven configuration. LastChange versioning persists through a
pluggable AliasVersionStore, and an AliasAuthorizationPolicy SPI gates
calls and can filter individual results.

Until a manager is installed, OpcUaNamespace now marks the standard
FindAlias Methods non-executable so absent alias support is not a
callable Method that always fails.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kevinherron
kevinherron force-pushed the feature/alias-manager branch from cf58483 to 7ef6e44 Compare August 3, 2026 03:25
@kevinherron
kevinherron merged commit b7fd9e3 into integration/1.2 Aug 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant