apache/pulsar · error · IllegalArgumentException
%s Instance Id is not provided
Error message
%s Instance Id is not provided
What it means
An IllegalArgumentException thrown by ComponentImpl.validateGetFunctionInstanceRequestParams when the instanceId is null while fetching a specific function/sink/source instance status or stats. It first delegates to validateGetFunctionRequestParams, then checks the instance identifier.
Source
Thrown at pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java:1564
private void validateListFunctionRequestParams(final String tenant, final String namespace)
throws IllegalArgumentException {
if (tenant == null) {
throw new IllegalArgumentException("Tenant is not provided");
}
if (namespace == null) {
throw new IllegalArgumentException("Namespace is not provided");
}
}
protected void validateGetFunctionInstanceRequestParams(final String tenant,
final String namespace,
final String componentName,
final FunctionDetails.ComponentType componentType,
final String instanceId) throws IllegalArgumentException {
validateGetFunctionRequestParams(tenant, namespace, componentName, componentType);
if (instanceId == null) {
throw new IllegalArgumentException(String.format("%s Instance Id is not provided", componentType));
}
}
protected void validateGetFunctionRequestParams(String tenant, String namespace, String subject,
FunctionDetails.ComponentType componentType)
throws IllegalArgumentException {
if (tenant == null) {
throw new IllegalArgumentException("Tenant is not provided");
}
if (namespace == null) {
throw new IllegalArgumentException("Namespace is not provided");
}
if (subject == null) {
throw new IllegalArgumentException(ComponentTypeUtils.toString(componentType) + " name is not provided");
}
}
View on GitHub (pinned to 820761864e)
Solutions
- Pass the instance id (integer index of the instance) to the call
- If you want aggregate status, call the non-instance variant (getFunctionStatus) instead
- Fix config wiring so the instance id is populated
Example fix
// before
admin.functions().getFunctionStatus("public", "default", "my-fn", null);
// after
admin.functions().getFunctionStatus("public", "default", "my-fn", 0); Defensive patterns
Strategy: validation
Validate before calling
Objects.requireNonNull(instanceId, "instanceId must be provided for instance-level status calls");
Type guard
static boolean hasInstanceId(Integer instanceId) {
return instanceId != null && instanceId >= 0;
} Try / catch
try {
return admin.functions().getFunctionStatus(tenant, ns, name, instanceId);
} catch (IllegalArgumentException e) {
if (e.getMessage().endsWith("Instance Id is not provided")) {
// use aggregate API instead
return admin.functions().getFunctionStatus(tenant, ns, name);
}
throw e;
} Prevention
- Use the aggregate getFunctionStatus API when you do not need a specific instance
- Iterate instance ids from 0 to parallelism-1 when fetching all instances
- Do not confuse instance-level and function-level status APIs
When it happens
Trigger: Calling getFunctionInstance APIs (e.g. GET .../functions/{tenant}/{namespace}/{function}/{instanceId} via admin API getFunctionStatus with a null instanceId argument).
Common situations: Loop over instances where the instance index variable was never set; request built from config where the instance id field is absent; mixing up getFunctionStatus (all instances) with getFunctionInstanceStatus (per instance) calls.
Understand the failure class
Background: Missing required parameter errors: what 'X is required' and 'the required X param is missing' mean, and how to fix them — this error's family across 27 libraries.
Related errors
- Tenant is not provided
- Namespace is not provided
- %s name is not provided
- Key is not provided
- Function name is not provided
AI-assisted analysis of apache/pulsar@820761864e (2026-09-06).
Data as JSON: /api/errors/7008b2d2d8f286da.
Report an issue: GitHub.