f7d497e532
HistoryRead is served server-side by IHistorianDataSource; nothing ever dispatched to a driver's IHistoryProvider. Removes IHistoryProvider, the OpcUaClient history passthrough, DriverCapability.HistoryRead (+ resilience tier rows and AdminUI row), HistoryReadStatusException and its node-manager catches, and the tests that only covered them. Shared result types and HistoryAggregateNotSupportedException stay (moved to Historian/HistoryReadContracts.cs). A stored ResilienceConfig still carrying a HistoryRead key parses (diagnostic only; new test). Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
51 lines
2.6 KiB
C#
51 lines
2.6 KiB
C#
namespace ZB.MOM.WW.OtOpcUa.Core.Abstractions;
|
|
|
|
/// <summary>
|
|
/// Enumerates the driver-capability surface points guarded by Phase 6.1 resilience pipelines.
|
|
/// Each value corresponds to one method (or tightly-related method group) on the
|
|
/// <c>Core.Abstractions</c> capability interfaces (<see cref="IReadable"/>, <see cref="IWritable"/>,
|
|
/// <see cref="ITagDiscovery"/>, <see cref="ISubscribable"/>, <see cref="IHostConnectivityProbe"/>,
|
|
/// <see cref="IAlarmSource"/>).
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Per the per-capability retry policy in <c>docs/v2/plan.md</c>: Read /
|
|
/// Discover / Probe / AlarmSubscribe auto-retry; <see cref="Write"/> does NOT retry unless the
|
|
/// tag-definition carries <see cref="WriteIdempotentAttribute"/>. Alarm-acknowledge is treated
|
|
/// as a write for retry semantics (an alarm-ack is not idempotent at the plant-floor acknowledgement
|
|
/// level even if the OPC UA spec permits re-issue).
|
|
/// </remarks>
|
|
public enum DriverCapability
|
|
{
|
|
/// <summary>Batch <see cref="IReadable.ReadAsync"/>. Retries by default.</summary>
|
|
Read,
|
|
|
|
/// <summary>Batch <see cref="IWritable.WriteAsync"/>. Does not retry unless tag is <see cref="WriteIdempotentAttribute">idempotent</see>.</summary>
|
|
Write,
|
|
|
|
/// <summary><see cref="ITagDiscovery.DiscoverAsync"/>. Retries by default.</summary>
|
|
Discover,
|
|
|
|
/// <summary><see cref="ISubscribable.SubscribeAsync"/> and unsubscribe. Retries by default.</summary>
|
|
Subscribe,
|
|
|
|
/// <summary><see cref="IHostConnectivityProbe"/> probe loop. Retries by default.</summary>
|
|
Probe,
|
|
|
|
/// <summary><see cref="IAlarmSource.SubscribeAlarmsAsync"/>. Retries by default.</summary>
|
|
AlarmSubscribe,
|
|
|
|
/// <summary><see cref="IAlarmSource.AcknowledgeAsync"/>. Does NOT retry — ack is a write-shaped operation.</summary>
|
|
AlarmAcknowledge,
|
|
|
|
/// <summary>
|
|
/// <c>IDriver.InitializeAsync</c> — connection establishment (R2-10 T10 closure: without this,
|
|
/// a driver that cannot connect contributes zero breaker input and the resilience panel stays
|
|
/// quiet for the failure operators most care about). Does NOT retry — the
|
|
/// <c>DriverInstanceActor</c> reconnect timer is the retry loop, and pipeline-level retries
|
|
/// would stack inside each timer tick. The tier-default breaker threshold is deliberately low
|
|
/// (2): at the 10 s reconnect cadence at most three attempts fit the breaker's 30 s sampling
|
|
/// window, so a Read-sized threshold of 5 could never open on connect failures.
|
|
/// </summary>
|
|
Initialize,
|
|
}
|