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
- Set transportConfig.port to the token server port (typically 18730, must be > 0) in the request.
- Confirm the whole payload includes transportConfig, flowConfig, and namespaceSet — the other two are validated right after and will throw their own errors otherwise.
- 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
- Default the token server port in the UI (18730) so an empty field can never reach the service.
- Validate the full triple (transportConfig, flowConfig, namespaceSet) client-side before POST.
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
- Invalid request
- Invalid flow config in request
- namespace set cannot be null
- Invalid intervalUnit: {}
- BAD_REQUEST
AI-assisted analysis of alibaba/Sentinel@a3f40ba8e9 (2026-08-14).
Data as JSON: /api/errors/addfa6685000ba15.
Report an issue: GitHub.