apache/cassandra · error · UnsupportedOperationException

REVOKE operation is not supported by AllowAllAuthorizer

Error message

REVOKE operation is not supported by AllowAllAuthorizer

What it means

Thrown during CreateTypeStatement.apply when two or more fields of the new user-defined type share the same field name. A UDT's fields must be uniquely named because they are stored as an ordered name-to-type mapping, so duplicates are rejected at DDL time before the type is created.

Source

Thrown at src/java/org/apache/cassandra/auth/AllowAllAuthorizer.java:43

    @Override
    public boolean requireAuthorization()
    {
        return false;
    }

    public Set<Permission> authorize(AuthenticatedUser user, IResource resource)
    {
        return resource.applicablePermissions();
    }

    public Set<Permission> grant(AuthenticatedUser performer, Set<Permission> permissions, IResource resource, RoleResource to)
    {
        throw new UnsupportedOperationException("GRANT operation is not supported by AllowAllAuthorizer");
    }

    public Set<Permission> revoke(AuthenticatedUser performer, Set<Permission> permissions, IResource resource, RoleResource from)
    {
        throw new UnsupportedOperationException("REVOKE operation is not supported by AllowAllAuthorizer");
    }

    public void revokeAllFrom(RoleResource droppedRole)
    {
    }

    public void revokeAllOn(IResource droppedResource)
    {
    }

    public Set<PermissionDetails> list(AuthenticatedUser performer, Set<Permission> permissions, IResource resource, RoleResource of)
    {
        throw new UnsupportedOperationException("LIST PERMISSIONS operation is not supported by AllowAllAuthorizer");
    }

    public Set<IResource> protectedResources()
    {
        return Collections.emptySet();

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Remove or rename the duplicate field so every name in the field list is unique.
  2. Review the generated CQL if the DDL is produced by a tool, fixing the field-list generator.
  3. Remember unquoted identifiers are case-insensitive: 'UserId int, userid text' is a duplicate — rename one field.

Example fix

// before
CREATE TYPE orders.address (street text, Street text, city text);
// after
CREATE TYPE orders.address (street text, street2 text, city text);
Defensive patterns

Strategy: validation

Validate before calling

Set<String> seen = new HashSet<>();
for (String f : fieldNames) {
    String norm = f.toLowerCase(); // unquoted identifiers are case-folded
    if (!seen.add(norm)) throw new IllegalArgumentException("Duplicate field: " + f);
}

Prevention

When it happens

Trigger: Executing 'CREATE TYPE ks.t (a int, a text)' or any statement where fieldNames contains the same FieldIdentifier twice, detected by failing to add a name to the usedNames set.

Common situations: Copy-paste errors in long field lists; programmatically generated DDL concatenating field lists that overlap; case sensitivity confusion — unquoted field names are lowercased, so 'A' and 'a' both become 'a' and collide.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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