cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joel Knighton (JIRA)" <>
Subject [jira] [Commented] (CASSANDRA-11381) Node running with join_ring=false and authentication can not serve requests
Date Mon, 07 Nov 2016 20:10:58 GMT


Joel Knighton commented on CASSANDRA-11381:

Thanks for pinging me on this - as you suspected, it slipped through the cracks. 

On reviewing the final version of this patch, I found one problem with the 2.2+ patches. The
proposed patch technically breaks the documented {{IRoleManager}}, {{IAuthenticator}}, and
{{IAuthorizer}} interfaces. With the implementation given, {{doAuthSetup}} will be called
twice for a node started with {{join_ring=False}}, so {{setup()}} will be called twice for
the role manager, authenticator, and authorizer. In the documentation for these three public
interfaces, we state that {{setup()}} will only be called once after starting a node. I think
we should preserve this documented behavior. While slightly less elegant, I think we should
instead track whether we've run {{doAuthSetup}} and not repeat this call for a node started
with {{join_ring=False}} that is asked to join. 

> Node running with join_ring=false and authentication can not serve requests
> ---------------------------------------------------------------------------
>                 Key: CASSANDRA-11381
>                 URL:
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: mck
>            Assignee: mck
>             Fix For: 2.1.x, 2.2.x, 3.0.x, 3.x
>         Attachments: 11381-2.1.txt, 11381-2.2.txt, 11381-3.0.txt, 11381-trunk.txt, dtest-11381-trunk.txt
> Starting up a node with {{-Dcassandra.join_ring=false}} in a cluster that has authentication
configured, eg PasswordAuthenticator, won't be able to serve requests. This is because {{Auth.setup()}}
never gets called during the startup.
> Without {{Auth.setup()}} having been called in {{StorageService}} clients connecting
to the node fail with the node throwing
> {noformat}
> java.lang.NullPointerException
>         at org.apache.cassandra.auth.PasswordAuthenticator.authenticate(
>         at org.apache.cassandra.thrift.CassandraServer.login(
>         at org.apache.cassandra.thrift.Cassandra$Processor$login.getResult(
>         at org.apache.cassandra.thrift.Cassandra$Processor$login.getResult(
>         at org.apache.thrift.ProcessFunction.process(
>         at org.apache.thrift.TBaseProcessor.process(
>         at com.thinkaurelius.thrift.Message.invoke(
>         at com.thinkaurelius.thrift.Message$Invocation.execute(
>         at com.thinkaurelius.thrift.TDisruptorServer$InvocationHandler.onEvent(
>         at com.thinkaurelius.thrift.TDisruptorServer$InvocationHandler.onEvent(
>         at
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(
>         at java.util.concurrent.ThreadPoolExecutor$
>         at
> {noformat}
> The exception thrown from the [code|]
> {code}
> ResultMessage.Rows rows = authenticateStatement.execute(QueryState.forInternalCalls(),
new QueryOptions(consistencyForUser(username),
> {code}

This message was sent by Atlassian JIRA

View raw message