Author: gdusbabek
Date: Thu Mar  4 20:17:20 2010
New Revision: 919156

URL: http://svn.apache.org/viewvc?rev=919156&view=rev
Log:
make KSMetaData immutable

Modified:
    
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
    
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
    
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java
    incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java

Modified: 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
URL: 
http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java?rev=919156&r1=919155&r2=919156&view=diff
==============================================================================
--- 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java 
(original)
+++ 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java 
Thu Mar  4 20:17:20 2010
@@ -104,7 +104,7 @@
         }
         catch (Exception ex)
         {
-
+            throw new IOException(ex);
         }
         String comment = din.readBoolean() ? din.readUTF() : null;
         double rowCacheSize = din.readDouble();

Modified: 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: 
http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=919156&r1=919155&r2=919156&view=diff
==============================================================================
--- 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
 (original)
+++ 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
 Thu Mar  4 20:17:20 2010
@@ -460,30 +460,35 @@
                 throw new ConfigurationException("No keyspaces configured");
  
             // Hardcoded system tables
-            KSMetaData systemMeta = new KSMetaData(Table.SYSTEM_TABLE, null, 
-1, null);
+            final CFMetaData[] systemCfDefs = new CFMetaData[]
+            {
+                new CFMetaData(Table.SYSTEM_TABLE,
+                               SystemTable.STATUS_CF,
+                               "Standard",
+                               new UTF8Type(),
+                               null,
+                               "persistent metadata for the local node",
+                               0,
+                               0.01),
+                new CFMetaData(Table.SYSTEM_TABLE,
+                               HintedHandOffManager.HINTS_CF,
+                               "Super",
+                               new UTF8Type(),
+                               new BytesType(),
+                               "hinted handoff data",
+                               0,
+                               0.01)
+            };
+            KSMetaData systemMeta = new KSMetaData(Table.SYSTEM_TABLE, null, 
-1, null, systemCfDefs);
             tables.put(Table.SYSTEM_TABLE, systemMeta);
-            systemMeta.cfMetaData.put(SystemTable.STATUS_CF, new 
CFMetaData(Table.SYSTEM_TABLE,
-                                                                            
SystemTable.STATUS_CF,
-                                                                            
"Standard",
-                                                                            
new UTF8Type(),
-                                                                            
null,
-                                                                            
"persistent metadata for the local node",
-                                                                            
0.0,
-                                                                            
0.01));
-
-            systemMeta.cfMetaData.put(HintedHandOffManager.HINTS_CF, new 
CFMetaData(Table.SYSTEM_TABLE,
-                                                                               
     HintedHandOffManager.HINTS_CF,
-                                                                               
     "Super",
-                                                                               
     new UTF8Type(),
-                                                                               
     new BytesType(),
-                                                                               
     "hinted handoff data",
-                                                                               
     0.0,
-                                                                               
     0.01));
 
             // todo: fill in repStrat and epSnitch when this table is set to 
replicate.
-            KSMetaData ksDefs = new KSMetaData(Table.DEFINITIONS, null, -1, 
null);
-            ksDefs.cfMetaData.put(DefsTable.MIGRATIONS_CF, new 
CFMetaData(ksDefs.name, DefsTable.MIGRATIONS_CF, "Standard", new 
TimeUUIDType(), null, "individual schema mutations", 0, 0));
-            ksDefs.cfMetaData.put(DefsTable.SCHEMA_CF, new 
CFMetaData(ksDefs.name, DefsTable.SCHEMA_CF, "Standard", new UTF8Type(), null, 
"current state of the schema", 0, 0));
+            CFMetaData[] definitionCfDefs = new CFMetaData[]
+            {
+                new CFMetaData(Table.DEFINITIONS, DefsTable.MIGRATIONS_CF, 
"Standard", new TimeUUIDType(), null, "individual schema mutations", 0, 0),
+                new CFMetaData(Table.DEFINITIONS, DefsTable.SCHEMA_CF, 
"Standard", new UTF8Type(), null, "current state of the schema", 0, 0)
+            };
+            KSMetaData ksDefs = new KSMetaData(Table.DEFINITIONS, null, -1, 
null, definitionCfDefs);
             tables.put(Table.DEFINITIONS, ksDefs);
 
             /* Load the seeds for node contact points */
@@ -618,11 +623,9 @@
                 String xqlTable = "/Storage/Keyspaces/keyspa...@name='" + 
