{"record":{"id":"8c1988e9e3439688","repo":"egametang/ET","slug":"service-discovery-incremental-unregister-failed-sc","errorCode":null,"errorMessage":"service discovery incremental unregister failed scene: {sceneName}, error: {error}, message: {message}","messagePattern":"service discovery incremental unregister failed scene: (.+?), error: (.+?), message: (.+?)","errorType":"exception","errorClass":"RpcException","httpStatus":null,"severity":"warning","filePath":"Packages/cn.etetet.servicediscovery/Scripts/Hotfix/Server/ServiceDiscoveryAgentSystem.cs","lineNumber":969,"sourceCode":"                if (self == null)\n                {\n                    (rawResponse as MessageObject)?.Dispose();\n                    return false;\n                }\n\n                if (rawResponse is not ServiceUnregisterResponse response)\n                {\n                    (rawResponse as MessageObject)?.Dispose();\n                    throw new Exception(\n                        $\"service discovery incremental unregister 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 unregister 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 unregister failed agent: {self.Root().Name} scene: {sceneName} target: {targetActorId} error: {e.Message}\");\n                    self.HandleIncrementalSyncFailure(e, $\"incremental-unregister:{sceneName}\");\n                }\n\n                return false;","sourceCodeStart":951,"sourceCodeEnd":987,"githubUrl":"https://github.com/egametang/ET/blob/5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f/Packages/cn.etetet.servicediscovery/Scripts/Hotfix/Server/ServiceDiscoveryAgentSystem.cs#L951-L987","documentation":"RpcException thrown at line 969 in TrySyncUnregisterSceneAsync: the master returned a ServiceUnregisterResponse with Error != ERR_Success for an incremental scene unregistration. Like 334 it is caught, logged as a warning, and handled via HandleIncrementalSyncFailure. The scene remains dirty and the unregister will be retried or escalated to a full re-register.","triggerScenarios":"Incremental unregister reached the master but was rejected: follower rejection, persistence failure, internal failure, or the scene was not found on the master. Caught and retried.","commonSituations":"Master flipped to follower during unregister; DB delete failed; the scene was already removed on the master (race) and the master returned an error; transient master error.","solutions":["Inspect the RpcException error code to pinpoint the rejection reason.","Ensure master/DB health so the retry of the unregister succeeds.","For 'scene not found' type errors, a subsequent full re-register reconciles state — verify it completes."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"if (string.IsNullOrEmpty(sceneName) || version <= 0)\n{\n    return; // skip invalid incremental unregister\n}","typeGuard":null,"tryCatchPattern":"// Handled internally; warning logged, HandleIncrementalSyncFailure retries/escalates.\n// Monitor warning logs for persistent incremental-unregister failures.","preventionTips":["Keep the master and DB healthy.","Ensure unregister is retried/reconciled via full re-register.","Watch for races where the scene is already removed on the master."],"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"}