egametang/ET · warning · RpcException

service discovery incremental unregister failed scene: {scen

Error message

service discovery incremental unregister failed scene: {sceneName}, error: {error}, message: {message}

What it means

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.

Source

Thrown at Packages/cn.etetet.servicediscovery/Scripts/Hotfix/Server/ServiceDiscoveryAgentSystem.cs:969

                if (self == null)
                {
                    (rawResponse as MessageObject)?.Dispose();
                    return false;
                }

                if (rawResponse is not ServiceUnregisterResponse response)
                {
                    (rawResponse as MessageObject)?.Dispose();
                    throw new Exception(
                        $"service discovery incremental unregister response mismatch scene: {sceneName}, actual: {rawResponse?.GetType().Name}");
                }

                if (response.Error != ErrorCode.ERR_Success)
                {
                    int error = response.Error;
                    string message = response.Message;
                    response.Dispose();
                    throw new RpcException(error,
                        $"service discovery incremental unregister failed scene: {sceneName}, error: {error}, message: {message}");
                }

                response.Dispose();
                self.MarkPublishedSceneSynced(sceneName, version);
                return true;
            }
            catch (Exception e)
            {
                self = selfRef;
                if (self != null)
                {
                    Log.Warning(
                        $"ServiceDiscoveryAgent incremental unregister failed agent: {self.Root().Name} scene: {sceneName} target: {targetActorId} error: {e.Message}");
                    self.HandleIncrementalSyncFailure(e, $"incremental-unregister:{sceneName}");
                }

                return false;

View on GitHub (pinned to 5cab01f7a8)

Solutions

  1. Inspect the RpcException error code to pinpoint the rejection reason.
  2. Ensure master/DB health so the retry of the unregister succeeds.
  3. For 'scene not found' type errors, a subsequent full re-register reconciles state — verify it completes.
Defensive patterns

Strategy: try-catch

Validate before calling

if (string.IsNullOrEmpty(sceneName) || version <= 0)
{
    return; // skip invalid incremental unregister
}

Try / catch

// Handled internally; warning logged, HandleIncrementalSyncFailure retries/escalates.
// Monitor warning logs for persistent incremental-unregister failures.

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of egametang/ET@5cab01f7a8 (2026-08-13). Data as JSON: /api/errors/8c1988e9e3439688. Report an issue: GitHub.