docs(requirements): name TrackedOperationKind enum and clarify status-enum relationships
This commit is contained in:
@@ -36,7 +36,8 @@ Commons must define shared primitive and utility types used across multiple comp
|
|||||||
- **`AlarmTriggerType` enum**: ValueMatch, RangeViolation, RateOfChange, HiLo.
|
- **`AlarmTriggerType` enum**: ValueMatch, RangeViolation, RateOfChange, HiLo.
|
||||||
- **`ConnectionHealth` enum**: Connected, Disconnected, Connecting, Error.
|
- **`ConnectionHealth` enum**: Connected, Disconnected, Connecting, Error.
|
||||||
- **`TrackedOperationId`**: A GUID identifying a tracked store-and-forward operation (`ExternalSystem.CachedCall`, `Database.CachedWrite`, `Notify.Send`). Generated caller-side at the site at call time, returned to the script as a tracking handle, and reused as the idempotency key for telemetry sent to central. The notification domain's existing `NotificationId` is the notification-specific name for this same concept.
|
- **`TrackedOperationId`**: A GUID identifying a tracked store-and-forward operation (`ExternalSystem.CachedCall`, `Database.CachedWrite`, `Notify.Send`). Generated caller-side at the site at call time, returned to the script as a tracking handle, and reused as the idempotency key for telemetry sent to central. The notification domain's existing `NotificationId` is the notification-specific name for this same concept.
|
||||||
- **`TrackedOperationStatus` enum**: Pending, Retrying, Delivered, Parked, Failed, Discarded. The unified lifecycle state shared by all tracked store-and-forward operations.
|
- **`TrackedOperationKind` enum**: ExternalCall, DatabaseWrite. Discriminates the two cached-call kinds carried by a tracked operation (notifications are tracked separately via the `NotificationType` enum).
|
||||||
|
- **`TrackedOperationStatus` enum**: Pending, Retrying, Delivered, Parked, Failed, Discarded. The unified lifecycle state shared by all tracked store-and-forward operations. This is the operation's externally-observable lifecycle status in the site-local tracking table (the status record); it is related to but distinct from the S&F buffer's own `StoreAndForwardMessageStatus`, which tracks a buffered message's retry state within the buffer (the retry mechanism). `Failed` (permanent failure) has no notification analogue — notifications use only the other five states (the `NotificationStatus` enum omits `Failed`).
|
||||||
|
|
||||||
Types defined here must be immutable and thread-safe.
|
Types defined here must be immutable and thread-safe.
|
||||||
|
|
||||||
@@ -121,7 +122,7 @@ Commons must define the shared DTOs and message contracts used for inter-compone
|
|||||||
- **Script Execution DTOs**: Script call requests (with recursion depth), return values, error results.
|
- **Script Execution DTOs**: Script call requests (with recursion depth), return values, error results.
|
||||||
- **System-Wide Artifact DTOs**: Shared script packages, external system definitions, database connection definitions, notification list definitions.
|
- **System-Wide Artifact DTOs**: Shared script packages, external system definitions, database connection definitions, notification list definitions.
|
||||||
- **Notification DTOs**: `NotificationSubmit` (site→central submission: `NotificationId`, `ListName`, `Subject`, `Body`, provenance, `SiteEnqueuedAt`) and `NotificationSubmitAck` (central acknowledgement returned only after the `Notifications` row is persisted — ack-after-persist — which the site Store-and-Forward Engine waits on before clearing the buffered message). `NotificationStatusQuery` / `NotificationStatusResponse` back the `Notify.Status` script API, round-tripping a status record (status, retry count, last error, key timestamps) once a notification has been forwarded. Recipient resolution is *not* part of any contract — the site forwards only `(listName, subject, body)` and central resolves the list at delivery time. Subject to the additive-only evolution rules in REQ-COM-5a, since a submission can cross the site→central version-skew boundary.
|
- **Notification DTOs**: `NotificationSubmit` (site→central submission: `NotificationId`, `ListName`, `Subject`, `Body`, provenance, `SiteEnqueuedAt`) and `NotificationSubmitAck` (central acknowledgement returned only after the `Notifications` row is persisted — ack-after-persist — which the site Store-and-Forward Engine waits on before clearing the buffered message). `NotificationStatusQuery` / `NotificationStatusResponse` back the `Notify.Status` script API, round-tripping a status record (status, retry count, last error, key timestamps) once a notification has been forwarded. Recipient resolution is *not* part of any contract — the site forwards only `(listName, subject, body)` and central resolves the list at delivery time. Subject to the additive-only evolution rules in REQ-COM-5a, since a submission can cross the site→central version-skew boundary.
|
||||||
- **Cached Call Tracking DTOs**: `CachedCallTelemetry` (site→central lifecycle telemetry for a tracked cached call: `TrackedOperationId`, source site, `Kind` — an `ExternalCall` / `DatabaseWrite` enum — target summary, status, retry count, last error, key timestamps, and source instance / script provenance) and `CachedCallReconcileRequest` / `CachedCallReconcileResponse` (cursor-based per-site pull of tracking rows changed since a cursor, used so missed telemetry self-heals). All three live in the `Integration/` message folder and are subject to the additive-only evolution rules in REQ-COM-5a, since they cross the site→central version-skew boundary.
|
- **Cached Call Tracking DTOs**: `CachedCallTelemetry` (site→central lifecycle telemetry for a tracked cached call: `TrackedOperationId`, source site, `Kind` — the `TrackedOperationKind` enum (`ExternalCall` / `DatabaseWrite`) — target summary, status, retry count, last error, key timestamps, and source instance / script provenance) and `CachedCallReconcileRequest` / `CachedCallReconcileResponse` (cursor-based per-site pull of tracking rows changed since a cursor, used so missed telemetry self-heals). All three live in the `Integration/` message folder and are subject to the additive-only evolution rules in REQ-COM-5a, since they cross the site→central version-skew boundary.
|
||||||
- **Parked Operation Command DTOs**: `RetryParkedOperation` and `DiscardParkedOperation` (central→site command/control messages keyed by `TrackedOperationId`, instructing the owning site to retry or discard a parked store-and-forward operation). These generalize the existing parked-message retry/discard commands to also cover parked cached calls; they live in the `RemoteQuery/` message folder alongside the other parked-message management messages.
|
- **Parked Operation Command DTOs**: `RetryParkedOperation` and `DiscardParkedOperation` (central→site command/control messages keyed by `TrackedOperationId`, instructing the owning site to retry or discard a parked store-and-forward operation). These generalize the existing parked-message retry/discard commands to also cover parked cached calls; they live in the `RemoteQuery/` message folder alongside the other parked-message management messages.
|
||||||
|
|
||||||
All message types must be `record` types or immutable classes suitable for use as Akka.NET messages (though Commons itself must not depend on Akka.NET).
|
All message types must be `record` types or immutable classes suitable for use as Akka.NET messages (though Commons itself must not depend on Akka.NET).
|
||||||
@@ -155,7 +156,7 @@ ScadaLink.Commons/
|
|||||||
│ │ # DataType, StoreAndForwardCategory,
|
│ │ # DataType, StoreAndForwardCategory,
|
||||||
│ │ # StoreAndForwardMessageStatus,
|
│ │ # StoreAndForwardMessageStatus,
|
||||||
│ │ # NotificationType, NotificationStatus,
|
│ │ # NotificationType, NotificationStatus,
|
||||||
│ │ # TrackedOperationStatus
|
│ │ # TrackedOperationKind, TrackedOperationStatus
|
||||||
│ ├── DataConnections/ # OPC UA endpoint config value objects + enums
|
│ ├── DataConnections/ # OPC UA endpoint config value objects + enums
|
||||||
│ ├── Flattening/ # FlattenedConfiguration, ConfigurationDiff,
|
│ ├── Flattening/ # FlattenedConfiguration, ConfigurationDiff,
|
||||||
│ │ # DeploymentPackage, ValidationResult
|
│ │ # DeploymentPackage, ValidationResult
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ Lives in the central MS SQL configuration database — a sibling of the
|
|||||||
|
|
||||||
- **TrackedOperationId** — GUID, primary key. Generated site-side at call time.
|
- **TrackedOperationId** — GUID, primary key. Generated site-side at call time.
|
||||||
- **SourceSite** — site that issued the call.
|
- **SourceSite** — site that issued the call.
|
||||||
- **Kind** — `ExternalCall` or `DatabaseWrite`.
|
- **Kind** — `TrackedOperationKind` enum: `ExternalCall` or `DatabaseWrite`.
|
||||||
- **TargetSummary** — external system + method name for an `ExternalCall`; for a
|
- **TargetSummary** — external system + method name for an `ExternalCall`; for a
|
||||||
`DatabaseWrite`, just the database connection name — intentionally not the SQL
|
`DatabaseWrite`, just the database connection name — intentionally not the SQL
|
||||||
statement or table, a deliberate scoping choice.
|
statement or table, a deliberate scoping choice.
|
||||||
|
|||||||
Reference in New Issue
Block a user