diff --git a/docs/MxAccessWorkerInstanceDesign.md b/docs/MxAccessWorkerInstanceDesign.md index 4124bb0..2c0f4b3 100644 --- a/docs/MxAccessWorkerInstanceDesign.md +++ b/docs/MxAccessWorkerInstanceDesign.md @@ -1019,10 +1019,10 @@ and relies on the gateway to kill the process. ## Fault Handling -Worker fault categories: +Worker fault categories (`InvalidArguments` and `GatewayAuthenticationFailed` +are reserved and never emitted: bootstrap failures exit via `WorkerExitCode` +before the pipe exists): -- `InvalidArguments` -- `GatewayAuthenticationFailed` - `ProtocolMismatch` - `ProtocolViolation` - `PipeDisconnected` diff --git a/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessGateway.cs b/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessGateway.cs index 9e1229e..0bbd29f 100644 --- a/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessGateway.cs +++ b/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessGateway.cs @@ -727,6 +727,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { [pbr::OriginalName("ALARM_TRANSITION_KIND_RAISE")] Raise = 1, [pbr::OriginalName("ALARM_TRANSITION_KIND_ACKNOWLEDGE")] Acknowledge = 2, [pbr::OriginalName("ALARM_TRANSITION_KIND_CLEAR")] Clear = 3, + /// + /// Reserved: never produced by the gateway or worker. Retained so the numeric + /// value is not reused. + /// [pbr::OriginalName("ALARM_TRANSITION_KIND_RETRIGGER")] Retrigger = 4, } @@ -12714,6 +12718,11 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { /// Field number for the "operator_full_name" field. public const int OperatorFullNameFieldNumber = 6; private string operatorFullName_ = ""; + /// + /// Accepted for wire compatibility but NOT propagated to MXAccess: the 8-arg + /// AlarmAckByName that carried it returns -55. operator_domain IS used (the + /// AuthenticateUser identity is "<operator_domain>\<operator_user>"). + /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public string OperatorFullName { @@ -13384,6 +13393,11 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { /// Field number for the "operator_full_name" field. public const int OperatorFullNameFieldNumber = 8; private string operatorFullName_ = ""; + /// + /// Accepted for wire compatibility but NOT propagated to MXAccess: the 8-arg + /// AlarmAckByName that carried it returns -55. operator_domain IS used (the + /// AuthenticateUser identity is "<operator_domain>\<operator_user>"). + /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public string OperatorFullName { @@ -17527,6 +17541,9 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { /// Field number for the "correlation_id" field. public const int CorrelationIdFieldNumber = 2; private string correlationId_ = ""; + /// + /// Echoes the request's client_correlation_id. + /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public string CorrelationId { @@ -26125,7 +26142,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { /// /// When the alarm originally entered the active state. Preserved across /// acknowledge transitions so the Part 9 condition keeps the original raise - /// time. Unset on retrigger from a previously-cleared condition. + /// time. Unset when the raise time is unknown (RETRIGGER is reserved and never produced). /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] diff --git a/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessWorker.cs b/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessWorker.cs index 892348a..2863490 100644 --- a/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessWorker.cs +++ b/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessWorker.cs @@ -132,6 +132,12 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { public enum WorkerFaultCategory { [pbr::OriginalName("WORKER_FAULT_CATEGORY_UNSPECIFIED")] Unspecified = 0, + /// + /// Values 1 and 2 are reserved: never emitted. Bootstrap failures (bad + /// arguments, gateway authentication) exit via WorkerExitCode before the pipe + /// exists, so there is no channel to carry a fault. Names kept so the numbers + /// are not reused. + /// [pbr::OriginalName("WORKER_FAULT_CATEGORY_INVALID_ARGUMENTS")] InvalidArguments = 1, [pbr::OriginalName("WORKER_FAULT_CATEGORY_GATEWAY_AUTHENTICATION_FAILED")] GatewayAuthenticationFailed = 2, [pbr::OriginalName("WORKER_FAULT_CATEGORY_PROTOCOL_MISMATCH")] ProtocolMismatch = 3, diff --git a/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_gateway.proto b/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_gateway.proto index 915b1e8..edfdca6 100644 --- a/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_gateway.proto +++ b/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_gateway.proto @@ -405,6 +405,9 @@ message AcknowledgeAlarmCommand { string operator_user = 3; string operator_node = 4; string operator_domain = 5; + // Accepted for wire compatibility but NOT propagated to MXAccess: the 8-arg + // AlarmAckByName that carried it returns -55. operator_domain IS used (the + // AuthenticateUser identity is "\"). string operator_full_name = 6; // Operator credential used for AuthenticateUser before the AckMsg write. // Implementations must keep this field out of logs, metrics labels, command @@ -435,6 +438,9 @@ message AcknowledgeAlarmByNameCommand { string operator_user = 5; string operator_node = 6; string operator_domain = 7; + // Accepted for wire compatibility but NOT propagated to MXAccess: the 8-arg + // AlarmAckByName that carried it returns -55. operator_domain IS used (the + // AuthenticateUser identity is "\"). string operator_full_name = 8; // Operator credential used for AuthenticateUser before the AckMsg write. // Implementations must keep this field out of logs, metrics labels, command @@ -549,6 +555,7 @@ message ShutdownWorkerCommand { message MxCommandReply { string session_id = 1; + // Echoes the request's client_correlation_id. string correlation_id = 2; MxCommandKind kind = 3; ProtocolStatus protocol_status = 4; @@ -880,7 +887,7 @@ message OnAlarmTransitionEvent { // When the alarm originally entered the active state. Preserved across // acknowledge transitions so the Part 9 condition keeps the original raise - // time. Unset on retrigger from a previously-cleared condition. + // time. Unset when the raise time is unknown (RETRIGGER is reserved and never produced). google.protobuf.Timestamp original_raise_timestamp = 6; // When this specific transition occurred (raise time on Raise, ack time on @@ -930,6 +937,8 @@ enum AlarmTransitionKind { ALARM_TRANSITION_KIND_RAISE = 1; ALARM_TRANSITION_KIND_ACKNOWLEDGE = 2; ALARM_TRANSITION_KIND_CLEAR = 3; + // Reserved: never produced by the gateway or worker. Retained so the numeric + // value is not reused. ALARM_TRANSITION_KIND_RETRIGGER = 4; } diff --git a/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_worker.proto b/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_worker.proto index 7a8a5e7..da894a3 100644 --- a/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_worker.proto +++ b/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_worker.proto @@ -127,6 +127,10 @@ enum WorkerState { enum WorkerFaultCategory { WORKER_FAULT_CATEGORY_UNSPECIFIED = 0; + // Values 1 and 2 are reserved: never emitted. Bootstrap failures (bad + // arguments, gateway authentication) exit via WorkerExitCode before the pipe + // exists, so there is no channel to carry a fault. Names kept so the numbers + // are not reused. WORKER_FAULT_CATEGORY_INVALID_ARGUMENTS = 1; WORKER_FAULT_CATEGORY_GATEWAY_AUTHENTICATION_FAILED = 2; WORKER_FAULT_CATEGORY_PROTOCOL_MISMATCH = 3;