ksName + "']/";
                 NodeList columnFamilies = 
xmlUtils.getRequestedNodeList(xqlTable + "ColumnFamily");
 
-                KSMetaData meta = new KSMetaData(ksName, repStratClass, 
repFact, epSnitch);
-
                 //NodeList columnFamilies = 
xmlUtils.getRequestedNodeList(table, "ColumnFamily");
                 int size2 = columnFamilies.getLength();
-
+                CFMetaData[] cfDefs = new CFMetaData[size2];
                 for ( int j = 0; j < size2; ++j )
                 {
                     Node columnFamily = columnFamilies.item(j);
@@ -682,9 +685,10 @@
                     String comment = xmlUtils.getNodeValue(xqlCF + "Comment");
 
                     // insert it into the table dictionary.
-                    meta.cfMetaData.put(cfName, new CFMetaData(tableName, 
cfName, columnType, comparator, subcolumnComparator, comment, rowCacheSize, 
keyCacheSize));
+                    cfDefs[j] = new CFMetaData(tableName, cfName, columnType, 
comparator, subcolumnComparator, comment, rowCacheSize, keyCacheSize);
                 }
 
+                KSMetaData meta = new KSMetaData(ksName, repStratClass, 
repFact, epSnitch, cfDefs);
                 tables.put(meta.name, meta);
             }
         }
