Skip to content

Migrate Workshop/PerfTest server Node Manager to AsyncCustomNodeManager #763

Description

@romanett

Part of #753.

Goal

Migrate the PerfTest Workshop server sample to AsyncCustomNodeManager. It builds a large address space by hand (no generated model), so Step 2 (Fluent) does not apply. This sample is performance-sensitive — the migration should demonstrate the benefit of the async two-tier locking model.

Scope

  • Workshop/PerfTest/Server/PerfTestNodeManager.csPerfTestNodeManager : CustomNodeManager2
  • Workshop/PerfTest/Server/PerfTest Server.csproj and its node-manager registration

Do not touch the client project.

Step 1 — AsyncCustomNodeManager

  1. Base class CustomNodeManager2AsyncCustomNodeManager; constructor base(server, configuration, <namespaceUri>).
  2. CreateAddressSpaceoverride async ValueTask CreateAddressSpaceAsync(...); bulk-create the large node set with await AddPredefinedNodeAsync / await AddNodeAsync.
  3. Remove the global lock (Lock) around reads — rely on per-node read locking so the many simulated variables can be read in parallel. Keep writes under the base write semaphore.
  4. If values are produced independently of writes (timer/simulation), consider useSamplingGroups: true on the base constructor; otherwise keep the default change-triggered manager and push updates via await ClearChangeMasksAsync.
  5. Register via IAsyncNodeManagerFactory.

Acceptance criteria

  • PerfTestNodeManager derives from AsyncCustomNodeManager; no CustomNodeManager2 / global lock (Lock) on the read path remains.
  • PerfTest Server builds/starts; the PerfTest client runs its read/subscribe workload with results at least on par with the pre-migration baseline.

References

  • docs/AsyncServerSupport.md (UA-.NETStandard) — locking model and monitored-item manager selection (useSamplingGroups).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions