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);
+// }
}