You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sa...@apache.org on 2016/11/11 11:35:46 UTC

[02/10] cassandra git commit: Prepare legacy auth statements if tables initialised after node startup (follow-up)

Prepare legacy auth statements if tables initialised after node startup (follow-up)

Patch by Alex Petrov; reviewed by Sam Tunnicliffe for CASSANDRA-12813

Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5e4198ff
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5e4198ff
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5e4198ff

Branch: refs/heads/cassandra-3.0
Commit: 5e4198ffdad57aebd7c4b3a8cc01a7ce88eac99c
Parents: 2e21cac
Author: Alex Petrov <ol...@gmail.com>
Authored: Thu Nov 10 14:07:38 2016 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Fri Nov 11 11:21:39 2016 +0000

----------------------------------------------------------------------
 .../cassandra/auth/CassandraRoleManager.java    | 23 +++++++++++++++-----
 1 file changed, 17 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/5e4198ff/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/CassandraRoleManager.java b/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
index dbae1ba..a90b297 100644
--- a/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
+++ b/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
@@ -163,9 +163,8 @@ public class CassandraRoleManager implements IRoleManager
         // to be added.
         if (Schema.instance.getCFMetaData(AuthKeyspace.NAME, "users") != null)
         {
-             legacySelectUserStatement = (SelectStatement) prepare("SELECT * FROM %s.%s WHERE name = ?",
-                                                                   AuthKeyspace.NAME,
-                                                                   LEGACY_USERS_TABLE);
+            legacySelectUserStatement = prepareLegacySelectUserStatement();
+
             scheduleSetupTask(new Callable<Void>()
             {
                 public Void call() throws Exception
@@ -459,6 +458,13 @@ public class CassandraRoleManager implements IRoleManager
         }
     }
 
+    private SelectStatement prepareLegacySelectUserStatement()
+    {
+        return (SelectStatement) prepare("SELECT * FROM %s.%s WHERE name = ?",
+                                         AuthKeyspace.NAME,
+                                         LEGACY_USERS_TABLE);
+    }
+
     private CQLStatement prepare(String template, String keyspace, String table)
     {
         try
@@ -500,9 +506,14 @@ public class CassandraRoleManager implements IRoleManager
             // If it exists, try the legacy users table in case the cluster
             // is in the process of being upgraded and so is running with mixed
             // versions of the authn schema.
-            return (Schema.instance.getCFMetaData(AuthKeyspace.NAME, "users") != null)
-                    ? getRoleFromTable(name, legacySelectUserStatement, LEGACY_ROW_TO_ROLE)
-                    : getRoleFromTable(name, loadRoleStatement, ROW_TO_ROLE);
+            if (Schema.instance.getCFMetaData(AuthKeyspace.NAME, "users") == null)
+                return getRoleFromTable(name, loadRoleStatement, ROW_TO_ROLE);
+            else
+            {
+                if (legacySelectUserStatement == null)
+                    prepareLegacySelectUserStatement();
+                return getRoleFromTable(name, legacySelectUserStatement, LEGACY_ROW_TO_ROLE);
+            }
         }
         catch (RequestExecutionException | RequestValidationException e)
         {