Author: jbellis
Date: Mon Nov 15 19:23:04 2010
New Revision: 1035418
URL: http://svn.apache.org/viewvc?rev=1035418&view=rev
Log:
fix cli list + "assume CF keys as uuid."
patch by jbellis
Modified:
cassandra/branches/cassandra-0.7/conf/cassandra.yaml
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java
Modified: cassandra/branches/cassandra-0.7/conf/cassandra.yaml
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/conf/cassandra.yaml?rev=1035418&r1=1035417&r2=1035418&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/conf/cassandra.yaml (original)
+++ cassandra/branches/cassandra-0.7/conf/cassandra.yaml Mon Nov 15 19:23:04
2010
@@ -272,7 +272,7 @@ index_interval: 128
# unusual circumstances you will have one Keyspace per application.
#
# Keyspace required parameters:
-# - name: name of the keyspace; "system" is
+# - name: name of the keyspace; "system" and "definitions" are
# reserved for Cassandra Internals.
# - replica_placement_strategy: the class that determines how replicas
# are distributed among nodes. Contains both the class as well as
@@ -363,55 +363,101 @@ index_interval: 128
# before the memtable is flushed. If undefined, throughput / 64 * 0.3
# will be used.
#
-# NOTE: this keyspace definition is for demonstration purposes only.
-# Cassandra will not load these definitions during startup. See
-# http://wiki.apache.org/cassandra/FAQ#no_keyspaces for an explanation.
keyspaces:
- - name: Keyspace1
- replica_placement_strategy: org.apache.cassandra.locator.SimpleStrategy
- replication_factor: 1
- column_families:
- - name: Standard1
- compare_with: BytesType
- keys_cached: 10000
- rows_cached: 1000
- row_cache_save_period_in_seconds: 0
- key_cache_save_period_in_seconds: 3600
- memtable_flush_after_mins: 59
- memtable_throughput_in_mb: 255
- memtable_operations_in_millions: 0.29
-
- - name: Standard2
- compare_with: UTF8Type
- read_repair_chance: 0.1
- keys_cached: 100
- gc_grace_seconds: 0
- min_compaction_threshold: 5
- max_compaction_threshold: 31
-
- - name: StandardByUUID1
- compare_with: TimeUUIDType
-
- - name: Super1
- column_type: Super
- compare_with: BytesType
- compare_subcolumns_with: BytesType
-
- - name: Super2
- column_type: Super
- compare_subcolumns_with: UTF8Type
- rows_cached: 10000
- keys_cached: 50
- comment: 'A column family with supercolumns, whose column and
subcolumn names are UTF8 strings'
-
- - name: Super3
- column_type: Super
- compare_with: LongType
- comment: 'A column family with supercolumns, whose column names are
Longs (8 bytes)'
-
- - name: Indexed1
- default_validation_class: LongType
- column_metadata:
- - name: birthdate
- validator_class: LongType
- index_type: KEYS
+- column_families:
+ - column_metadata:
+ - !!org.apache.cassandra.config.RawColumnDefinition
+ name: password
+ validator_class: org.apache.cassandra.db.marshal.UTF8Type
+ column_type: Standard
+ comment: ''
+ compare_with: org.apache.cassandra.db.marshal.UTF8Type
+ gc_grace_seconds: 864000
+ key_cache_save_period_in_seconds: 3600
+ keys_cached: 200000.0
+ max_compaction_threshold: 32
+ memtable_flush_after_mins: 60
+ min_compaction_threshold: 4
+ name: User
+ read_repair_chance: 1.0
+ row_cache_save_period_in_seconds: 0
+ rows_cached: 0.0
+ - column_type: Standard
+ comment: ''
+ compare_with: org.apache.cassandra.db.marshal.LongType
+ default_validation_class: org.apache.cassandra.db.marshal.LexicalUUIDType
+ gc_grace_seconds: 864000
+ key_cache_save_period_in_seconds: 3600
+ keys_cached: 200000.0
+ max_compaction_threshold: 32
+ memtable_flush_after_mins: 60
+ min_compaction_threshold: 4
+ name: Userline
+ read_repair_chance: 1.0
+ row_cache_save_period_in_seconds: 0
+ rows_cached: 0.0
+ - column_type: Standard
+ comment: ''
+ compare_with: org.apache.cassandra.db.marshal.UTF8Type
+ default_validation_class: org.apache.cassandra.db.marshal.UTF8Type
+ gc_grace_seconds: 864000
+ key_cache_save_period_in_seconds: 3600
+ keys_cached: 200000.0
+ max_compaction_threshold: 32
+ memtable_flush_after_mins: 60
+ min_compaction_threshold: 4
+ name: Followers
+ read_repair_chance: 1.0
+ row_cache_save_period_in_seconds: 0
+ rows_cached: 0.0
+ - column_metadata:
+ - !!org.apache.cassandra.config.RawColumnDefinition
+ name: body
+ validator_class: org.apache.cassandra.db.marshal.UTF8Type
+ - !!org.apache.cassandra.config.RawColumnDefinition
+ name: username
+ validator_class: org.apache.cassandra.db.marshal.UTF8Type
+ column_type: Standard
+ comment: ''
+ compare_with: org.apache.cassandra.db.marshal.UTF8Type
+ gc_grace_seconds: 864000
+ key_cache_save_period_in_seconds: 3600
+ keys_cached: 200000.0
+ max_compaction_threshold: 32
+ memtable_flush_after_mins: 60
+ min_compaction_threshold: 4
+ name: Tweet
+ read_repair_chance: 1.0
+ row_cache_save_period_in_seconds: 0
+ rows_cached: 0.0
+ - column_type: Standard
+ comment: ''
+ compare_with: org.apache.cassandra.db.marshal.UTF8Type
+ default_validation_class: org.apache.cassandra.db.marshal.UTF8Type
+ gc_grace_seconds: 864000
+ key_cache_save_period_in_seconds: 3600
+ keys_cached: 200000.0
+ max_compaction_threshold: 32
+ memtable_flush_after_mins: 60
+ min_compaction_threshold: 4
+ name: Friends
+ read_repair_chance: 1.0
+ row_cache_save_period_in_seconds: 0
+ rows_cached: 0.0
+ - column_type: Standard
+ comment: ''
+ compare_with: org.apache.cassandra.db.marshal.LongType
+ default_validation_class: org.apache.cassandra.db.marshal.LexicalUUIDType
+ gc_grace_seconds: 864000
+ key_cache_save_period_in_seconds: 3600
+ keys_cached: 200000.0
+ max_compaction_threshold: 32
+ memtable_flush_after_mins: 60
+ min_compaction_threshold: 4
+ name: Timeline
+ read_repair_chance: 1.0
+ row_cache_save_period_in_seconds: 0
+ rows_cached: 0.0
+ name: Twissjava
+ replica_placement_strategy: org.apache.cassandra.locator.SimpleStrategy
+ replication_factor: 1
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java?rev=1035418&r1=1035417&r2=1035418&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
Mon Nov 15 19:23:04 2010
@@ -904,8 +904,8 @@ public class CliClient extends CliUserHe
// extract column family
String columnFamily = statement.getChild(0).getText();
- String startKey = "";
- String endKey = "";
+ String rawStartKey = "";
+ String rawEndKey = "";
int limitCount = Integer.MAX_VALUE; // will reset to default later if
it's not specified
// optional arguments: key range and limit
@@ -916,9 +916,9 @@ public class CliClient extends CliUserHe
{
if (child.getChildCount() > 0)
{
- startKey =
CliUtils.unescapeSQLString(child.getChild(0).getText());
+ rawStartKey =
CliUtils.unescapeSQLString(child.getChild(0).getText());
if (child.getChildCount() > 1)
- endKey =
CliUtils.unescapeSQLString(child.getChild(1).getText());
+ rawEndKey =
CliUtils.unescapeSQLString(child.getChild(1).getText());
}
}
else
@@ -955,8 +955,9 @@ public class CliClient extends CliUserHe
// set the key range
KeyRange range = new KeyRange(limitCount);
AbstractType keyComparator = this.cfKeysComparators.get(columnFamily);
- range.setStart_key(getBytesAccordingToType(startKey, keyComparator))
- .setEnd_key(getBytesAccordingToType(endKey, keyComparator));
+ ByteBuffer startKey = rawStartKey.isEmpty() ?
FBUtilities.EMPTY_BYTE_BUFFER : getBytesAccordingToType(rawStartKey,
keyComparator);
+ ByteBuffer endKey = rawEndKey.isEmpty() ?
FBUtilities.EMPTY_BYTE_BUFFER : getBytesAccordingToType(rawEndKey,
keyComparator);
+ range.setStart_key(startKey).setEnd_key(endKey);
ColumnParent columnParent = new ColumnParent(columnFamily);
List<KeySlice> keySlices = thriftClient.get_range_slices(columnParent,
predicate, range, ConsistencyLevel.ONE);
@@ -1424,6 +1425,12 @@ public class CliClient extends CliUserHe
*/
private ByteBuffer getBytesAccordingToType(String object, AbstractType
comparator)
{
+ // TODO there is tension here between using this function to generate
default values,
+ // and using it to parse input. For instance, normally we want to
convert empty string
+ // to empty byte array for any type -- all types special case empty
byte[] to mean
+ // "minimum value" -- but we also want timeuuid() to create a valid
uuid for us.
+ // For now, this function takes the create-valid-values approach, and
we leave
+ // other use cases to special case "" -> byte[0] before calling this.
if (comparator instanceof LongType)
{
long longType;
Modified:
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java?rev=1035418&r1=1035417&r2=1035418&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java
(original)
+++
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java
Mon Nov 15 19:23:04 2010
@@ -125,7 +125,7 @@ public class CliTest extends CleanupHelp
CliMain.processStatement(statement);
String result = outStream.toString();
// System.out.println("Result:\n" + result);
- assertEquals("", errStream.toString());
+ assertEquals(errStream.toString() + " processing " + statement,
"", errStream.toString());
if (statement.startsWith("drop ") || statement.startsWith("create
") || statement.startsWith("update "))
{
assertTrue(result.matches("(.{8})-(.{4})-(.{4})-(.{4})-(.{12})\n"));