[ https://issues.apache.org/jira/browse/CASSANDRA-20450?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stefan Miklosovic updated CASSANDRA-20450: ------------------------------------------ Bug Category: Parent values: Code(13163) Complexity: Low Hanging Fruit Component/s: Legacy/Testing Discovered By: User Report Fix Version/s: 5.x Severity: Normal Status: Open (was: Triage Needed) > Fix simulator dtests after CASSANDRA-20368 > ------------------------------------------ > > Key: CASSANDRA-20450 > URL: https://issues.apache.org/jira/browse/CASSANDRA-20450 > Project: Apache Cassandra > Issue Type: Bug > Components: Legacy/Testing > Reporter: Stefan Miklosovic > Assignee: Stefan Miklosovic > Priority: Normal > Fix For: 5.x > > Time Spent: 10m > Remaining Estimate: 0h > > 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