apache/cassandra · error · InvalidRequestException

Invalid number of arguments for function %s

Error message

Invalid number of arguments for function %s

What it means

The built-in hash masking function factory (HashMaskingFunction.doGetOrCreateFunction) only accepts 1 or 2 arguments. Any other arity throws invalidNumberOfArgumentsException with message 'Invalid number of arguments for function %s'. The second argument toggles the salted/seeded variant.

Source

Thrown at src/java/org/apache/cassandra/cql3/functions/masking/HashMaskingFunction.java:149

    /** @return a {@link FunctionFactory} to build new {@link HashMaskingFunction}s. */
    public static FunctionFactory factory()
    {
        return new MaskingFunction.Factory(NAME,
                                           FunctionParameter.anyType(false),
                                           FunctionParameter.optional(FunctionParameter.fixed(CQL3Type.Native.TEXT)))
        {
            @Override
            protected NativeFunction doGetOrCreateFunction(List<AbstractType<?>> argTypes, AbstractType<?> receiverType)
            {
                switch (argTypes.size())
                {
                    case 1:
                        return new HashMaskingFunction(name, argTypes.get(0), false);
                    case 2:
                        return new HashMaskingFunction(name, argTypes.get(0), true);
                    default:
                        throw invalidNumberOfArgumentsException();
                }
            }
        };
    }
}

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Reduce the argument list to one argument (the column type) or two arguments (column type plus salt/second parameter).
  2. If a different hashing configuration is required, create a scalar UDF implementing the desired hashing and mask with that.

Example fix

// before
ALTER TABLE users ALTER id MASKED WITH hash(int, blob, text);
// after
ALTER TABLE users ALTER id MASKED WITH hash(int, blob);
Defensive patterns

Strategy: validation

Validate before calling

if (fnName.equalsIgnoreCase("hash") && (args.size() < 1 || args.size() > 2))
  throw new IllegalArgumentException("hash masking accepts 1 or 2 arguments only");

Prevention

When it happens

Trigger: MASKED WITH hash(t1, t2, t3) with zero or three-plus arguments, e.g. hash(text, blob, int).

Common situations: Developer adds a hashing algorithm or seed as a third parameter, mistaking the signature for a general hash utility; the built-in hash only supports hash(type) and hash(type, seed/type).

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/66d1a34cb37d7488. Report an issue: GitHub.