You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2012/10/02 05:46:32 UTC

git commit: include metadata for system keyspace itself in schema tables patch by jbellis; reviewed by slebresne for CASSANDRA-4416

Updated Branches:
  refs/heads/trunk e05a5fc12 -> d41d5f6db


include metadata for system keyspace itself in schema tables
patch by jbellis; reviewed by slebresne for CASSANDRA-4416


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

Branch: refs/heads/trunk
Commit: d41d5f6db29721726765723a1cba8d38bb52ce22
Parents: e05a5fc
Author: Jonathan Ellis <jb...@apache.org>
Authored: Mon Oct 1 22:44:39 2012 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Mon Oct 1 22:46:04 2012 -0500

----------------------------------------------------------------------
 CHANGES.txt                                        |    9 +++++--
 .../cassandra/config/DatabaseDescriptor.java       |    2 +
 src/java/org/apache/cassandra/config/Schema.java   |    6 +---
 src/java/org/apache/cassandra/db/DefsTable.java    |    6 ++--
 src/java/org/apache/cassandra/db/SystemTable.java  |   18 +++++++++++++++
 .../org/apache/cassandra/tools/SSTableExport.java  |    6 -----
 6 files changed, 31 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/d41d5f6d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d3932b7..9067ba8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 1.2-beta2
+ * include metadata for system keyspace itself in schema tables (CASSANDRA-4416)
  * add check to PropertyFileSnitch to verify presence of location for
    local node (CASSANDRA-4728)
  * add PBSPredictor consistency modeler (CASSANDRA-4261)
@@ -7,14 +8,16 @@
  * adjust blockFor calculation to account for pending ranges due to node 
    movement (CASSANDRA-833)
  * Change CQL version to 3.0.0 and stop accepting 3.0.0-beta1 (CASSANDRA-4649)
- * (CQL3) Make prepared statement global instead of per connection (CASSANDRA-4449)
+ * (CQL3) Make prepared statement global instead of per connection 
+   (CASSANDRA-4449)
  * Fix scrubbing of CQL3 created tables (CASSANDRA-4685)
- * (CQL3) Fix validation when using counter and regular columns in the same table
-   (CASSANDRA-4706)
+ * (CQL3) Fix validation when using counter and regular columns in the same 
+   table (CASSANDRA-4706)
  * Fix bug starting Cassandra with simple authentication (CASSANDRA-4648)
  * Add support for batchlog in CQL3 (CASSANDRA-4545)
  * Add support for multiple column family outputs in CFOF (CASSANDRA-4208)
 
+
 1.2-beta1
  * add atomic_batch_mutate (CASSANDRA-4542, -4635)
  * increase default max_hint_window_in_ms to 3h (CASSANDRA-4632)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d41d5f6d/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index e3ce40c..91bd9b6 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -464,8 +464,10 @@ public class DatabaseDescriptor
 
             // Hardcoded system tables
             List<KSMetaData> systemKeyspaces = Arrays.asList(KSMetaData.systemKeyspace(), KSMetaData.traceKeyspace());
