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

  1. Call only supported async method signatures: (TableName) or (TableName, ExecutorService)
  2. Extend HbaseAsyncCacheConfiguration's key generator to handle your new parameter shape
  3. 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

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


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/e640b8aa378a7e9c. Report an issue: GitHub.