You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by yu...@apache.org on 2014/01/15 04:13:26 UTC
[5/5] git commit: Create system_auth tables with fixed CFID
Create system_auth tables with fixed CFID
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ea565aac
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ea565aac
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ea565aac
Branch: refs/heads/trunk
Commit: ea565aac9702698b2bfc2db7c3ca84da3f96121a
Parents: 29d5dd0
Author: Yuki Morishita <yu...@apache.org>
Authored: Tue Jan 14 21:12:38 2014 -0600
Committer: Yuki Morishita <yu...@apache.org>
Committed: Tue Jan 14 21:12:38 2014 -0600
----------------------------------------------------------------------
src/java/org/apache/cassandra/auth/Auth.java | 24 ++++++++++++++++----
.../cassandra/auth/CassandraAuthorizer.java | 14 +-----------
.../cassandra/auth/PasswordAuthenticator.java | 19 +---------------
.../org/apache/cassandra/config/CFMetaData.java | 17 +++++++++-----
.../apache/cassandra/config/CFMetaDataTest.java | 2 +-
5 files changed, 33 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ea565aac/src/java/org/apache/cassandra/auth/Auth.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/Auth.java b/src/java/org/apache/cassandra/auth/Auth.java
index 36e55bf..90b1215 100644
--- a/src/java/org/apache/cassandra/auth/Auth.java
+++ b/src/java/org/apache/cassandra/auth/Auth.java
@@ -25,12 +25,15 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.KSMetaData;
import org.apache.cassandra.config.Schema;
import org.apache.cassandra.cql3.UntypedResultSet;
import org.apache.cassandra.cql3.QueryProcessor;
import org.apache.cassandra.cql3.QueryOptions;
+import org.apache.cassandra.cql3.statements.CFStatement;
+import org.apache.cassandra.cql3.statements.CreateTableStatement;
import org.apache.cassandra.cql3.statements.SelectStatement;
import org.apache.cassandra.db.ConsistencyLevel;
import org.apache.cassandra.exceptions.RequestExecutionException;
@@ -127,7 +130,7 @@ public class Auth
return;
setupAuthKeyspace();
- setupUsersTable();
+ setupTable(USERS_CF, USERS_CF_SCHEMA);
DatabaseDescriptor.getAuthenticator().setup();
DatabaseDescriptor.getAuthorizer().setup();
@@ -187,15 +190,26 @@ public class Auth
}
}
- private static void setupUsersTable()
+ /**
+ * Set up table from given CREATE TABLE statement under system_auth keyspace, if not already done so.
+ *
+ * @param name name of the table
+ * @param cql CREATE TABLE statement
+ */
+ public static void setupTable(String name, String cql)
{
- if (Schema.instance.getCFMetaData(AUTH_KS, USERS_CF) == null)
+ if (Schema.instance.getCFMetaData(AUTH_KS, name) == null)
{
try
{
- QueryProcessor.process(USERS_CF_SCHEMA, ConsistencyLevel.ANY);
+ CFStatement parsed = (CFStatement)QueryProcessor.parseStatement(cql);
+ parsed.prepareKeyspace(AUTH_KS);
+ CreateTableStatement statement = (CreateTableStatement) parsed.prepare().statement;
+ CFMetaData cfm = statement.getCFMetaData().clone(CFMetaData.generateLegacyCfId(AUTH_KS, name));
+ assert cfm.cfName.equals(name);
+ MigrationManager.announceNewColumnFamily(cfm);
}
- catch (RequestExecutionException e)
+ catch (Exception e)
{
throw new AssertionError(e);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ea565aac/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java b/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java
index 8f257db..85d2b16 100644
--- a/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java
+++ b/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java
@@ -25,7 +25,6 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.cassandra.config.Schema;
import org.apache.cassandra.cql3.UntypedResultSet;
import org.apache.cassandra.cql3.QueryProcessor;
import org.apache.cassandra.cql3.QueryOptions;
@@ -33,7 +32,6 @@ import org.apache.cassandra.cql3.statements.SelectStatement;
import org.apache.cassandra.db.ConsistencyLevel;
import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.exceptions.*;
-import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.service.QueryState;
import org.apache.cassandra.transport.messages.ResultMessage;
import org.apache.cassandra.utils.ByteBufferUtil;
@@ -240,17 +238,7 @@ public class CassandraAuthorizer implements IAuthorizer
public void setup()
{
- if (Schema.instance.getCFMetaData(Auth.AUTH_KS, PERMISSIONS_CF) == null)
- {
- try
- {
- process(PERMISSIONS_CF_SCHEMA);
- }
- catch (RequestExecutionException e)
- {
- throw new AssertionError(e);
- }
- }
+ Auth.setupTable(PERMISSIONS_CF, PERMISSIONS_CF_SCHEMA);
try
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ea565aac/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java b/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java
index cd5bdc3..1567bde 100644
--- a/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java
+++ b/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java
@@ -31,14 +31,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.config.Schema;
import org.apache.cassandra.cql3.UntypedResultSet;
import org.apache.cassandra.cql3.QueryProcessor;
import org.apache.cassandra.cql3.QueryOptions;
import org.apache.cassandra.cql3.statements.SelectStatement;
import org.apache.cassandra.db.ConsistencyLevel;
import org.apache.cassandra.exceptions.*;
-import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.service.QueryState;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.transport.messages.ResultMessage;
@@ -168,7 +166,7 @@ public class PasswordAuthenticator implements ISaslAwareAuthenticator
public void setup()
{
- setupCredentialsTable();
+ Auth.setupTable(CREDENTIALS_CF, CREDENTIALS_CF_SCHEMA);
// the delay is here to give the node some time to see its peers - to reduce
// "skipped default user setup: some nodes are were not ready" log spam.
@@ -205,21 +203,6 @@ public class PasswordAuthenticator implements ISaslAwareAuthenticator
return new PlainTextSaslAuthenticator();
}
- private void setupCredentialsTable()
- {
- if (Schema.instance.getCFMetaData(Auth.AUTH_KS, CREDENTIALS_CF) == null)
- {
- try
- {
- process(CREDENTIALS_CF_SCHEMA, ConsistencyLevel.ANY);
- }
- catch (RequestExecutionException e)
- {
- throw new AssertionError(e);
- }
- }
- }
-
// if there are no users yet - add default superuser.
private void setupDefaultUser()
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ea565aac/src/java/org/apache/cassandra/config/CFMetaData.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java
index 3dc7022..cdc4cdb 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -543,14 +543,14 @@ public final class CFMetaData
*
* Since 2.1, this is only used for system columnfamilies and tests.
*/
- static UUID getId(String ksName, String cfName)
+ public static UUID generateLegacyCfId(String ksName, String cfName)
{
return UUID.nameUUIDFromBytes(ArrayUtils.addAll(ksName.getBytes(), cfName.getBytes()));
}
private static CFMetaData newSystemMetadata(String keyspace, String cfName, String comment, CellNameType comparator)
{
- CFMetaData newCFMD = new CFMetaData(keyspace, cfName, ColumnFamilyType.Standard, comparator, getId(keyspace, cfName));
+ CFMetaData newCFMD = new CFMetaData(keyspace, cfName, ColumnFamilyType.Standard, comparator, generateLegacyCfId(keyspace, cfName));
return newCFMD.comment(comment)
.readRepairChance(0)
.dcLocalReadRepairChance(0)
@@ -603,10 +603,15 @@ public final class CFMetaData
return copyOpts(new CFMetaData(ksName, cfName, cfType, comparator, cfId), this);
}
- // Create a new CFMD by changing just the cfName
- public static CFMetaData rename(CFMetaData cfm, String newName)
+ /**
+ * Clones the CFMetaData, but sets a different cfId
+ *
+ * @param newCfId the cfId for the cloned CFMetaData
+ * @return the cloned CFMetaData instance with the new cfId
+ */
+ public CFMetaData clone(UUID newCfId)
{
- return copyOpts(new CFMetaData(cfm.ksName, newName, cfm.cfType, cfm.comparator, cfm.cfId), cfm);
+ return copyOpts(new CFMetaData(ksName, cfName, cfType, comparator, newCfId), this);
}
static CFMetaData copyOpts(CFMetaData newCFMD, CFMetaData oldCFMD)
@@ -1677,7 +1682,7 @@ public final class CFMetaData
if (result.has("cf_id"))
cfId = result.getUUID("cf_id");
else
- cfId = getId(ksName, cfName);
+ cfId = generateLegacyCfId(ksName, cfName);
CFMetaData cfm = new CFMetaData(ksName,
cfName,
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ea565aac/test/unit/org/apache/cassandra/config/CFMetaDataTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/config/CFMetaDataTest.java b/test/unit/org/apache/cassandra/config/CFMetaDataTest.java
index 9cd4adf..d0ff179 100644
--- a/test/unit/org/apache/cassandra/config/CFMetaDataTest.java
+++ b/test/unit/org/apache/cassandra/config/CFMetaDataTest.java
@@ -109,7 +109,7 @@ public class CFMetaDataTest extends SchemaLoader
checkInverses(cfm);
// Testing with compression to catch #3558
- CFMetaData withCompression = CFMetaData.rename(cfm, cfm.cfName); // basically a clone
+ CFMetaData withCompression = cfm.clone();
withCompression.compressionParameters(new CompressionParameters(SnappyCompressor.instance, 32768, new HashMap<String, String>()));
checkInverses(withCompression);
}