Stefan Miklosovic created CASSANDRA-20450:
---------------------------------------------

             Summary: Fix simulator dtests after CASSANDRA-20368
                 Key: CASSANDRA-20450
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-20450
             Project: Apache Cassandra
          Issue Type: Bug
            Reporter: Stefan Miklosovic
            Assignee: Stefan Miklosovic


After CASSANDRA-20368 was merged, we are getting this in simulator dtests:
{code:java}
Caused by: java.lang.ClassCastException: class 
org.apache.cassandra.auth.AllowAllAuthenticator cannot be cast to class 
org.apache.cassandra.auth.IAuthenticator 
(org.apache.cassandra.auth.AllowAllAuthenticator is in unnamed module of loader 
'app'; org.apache.cassandra.auth.IAuthenticator is in unnamed module of loader 
org.apache.cassandra.distributed.shared.InstanceClassLoader @740abb5)
        at org.apache.cassandra.auth.AuthConfig.applyAuth(AuthConfig.java:54)
        at 
org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:284)
        at 
org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:269)
        at 
org.apache.cassandra.distributed.impl.Instance.partialStartup(Instance.java:710)
 {code}
The problem is that after that was merged, we started to do this:
{code:java}
private static <T> T authInstantiate(ParameterizedClass authCls, Class<T> 
defaultCls) {
    if (authCls != null && authCls.class_name != null)
    {
        String authPackage = AuthConfig.class.getPackage().getName();
        return ParameterizedClass.newInstance(authCls, List.of("", 
authPackage));
    }

    return ParameterizedClass.newInstance(new 
ParameterizedClass(defaultCls.getName()), List.of());
}{code}
while previously it was this
{code:java}
private static <T> T authInstantiate(ParameterizedClass authCls, Class<T> 
defaultCls) {
    if (authCls != null && authCls.class_name != null)
    {
        String authPackage = AuthConfig.class.getPackage().getName();
        return ParameterizedClass.newInstance(authCls, List.of("", 
authPackage));
    }

    try
    {
        return defaultCls.newInstance();
    }
    catch (InstantiationException | IllegalAccessException  e)
    {
        throw new ConfigurationException("Failed to instantiate " + 
defaultCls.getName(), e);
    }
} {code}

I am not completely sure what's the problem as "normally" it just works, but 
when using this code in connection with simulator, my suspicion is that it is 
using a different class loader and then creating an instance via 
ParameterizedClass.newInstance just messes it up on all the casts etc. 

The easy solution here is to just revert to "what was". The only functional 
difference here is that when a user does e.g. this in yaml

{code}
authorizer:
{code}

that means, setting authorizer literally to nothing (null), then what the 
current trunk code does (which broke the simulator tests) is that it will take 
AllowAllAuthorizer, checks what constructor it has and if it has map 
constructor it will prefer that one. If it does not have any map constructor, 
it will create an instance using no-arg constructor.

I do not think there is any practical difference here so we might just revert 
to "what was". 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to