egametang/ET · warning · RpcException

service discovery incremental register failed scene: {sceneN

Error message

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

What it means

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).

Source

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

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

                if (rawResponse is not ServiceRegisterResponse response)
                {
                    (rawResponse as MessageObject)?.Dispose();
                    throw new Exception(
                        $"service discovery incremental register 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 register 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 register failed agent: {self.Root().Name} scene: {sceneName} target: {targetActorId} error: {e.Message}");
                    self.HandleIncrementalSyncFailure(e, $"incremental-register:{sceneName}");
                }

                return false;

View on GitHub (pinned to 5cab01f7a8)

Solutions

  1. Inspect the RpcException error code: follower rejection -> wait for re-resolve; persistence -> check DB; invalid argument -> fix the scene metadata.
  2. The incremental sync will retry/escalate to full register automatically; ensure the underlying cause (master/DB) is healthy so the next attempt succeeds.
  3. Verify the scene's ActorId and metadata are valid before queueing incremental register.
Defensive patterns

Strategy: try-catch

Validate before calling

// Validate scene metadata/actorId before queueing incremental register.
if (actorId == default || string.IsNullOrEmpty(sceneName))
{
    return; // skip invalid incremental register
}

Try / catch

// Handled internally; the catch logs a warning and calls HandleIncrementalSyncFailure,
// which invalidates the endpoint or marks full-register-needed.
// Monitor warning logs for persistent incremental-register failures.

Prevention

When it happens

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

Common situations: Master is a follower at that moment (ERR_ServiceDiscoveryFollowerRejected); DB write failed (ERR_ServiceDiscoveryPersistenceFailed); the scene metadata/actorId failed validation; transient master internal error.

Related errors


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