{"record":{"id":"a3769d26a937f484","repo":"egametang/ET","slug":"service-discovery-incremental-register-failed-scen","errorCode":null,"errorMessage":"service discovery incremental register failed scene: {sceneName}, error: {error}, message: {message}","messagePattern":"service discovery incremental register failed scene: (.+?), error: (.+?), message: (.+?)","errorType":"exception","errorClass":"RpcException","httpStatus":null,"severity":"warning","filePath":"Packages/cn.etetet.servicediscovery/Scripts/Hotfix/Server/ServiceDiscoveryAgentSystem.cs","lineNumber":901,"sourceCode":"                if (self == null)\n                {\n                    (rawResponse as MessageObject)?.Dispose();\n                    return false;\n                }\n\n                if (rawResponse is not ServiceRegisterResponse response)\n                {\n                    (rawResponse as MessageObject)?.Dispose();\n                    throw new Exception(\n                        $\"service discovery incremental register response mismatch scene: {sceneName}, actual: {rawResponse?.GetType().Name}\");\n                }\n\n                if (response.Error != ErrorCode.ERR_Success)\n                {\n                    int error = response.Error;\n                    string message = response.Message;\n                    response.Dispose();\n                    throw new RpcException(error,\n                        $\"service discovery incremental register failed scene: {sceneName}, error: {error}, message: {message}\");\n                }\n\n                response.Dispose();\n                self.MarkPublishedSceneSynced(sceneName, version);\n                return true;\n            }\n            catch (Exception e)\n            {\n                self = selfRef;\n                if (self != null)\n                {\n                    Log.Warning(\n                        $\"ServiceDiscoveryAgent incremental register failed agent: {self.Root().Name} scene: {sceneName} target: {targetActorId} error: {e.Message}\");\n                    self.HandleIncrementalSyncFailure(e, $\"incremental-register:{sceneName}\");\n                }\n\n                return false;","sourceCodeStart":883,"sourceCodeEnd":919,"githubUrl":"https://github.com/egametang/ET/blob/5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f/Packages/cn.etetet.servicediscovery/Scripts/Hotfix/Server/ServiceDiscoveryAgentSystem.cs#L883-L919","documentation":"RpcException thrown at line 901 in TrySyncRegisterSceneAsync: the master returned a ServiceRegisterResponse with Error != ERR_Success for an incremental scene registration. The error code/message are wrapped in RpcException, caught by the surrounding try, logged as a warning, and routed through HandleIncrementalSyncFailure (which may invalidate the endpoint and trigger a full re-register).","triggerScenarios":"Incremental register of a scene reached the master but was rejected: invalid arguments, persistence (DB) failure, follower rejection, or internal failure. The scene stays dirty and will be retried/re-registered.","commonSituations":"Master is a follower at that moment (ERR_ServiceDiscoveryFollowerRejected); DB write failed (ERR_ServiceDiscoveryPersistenceFailed); the scene metadata/actorId failed validation; transient master internal error.","solutions":["Inspect the RpcException error code: follower rejection -> wait for re-resolve; persistence -> check DB; invalid argument -> fix the scene metadata.","The incremental sync will retry/escalate to full register automatically; ensure the underlying cause (master/DB) is healthy so the next attempt succeeds.","Verify the scene's ActorId and metadata are valid before queueing incremental register."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Validate scene metadata/actorId before queueing incremental register.\nif (actorId == default || string.IsNullOrEmpty(sceneName))\n{\n    return; // skip invalid incremental register\n}","typeGuard":null,"tryCatchPattern":"// Handled internally; the catch logs a warning and calls HandleIncrementalSyncFailure,\n// which invalidates the endpoint or marks full-register-needed.\n// Monitor warning logs for persistent incremental-register failures.","preventionTips":["Keep the master and DB healthy so incremental register succeeds on retry.","Validate scene metadata before queueing.","Watch for follower-rejection storms indicating master churn."],"tags":["csharp","et-framework","service-discovery","rpc","master-election","database","retry"],"backgroundTag":null,"analyzedSha":"5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f","analyzedAt":"2026-08-13T21:10:40.377Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}