Skip to content

Historian samples: adopt the completed Part 11 provider surface #877

Description

@romanett

Follow-up to the preview bump to 2.0.301.4181-preview, and a narrowing of #842.

UA-.NETStandard#4390 completed
OPC UA Part 11: all 37 released UACore 1.05 Historical Access profiles, structured and
annotation history, event history with insert/replace/update/delete, transactional and bulk
update dispatch, tri-state Historizing, and a client surface for all of it. The bump PR
did what was needed to keep the samples compiling and correct against the new interfaces.
What it did not do is demonstrate what those interfaces now carry.

What the bump PR changed

  • IHistorianDataProvider, IHistorianEventProvider, IHistorianTransactionalProvider,
    IHistorianBulkInsertProvider and IHistorianAnnotationProvider all changed shape:
    IList<T> became ArrayOf<T>, and an update answers a HistorianUpdateOutcome<T> -
    one status per entry plus the values the operation displaced, for the audit trail.
  • HistorianNodeCapabilities is now a gate as well as an advertisement: the dispatcher
    refuses an operation the provider does not claim, and the diagnostics node manager rolls
    the event flags up (they used to be set by hand in
    HistoricalEvents/Server/HistoricalEventsCapabilities.cs, which the bump PR reduced to
    the EventNotifier update).
  • HistorianEventRecord gained QualifiedFields, keyed by the whole select-clause
    identity rather than by the browse path alone. WellReportHistorianProvider now fills
    both.

What is not demonstrated

  1. Old values. Every sample provider returns an empty OldValues. Both stores
    overwrite in place, so reporting what a replace or a delete displaced means keeping a
    copy - which is exactly the thing a reader wants to see done once.
  2. Structured data history. IHistorianStructuredDataProvider and
    IHistorianStructuredDataKeySelector have no sample at all: same-timestamp values
    distinguished by a key inside the structure, with its own read and update families.
  3. Modified history with ModificationInfo. ArchiveHistorianProvider serves
    ReadModifiedAsync, but no client in this repository reads it, and
    HistoryClient now exposes the modification info beside the value.
  4. Event history from the client. HistoryClient gained event reads and event
    insert/replace/update/delete. The HistoricalEvents client does none of it - the tier
    1.5 fixtures are the only thing exercising the server side.
  5. Aggregate filters derived from per-node capabilities, and the rejection of an
    unsupported processed aggregate before the provider is reached.
  6. Tri-state Historizing - set, clear, or leave to the provider.

Items 1 and 4 are the cheap ones. Item 2 is a sample of its own.

Related: #842 lists the Part 11 gaps that predate #4390 (automatic value capture,
UseInMemory(), the HistoricalDataConfiguration installer, provider routing other than
per namespace). Those are still open and are not repeated here.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions