You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2013/08/12 19:16:56 UTC
git commit: CASSANDRA-5800 follow-up
Updated Branches:
refs/heads/cassandra-1.2 cb0a0cd2f -> 44925ac7e
CASSANDRA-5800 follow-up
patch by Aleksey Yeschenko; reviewed by Tyler Hobbs for CASSANDRA-5800
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/44925ac7
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/44925ac7
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/44925ac7
Branch: refs/heads/cassandra-1.2
Commit: 44925ac7ea3520bd414d06273cce0edf650d589f
Parents: cb0a0cd
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Mon Aug 12 19:16:01 2013 +0200
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Mon Aug 12 19:16:01 2013 +0200
----------------------------------------------------------------------
.../org/apache/cassandra/db/SystemTable.java | 66 +++++++++++++-------
1 file changed, 42 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/44925ac7/src/java/org/apache/cassandra/db/SystemTable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SystemTable.java b/src/java/org/apache/cassandra/db/SystemTable.java
index 32f5fe0..81e675e 100644
--- a/src/java/org/apache/cassandra/db/SystemTable.java
+++ b/src/java/org/apache/cassandra/db/SystemTable.java
@@ -181,41 +181,59 @@ public class SystemTable
oldHintsCfs.truncate();
}
- migrateKeyAliases();
+ migrateKeyAlias();
}
/**
* 1.1 used a key_alias column; 1.2 changed that to key_aliases as part of CQL3
*/
- private static void migrateKeyAliases()
+ private static void migrateKeyAlias()
{
- for (UntypedResultSet.Row row : processInternal("SELECT keyspace_name, columnfamily_name, key_aliases, key_alias FROM system.schema_columnfamilies"))
+ String selectQuery = String.format("SELECT keyspace_name, columnfamily_name, writetime(type), key_aliases, key_alias FROM %s.%s",
+ Table.SYSTEM_KS,
+ SCHEMA_COLUMNFAMILIES_CF);
+ for (UntypedResultSet.Row row : processInternal(selectQuery))
{
- String key_alias = null;
- String key_aliases = null;
- try
- {
- key_alias = row.getString("key_alias");
- }
- catch (NullPointerException e)
- {
- // column value is null
- }
- try
- {
- key_aliases = row.getString("key_aliases");
- }
- catch (NullPointerException e)
+ String ks = row.getString("keyspace_name");
+ String cf = row.getString("columnfamily_name");
+ Long timestamp = row.getLong("writetime(type)"); // guaranteed to be present
+
+ String keyAlias = row.has("key_alias") ? row.getString("key_alias") : null;
+ String keyAliases = row.has("key_aliases") ? row.getString("key_aliases") : null;
+
+ if (keyAliases != null)
{
- // column value is null
+ if (keyAlias == null)
+ continue; // key_alias has never existed or has already been migrated - moving on.
+
+ // delete key_alias if it's still there - it's not being used anymore.
+ processInternal(String.format("DELETE key_alias "
+ + "FROM %s.%s "
+ + "USING TIMESTAMP %d "
+ + "WHERE keyspace_name = '%s' AND columnfamily_name = '%s'",
+ Table.SYSTEM_KS,
+ SCHEMA_COLUMNFAMILIES_CF,
+ timestamp,
+ ks,
+ cf));
}
- if (key_alias != null && key_aliases == null)
+ else
{
- String keyspace = row.getString("keyspace_name");
- String columnfamily = row.getString("columnfamily_name");
- processInternal(String.format("UPDATE system.schema_columnfamilies set key_aliases='[\"%s\"]' , key_alias = null where keyspace_name='%s' and columnfamily_name='%s'",
- key_alias, keyspace, columnfamily));
+ // key_aliases is null. Set to either '[]' or '["<keyAlias>"]', depending on the key_alias (lack of) value.
+ List<String> aliases = keyAlias == null
+ ? Collections.<String>emptyList()
+ : Collections.singletonList(keyAlias);
+ processInternal(String.format("UPDATE %s.%s "
+ + "USING TIMESTAMP %d "
+ + "SET key_alias = null, key_aliases = '%s' "
+ + "WHERE keyspace_name = '%s' AND columnfamily_name = '%s'",
+ Table.SYSTEM_KS,
+ SCHEMA_COLUMNFAMILIES_CF,
+ timestamp,
+ FBUtilities.json(aliases),
+ ks,
+ cf));
}
}
}