alibaba/Sentinel · error · IllegalArgumentException

Invalid transport config in request

Error message

Invalid transport config in request

What it means

ClusterConfigService.modifyClusterServerConfig (Sentinel dashboard) first validates the ServerTransportConfig embedded in the request. invalidTransportConfig (port null or <= 0) causes IllegalArgumentException('Invalid transport config in request') before the flow-config and namespace checks run.

Source

Thrown at sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java:79

        String ip = request.getIp();
        int port = request.getPort();
        return sentinelApiClient.modifyClusterClientConfig(app, ip, port, request.getClientConfig())
            .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_CLIENT));
    }

    private boolean notClientRequestValid(/*@NonNull */ ClusterClientModifyRequest request) {
        ClusterClientConfig config = request.getClientConfig();
        return config == null || StringUtil.isEmpty(config.getServerHost())
            || config.getServerPort() == null || config.getServerPort() <= 0
            || config.getRequestTimeout() == null || config.getRequestTimeout() <= 0;
    }

    public CompletableFuture<Void> modifyClusterServerConfig(ClusterServerModifyRequest request) {
        ServerTransportConfig transportConfig = request.getTransportConfig();
        ServerFlowConfig flowConfig = request.getFlowConfig();
        Set<String> namespaceSet = request.getNamespaceSet();
        if (invalidTransportConfig(transportConfig)) {
            throw new IllegalArgumentException("Invalid transport config in request");
        }
        if (invalidFlowConfig(flowConfig)) {
            throw new IllegalArgumentException("Invalid flow config in request");
        }
        if (namespaceSet == null) {
            throw new IllegalArgumentException("namespace set cannot be null");
        }
        String app = request.getApp();
        String ip = request.getIp();
        int port = request.getPort();
        return sentinelApiClient.modifyClusterServerNamespaceSet(app, ip, port, namespaceSet)
            .thenCompose(v -> sentinelApiClient.modifyClusterServerTransportConfig(app, ip, port, transportConfig))
            .thenCompose(v -> sentinelApiClient.modifyClusterServerFlowConfig(app, ip, port, flowConfig))
            .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_SERVER));
    }

    /**
     * Get cluster state list of all available machines of provided application.

View on GitHub (pinned to a3f40ba8e9)

Solutions

  1. Set transportConfig.port to the token server port (typically 18730, must be > 0) in the request.
  2. Confirm the whole payload includes transportConfig, flowConfig, and namespaceSet — the other two are validated right after and will throw their own errors otherwise.
  3. Check the dashboard frontend payload in browser devtools if the form seems filled but the error persists.

Example fix

// before
ClusterServerModifyRequest req = new ClusterServerModifyRequest();
// transportConfig omitted
clusterConfigService.modifyClusterServerConfig(req);

// after
req.setTransportConfig(new ServerTransportConfig(18730));
req.setFlowConfig(new ServerFlowConfig());
req.setNamespaceSet(Collections.singleton(app));
clusterConfigService.modifyClusterServerConfig(req);
Defensive patterns

Strategy: validation

Validate before calling

ServerTransportConfig t = request.getTransportConfig();
if (t == null || t.getPort() == null || t.getPort() <= 0) {
    return badRequest("transportConfig.port must be a positive integer");
}
clusterConfigService.modifyClusterServerConfig(request);

Type guard

boolean isTransportConfigValid(ServerTransportConfig t) {
    return t != null && t.getPort() != null && t.getPort() > 0;
}

Prevention

When it happens

Trigger: POST of a ClusterServerModifyRequest whose transportConfig is null or has a non-positive port, when assigning a machine the token-server role from the dashboard.

Common situations: Server form submitted with an empty port; REST payload missing the transportConfig object; scripts posting partial JSON where only flowConfig was populated.

Related errors


AI-assisted analysis of alibaba/Sentinel@a3f40ba8e9 (2026-08-14). Data as JSON: /api/errors/addfa6685000ba15. Report an issue: GitHub.