pinpoint-apm/pinpoint · error · IllegalArgumentException
invalid params
Error message
invalid params
What it means
HbaseAsyncCacheConfiguration's cache key generator (generate) builds a key from the executor method's parameter list: either a table name alone (length 1) or a table name plus ExecutorService pool (length 2). Any other parameter signature is unsupported and fails fast with IllegalArgumentException, because the async cache cannot derive a key from it.
Source
Thrown at commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/async/HbaseAsyncCacheConfiguration.java:59
@Bean
public KeyGenerator tableNameAndPoolKeyGenerator() {
return new TableNameAndPoolKeyGenerator();
}
private static class TableNameAndPoolKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
final int length = params.length;
if (length == 1) {
TableName tableName = (TableName) params[0];
return new TableNameAndPoolKey(tableName);
} else if (length == 2) {
TableName tableName = (TableName) params[0];
ExecutorService executorService = (ExecutorService) params[1];
return new TableNameAndPoolKey(tableName, executorService);
}
throw new IllegalArgumentException("invalid params");
}
private static class TableNameAndPoolKey {
private final TableName tableName;
private final ExecutorService pool;
public TableNameAndPoolKey(TableName tableName) {
this.tableName = Objects.requireNonNull(tableName, "tableName");
this.pool = null;
}
public TableNameAndPoolKey(TableName tableName, ExecutorService pool) {
this.tableName = Objects.requireNonNull(tableName, "tableName");
this.pool = Objects.requireNonNull(pool, "pool");
}
@Override
public boolean equals(Object o) {View on GitHub (pinned to 744c3d3075)
Solutions
- Call only supported async method signatures: (TableName) or (TableName, ExecutorService)
- Extend HbaseAsyncCacheConfiguration's key generator to handle your new parameter shape
- Remove extra arguments and pass configuration via other means (fields, config properties)
Example fix
// before asyncTemplate.put(tableName, executor, extraCallback, family); // after asyncTemplate.put(tableName, executor);
Defensive patterns
Strategy: type-guard
Validate before calling
Object[] params = invocation.getArguments();
if (params.length != 1 && params.length != 2) throw new IllegalArgumentException("unsupported async key params: " + params.length);
if (params.length >= 1 && !(params[0] instanceof TableName)) throw new IllegalArgumentException("first param must be TableName");
if (params.length == 2 && !(params[1] instanceof ExecutorService)) throw new IllegalArgumentException("second param must be ExecutorService"); Type guard
static boolean isSupportedAsyncSignature(Object[] params) {
return (params.length == 1 && params[0] instanceof TableName)
|| (params.length == 2 && params[0] instanceof TableName && params[1] instanceof ExecutorService);
} Prevention
- Only call documented async HBase template signatures (TableName, optionally ExecutorService)
- Update HbaseAsyncCacheConfiguration whenever async method parameters change
- Review KeyGenerator coverage in code review for new async APIs
When it happens
Trigger: Invoking an HBase async template method whose parameters are not exactly (TableName) or (TableName, ExecutorService), causing the cache KeyGenerator to receive params of length 0 or >= 3.
Common situations: Calling a custom/extended async HBase API method with extra arguments that the shipped KeyGenerator was never taught to hash; pinpoint code changes adding parameters to async put/get without updating HbaseAsyncCacheConfiguration.
Understand the failure class
Background: "must be a positive integer", "cannot be empty", "invalid argument": how invalid-argument errors work across open-source libraries — this error's family across 33 libraries.
Related errors
- negative tieOffset:<tieOffset>
- non-positive tieLength:<tieLength>
- max concurrent requests reached. table:<tableName>
- limit must be positive or -1(unlimited): <limit>
- maxBuckets should be in 1..256 range
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/e640b8aa378a7e9c.
Report an issue: GitHub.