+            assert systemKeyspaces.size() == Schema.systemKeyspaceNames.size();
             for (KSMetaData ksmd : systemKeyspaces)
             {
+                // install the definition
                 for (CFMetaData cfm : ksmd.cfMetaData().values())
                     Schema.instance.load(cfm);
                 Schema.instance.setTableDefinition(ksmd);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d41d5f6d/src/java/org/apache/cassandra/config/Schema.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/Schema.java b/src/java/org/apache/cassandra/config/Schema.java
index dd16b4b..de89140 100644
--- a/src/java/org/apache/cassandra/config/Schema.java
+++ b/src/java/org/apache/cassandra/config/Schema.java
@@ -64,6 +64,7 @@ public class Schema
 
     // 59adb24e-f3cd-3e02-97f0-5b395827453f
     public static final UUID emptyVersion;
+    public static final ImmutableSet<String> systemKeyspaceNames = ImmutableSet.of(Table.SYSTEM_KS, Tracing.TRACE_KS);
 
     static
     {
@@ -277,8 +278,7 @@ public class Schema
      */
     public List<String> getNonSystemTables()
     {
-        ImmutableSet<String> system = ImmutableSet.of(Table.SYSTEM_KS, Tracing.TRACE_KS);
-        return ImmutableList.copyOf(Sets.difference(tables.keySet(), system));
+        return ImmutableList.copyOf(Sets.difference(tables.keySet(), systemKeyspaceNames));
     }
 
     /**
@@ -387,8 +387,6 @@ public class Schema
      * (to make ColumnFamily lookup faster)
      *
      * @param cfm The ColumnFamily definition to load
-     *
-     * @throws ConfigurationException if ColumnFamily was already loaded
      */
     public void load(CFMetaData cfm)
     {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d41d5f6d/src/java/org/apache/cassandra/db/DefsTable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DefsTable.java b/src/java/org/apache/cassandra/db/DefsTable.java
index e43ce8a..3deac35 100644
--- a/src/java/org/apache/cassandra/db/DefsTable.java
+++ b/src/java/org/apache/cassandra/db/DefsTable.java
@@ -127,8 +127,8 @@ public class DefsTable
     public static final String OLD_MIGRATIONS_CF = "Migrations";
     public static final String OLD_SCHEMA_CF = "Schema";
 
-    /* dumps current keyspace definitions to storage */
-    public static synchronized void dumpToStorage(Collection<KSMetaData> keyspaces)
+    /* saves keyspace definitions to system schema columnfamilies */
+    public static synchronized void save(Collection<KSMetaData> keyspaces)
     {
         long timestamp = System.currentTimeMillis();
 
@@ -289,7 +289,7 @@ public class DefsTable
             }
 
             // store deserialized keyspaces into new place
-            dumpToStorage(keyspaces);
+            save(keyspaces);
 
             logger.info("Truncating deprecated system column families (migrations, schema)...");
             dropColumnFamily(Table.SYSTEM_KS, OLD_MIGRATIONS_CF);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d41d5f6d/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 8c91e10..ead325f 100644
--- a/src/java/org/apache/cassandra/db/SystemTable.java
+++ b/src/java/org/apache/cassandra/db/SystemTable.java
@@ -29,6 +29,8 @@ import com.google.common.collect.Multimap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.cassandra.config.KSMetaData;
+import org.apache.cassandra.config.Schema;
 import org.apache.cassandra.exceptions.ConfigurationException;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.cql3.QueryProcessor;
@@ -103,6 +105,22 @@ public class SystemTable
         {
             throw new RuntimeException(e);
         }
+
+        // add entries to system schema columnfamilies for the hardcoded system definitions
+        for (String ksname : Schema.systemKeyspaceNames)
+        {
+            KSMetaData ksmd = Schema.instance.getKSMetaData(ksname);
+
+            // delete old, possibly obsolete entries in schema columnfamilies
+            for (String cfname : Arrays.asList(SystemTable.SCHEMA_KEYSPACES_CF, SystemTable.SCHEMA_COLUMNFAMILIES_CF, SystemTable.SCHEMA_COLUMNS_CF))
+            {
+                String req = String.format("DELETE FROM system.%s WHERE keyspace_name = '%s'", cfname, ksmd.name);
+                processInternal(req);
+            }
+
+            // (+1 to timestamp to make sure we don't get shadowed by the tombstones we just added)
+            ksmd.toSchema(FBUtilities.timestampMicros() + 1).apply();
+        }
     }
 
     private static void setupVersion()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d41d5f6d/src/java/org/apache/cassandra/tools/SSTableExport.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/SSTableExport.java b/src/java/org/apache/cassandra/tools/SSTableExport.java
index 260331d..fe7d6c0 100644
--- a/src/java/org/apache/cassandra/tools/SSTableExport.java
+++ b/src/java/org/apache/cassandra/tools/SSTableExport.java
@@ -501,12 +501,6 @@ public class SSTableExport
         String ssTableFileName = new File(cmd.getArgs()[0]).getAbsolutePath();
 
         DatabaseDescriptor.loadSchemas();
-        if (Schema.instance.getNonSystemTables().size() < 1)
-        {
-            String msg = "no non-system tables are defined";
-            System.err.println(msg);
-            throw new ConfigurationException(msg);
-        }
         Descriptor descriptor = Descriptor.fromFilename(ssTableFileName);
         if (Schema.instance.getCFMetaData(descriptor) == null)
         {