cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jonathan Ellis (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-2676) Adding secondary index with and do not overwrite existing ones
Date Fri, 20 May 2011 20:03:47 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-2676?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13037050#comment-13037050
] 

Jonathan Ellis commented on CASSANDRA-2676:
-------------------------------------------

it allows adding, but you need to start with the previously defined CfDefs in the list, or
their absence will indicate that they should be removed.

it sounds like you're confusing generated code to deal with Thrift structures, with the actual
schema mutation logic.  look at how CliClient deals with this (particularly for DROP INDEX;
see CASSANDRA-2616)

> Adding secondary index with and do not overwrite existing ones
> --------------------------------------------------------------
>
>                 Key: CASSANDRA-2676
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-2676
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: API
>            Reporter: Markus Wiesenbacher
>            Priority: Minor
>
> Hi,
> I am hard working on a web client for Cassandra (about 80% reached by now), and have
a problem. I am using following function to create a new secondary index:
> public boolean insertSecondaryIndex (String keyspace, String column_family, int columnfamilyid,
String columnfamily_comparator, String column_validation_class, String column_index_name,
String column_index_field)
> 	throws Exception {
> 		if (!isClosed()) {
> 			
> 			client.set_keyspace(keyspace);
> 			
> 			CfDef cfDef = new CfDef(keyspace, column_family);
> 			cfDef.setId(columnfamilyid);
> 			cfDef.setComparator_type(columnfamily_comparator);
> 			// secondary index definition
> 			ColumnDef column_metadata = new ColumnDef();
> 			column_metadata.setIndex_name(column_index_name);
> 			column_metadata.setName(ByteBuffer.wrap(column_index_field.getBytes()));
> 			column_metadata.setValidation_class(lastPart(column_validation_class, "."));
> 			column_metadata.setIndex_type(IndexType.KEYS);
> 			cfDef.addToColumn_metadata(column_metadata);
> 			client.system_update_column_family(cfDef);
> 			
> 			return true;
> 		}
> 		
> 		return false;
> 	}
> This seems to overwrite the already existing indices. I use this to select the indexed
field names:
> public HashMap<String, String> getIndexColumns (String keyspaceName, String columnFamilyName)
> 	throws Exception {
> 		HashMap<String, String> toret = new HashMap<String,String>();
> 		
> 		if (!isClosed()) {
> 			KsDef keyspace = client.describe_keyspace(keyspaceName);
> 			List<CfDef> columnFamilies = keyspace.getCf_defs();
> 			
> 			for (CfDef columnFamily : columnFamilies) {
> 				if (columnFamily.getName().equalsIgnoreCase(columnFamilyName)) {
> 					Iterator<ColumnDef> iter = columnFamily.getColumn_metadataIterator();
> 					while (iter.hasNext()) {
> 						
> 						ColumnDef cd = iter.next();
> 						toret.put (new String(cd.getName(), encoding), "");
> 					}
> 					
> 					break;
> 				}
> 			}
> 		}
> 		
> 		return toret;
> 	}	
> Is this by design or a bug?
> Many thanks and best regards
> Wiesi ;)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message