Author: gdusbabek
Date: Fri May 21 18:39:19 2010
New Revision: 947121
URL: http://svn.apache.org/viewvc?rev=947121&view=rev
Log:
add easy reverse lookup from id cf. Patch by Stu Hood, reviewed by Gary
Dusbabek. CASSANDRA-956
Modified:
cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Fri
May 21 18:39:19 2010
@@ -38,6 +38,8 @@ import org.apache.cassandra.db.ColumnFam
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.utils.Pair;
+import com.google.common.collect.*;
+
public final class CFMetaData
{
public final static double DEFAULT_READ_REPAIR_CHANCE = 1.0;
@@ -50,29 +52,43 @@ public final class CFMetaData
private static final Map<Integer, String> currentCfNames = new
HashMap<Integer, String>();
- private static final Map<Pair<String, String>, Integer> cfIdMap = new
HashMap<Pair<String, String>, Integer>();
+ private static final BiMap<Pair<String, String>, Integer> cfIdMap =
HashBiMap.<Pair<String, String>, Integer>create();
public static final CFMetaData StatusCf = new
CFMetaData(Table.SYSTEM_TABLE, SystemTable.STATUS_CF,
ColumnFamilyType.Standard, new UTF8Type(), null, "persistent metadata for the
local node", 0, false, 0.01, 0);
public static final CFMetaData HintsCf = new
CFMetaData(Table.SYSTEM_TABLE, HintedHandOffManager.HINTS_CF,
ColumnFamilyType.Super, new UTF8Type(), new BytesType(), "hinted handoff data",
0, false, 0.01, 1);
public static final CFMetaData MigrationsCf = new
CFMetaData(Table.SYSTEM_TABLE, Migration.MIGRATIONS_CF,
ColumnFamilyType.Standard, new TimeUUIDType(), null, "individual schema
mutations", 0, false, 2);
public static final CFMetaData SchemaCf = new
CFMetaData(Table.SYSTEM_TABLE, Migration.SCHEMA_CF, ColumnFamilyType.Standard,
new UTF8Type(), null, "current state of the schema", 0, false, 3);
- public static final Map<Pair<String, String>, Integer> getCfIdMap()
+ /**
+ * @return An immutable mapping of (ksname,cfname) to id.
+ */
+ public static final Map<Pair<String, String>, Integer> getCfToIdMap()
+ {
+ return Collections.unmodifiableMap(cfIdMap);
+ }
+
+ /**
+ * @return An immutable mapping of id to (ksname,cfname).
+ */
+ public static final Map<Integer, Pair<String, String>> getIdToCfMap()
{
- return Collections.unmodifiableMap(cfIdMap);
+ return Collections.unmodifiableMap(cfIdMap.inverse());
}
- public static final String getCurrentName(int id)
+ /**
+ * @return The (ksname,cfname) pair for the given id, or null if it has
been dropped.
+ */
+ public static final Pair<String,String> getCF(int id)
{
- return currentCfNames.get(id);
+ return cfIdMap.inverse().get(Integer.valueOf(id));
}
- public static final int getId(String table, String cfName)
+ /**
+ * @return The id for the given (ksname,cfname) pair, or null if it has
been dropped.
+ */
+ public static final Integer getId(String table, String cfName)
{
- Integer id = cfIdMap.get(new Pair<String, String>(table, cfName));
- if (id == null)
- throw new IllegalArgumentException(String.format("Illegal table/cf
pair (%s.%s)", table, cfName));
- return id;
+ return cfIdMap.get(new Pair<String, String>(table, cfName));
}
// this gets called after initialization to make sure that id generation
happens properly.
Modified:
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
---
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
(original)
+++
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
Fri May 21 18:39:19 2010
@@ -32,6 +32,7 @@ import org.apache.cassandra.locator.Abst
import org.apache.cassandra.io.util.FileUtils;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.FBUtilities;
+import org.apache.cassandra.utils.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.locator.IEndpointSnitch;
@@ -655,6 +656,14 @@ public class DatabaseDescriptor
return ksm.cfMetaData().get(cfName);
}
+ public static CFMetaData getCFMetaData(int cfid)
+ {
+ Pair<String,String> cf = CFMetaData.getCF(cfid);
+ if (cf == null)
+ return null;
+ return getCFMetaData(cf.left, cf.right);
+ }
+
public static ColumnFamilyType getColumnFamilyType(String tableName,
String cfName)
{
assert tableName != null && cfName != null;
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java Fri May
21 18:39:19 2010
@@ -58,7 +58,9 @@ public class ColumnFamily implements ICo
ColumnFamilyType cfType =
DatabaseDescriptor.getColumnFamilyType(tableName, cfName);
AbstractType comparator = DatabaseDescriptor.getComparator(tableName,
cfName);
AbstractType subcolumnComparator =
DatabaseDescriptor.getSubComparator(tableName, cfName);
- int id = CFMetaData.getId(tableName, cfName);
+ Integer id = CFMetaData.getId(tableName, cfName);
+ if (id == null)
+ throw new RuntimeException("Cannot create ColumnFamily for
non-existant table/cf pair.");
return new ColumnFamily(cfName, cfType, comparator,
subcolumnComparator, id);
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Fri May 21
18:39:19 2010
@@ -132,7 +132,10 @@ public class Table
@Deprecated
public ColumnFamilyStore getColumnFamilyStore(String cfName)
{
- return columnFamilyStores.get(CFMetaData.getId(name, cfName));
+ Integer id = CFMetaData.getId(name, cfName);
+ if (id == null)
+ throw new IllegalArgumentException(String.format("Unknown table/cf
pair (%s.%s)", name, cfName));
+ return columnFamilyStores.get(id);
}
/**
Modified:
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
Fri May 21 18:39:19 2010
@@ -250,12 +250,9 @@ public class CommitLog
// thing based on the cfid instead.
for (ColumnFamily columnFamily : columnFamilies)
{
- // make sure to use the current name of the cf
(null means its been dropped).
- String currentName =
CFMetaData.getCurrentName(columnFamily.id());
- if (currentName == null)
+ if (CFMetaData.getCF(columnFamily.id()) == null)
+ // null means the cf has been dropped
continue;
- else if (!currentName.equals(columnFamily.name()))
- columnFamily.rename(currentName);
if (clHeader.isDirty(columnFamily.id()) &&
entryLocation >= clHeader.getPosition(columnFamily.id()))
newRm.add(columnFamily);
Modified:
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
---
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java
(original)
+++
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java
Fri May 21 18:39:19 2010
@@ -56,7 +56,7 @@ class CommitLogHeader
CommitLogHeader()
{
- this(new HashMap<Integer, Integer>(), CFMetaData.getCfIdMap().size());
+ this(new HashMap<Integer, Integer>(),
CFMetaData.getCfToIdMap().size());
}
/*