@@ -832,7 +836,7 @@
             {
                 tmetadata = Table.TableMetadata.instance(table);
                 /* Column families associated with this table */
-                Map<String, CFMetaData> columnFamilies = 
tables.get(table).cfMetaData;
+                Map<String, CFMetaData> columnFamilies = 
tables.get(table).cfMetaData();
 
                 for (String columnFamily : columnFamilies.keySet())
                 {
@@ -916,7 +920,7 @@
         assert tableName != null;
         KSMetaData ksm = tables.get(tableName);
         assert ksm != null;
-        return Collections.unmodifiableMap(ksm.cfMetaData);
+        return ksm.cfMetaData();
     }
 
     /*
@@ -930,7 +934,7 @@
         KSMetaData ksm = tables.get(tableName);
         if (ksm == null)
             return null;
-        return ksm.cfMetaData.get(cfName);
+        return ksm.cfMetaData().get(cfName);
     }
     
     public static String getColumnType(String tableName, String cfName)

Modified: 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java
URL: 
http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java?rev=919156&r1=919155&r2=919156&view=diff
==============================================================================
--- 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java 
(original)
+++ 
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java 
Thu Mar  4 20:17:20 2010
@@ -27,6 +27,7 @@
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -36,14 +37,18 @@
     public final Class<? extends AbstractReplicationStrategy> repStratClass;
     public final int replicationFactor;
     public final IEndPointSnitch epSnitch;
-    public final Map<String, CFMetaData> cfMetaData = new HashMap<String, 
CFMetaData>();
+    private final Map<String, CFMetaData> cfMetaData;
 
-    KSMetaData(String name, Class<? extends AbstractReplicationStrategy> 
repStratClass, int replicationFactor, IEndPointSnitch epSnitch)
+    KSMetaData(String name, Class<? extends AbstractReplicationStrategy> 
repStratClass, int replicationFactor, IEndPointSnitch epSnitch, CFMetaData... 
cfDefs)
     {
         this.name = name;
         this.repStratClass = repStratClass;
         this.replicationFactor = replicationFactor;
         this.epSnitch = epSnitch;
+        Map<String, CFMetaData> cfmap = new HashMap<String, CFMetaData>();
+        for (CFMetaData cfm : cfDefs)
+            cfmap.put(cfm.cfName, cfm);
+        this.cfMetaData = Collections.<String, 
CFMetaData>unmodifiableMap(cfmap);
     }
     
     public boolean equals(Object obj)
@@ -73,6 +78,11 @@
         else
             return 
a.epSnitch.getClass().getName().equals(b.epSnitch.getClass().getName());
     }
+
+    public Map<String, CFMetaData> cfMetaData()
+    {
+        return cfMetaData;
+    }
     
     public static byte[] serialize(KSMetaData ksm) throws IOException
     {
@@ -117,20 +127,21 @@
             throw new IOException(ex);
         }
         int cfsz = din.readInt();
-        KSMetaData ksm = new KSMetaData(name, repStratClass, 
replicationFactor, epSnitch);
+        CFMetaData[] cfMetaData = new CFMetaData[cfsz];
         for (int i = 0; i < cfsz; i++)
         {
             try
             {
-                CFMetaData cfm = CFMetaData.deserialize(din);
-                ksm.cfMetaData.put(cfm.cfName, cfm);
+                cfMetaData[i] = CFMetaData.deserialize(din);
             }
             catch (IOException ex)
             {
-                System.err.println(ksm.name);
+                System.err.println(name);
                 throw ex;
             }
         }
+
+        KSMetaData ksm = new KSMetaData(name, repStratClass, 
replicationFactor, epSnitch, cfMetaData);
         return ksm;
     }
 }

Modified: 
incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java?rev=919156&r1=919155&r2=919156&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java 
(original)
+++ incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java 
Thu Mar  4 20:17:20 2010
@@ -59,44 +59,46 @@
             assert defined.equals(loaded);
         }
 
+        // Uncomment when updates are supported.
         // make a change and compare.
-        KSMetaData loadedKs = defs.iterator().next();
-        KSMetaData changed = 
DatabaseDescriptor.getTableDefinition(loadedKs.name);
-        changed.cfMetaData.put("newly defined cf", new CFMetaData(changed.name,
-                                                                  "newly 
defined cf",
-                                                                  "Standard",
-                                                                  new 
TimeUUIDType(),
-                                                                  null,
-                                                                  "this is to 
test a newly added table",
-                                                                  0.2d,
-                                                                  0.3d));
-        assert !changed.equals(loadedKs);
-
-        UUID second = UUIDGen.makeType1UUID("01:23:45:ab:cd:ef");
-        DefsTable.dumpToStorage(second);
-        defs = new ArrayList<KSMetaData>(DefsTable.loadFromStorage(second));
-
-        // defs should equal what is in DD.
-        assert defs.size() > 0;
-        assert defs.size() == DatabaseDescriptor.getNonSystemTables().size();
-        for (KSMetaData loaded : defs)
-        {
-            KSMetaData defined = 
DatabaseDescriptor.getTableDefinition(loaded.name);
-            assert defined.equals(loaded);
-        }
-
-        // should be the same *except* for loadedKs.
-        List<KSMetaData> originals = new 
ArrayList<KSMetaData>(DefsTable.loadFromStorage(first));
-        assert originals.size() == defs.size();
-        for (int i = 0; i < defs.size(); i++)
-        {
-            KSMetaData a = originals.get(i);
-            KSMetaData b = defs.get(i);
-            if (a.name.equals(changed.name))
-                assert !a.equals(b);
-            else
-                assert a.equals(b);
-        }
+//        KSMetaData loadedKs = defs.iterator().next();
+//        KSMetaData changed = 
DatabaseDescriptor.getTableDefinition(loadedKs.name);
+//
+//        changed.cfMetaData.put("newly defined cf", new 
CFMetaData(changed.name,
+//                                                                  "newly 
defined cf",
+//                                                                  "Standard",
+//                                                                  new 
TimeUUIDType(),
+//                                                                  null,
+//                                                                  "this is 
to test a newly added table",
+//                                                                  0.2d,
+//                                                                  0.3d));
+//        assert !changed.equals(loadedKs);
+//
+//        UUID second = UUIDGen.makeType1UUID("01:23:45:ab:cd:ef");
+//        DefsTable.dumpToStorage(second);
+//        defs = new ArrayList<KSMetaData>(DefsTable.loadFromStorage(second));
+//
+//        // defs should equal what is in DD.
+//        assert defs.size() > 0;
+//        assert defs.size() == DatabaseDescriptor.getNonSystemTables().size();
+//        for (KSMetaData loaded : defs)
+//        {
+//            KSMetaData defined = 
DatabaseDescriptor.getTableDefinition(loaded.name);
+//            assert defined.equals(loaded);
+//        }
+//
+//        // should be the same *except* for loadedKs.
+//        List<KSMetaData> originals = new 
ArrayList<KSMetaData>(DefsTable.loadFromStorage(first));
+//        assert originals.size() == defs.size();
+//        for (int i = 0; i < defs.size(); i++)
+//        {
+//            KSMetaData a = originals.get(i);
+//            KSMetaData b = defs.get(i);
+//            if (a.name.equals(changed.name))
+//                assert !a.equals(b);
+//            else
+//                assert a.equals(b);
+//        }
     }
 
     


Reply via email to