cassandra-commits mailing list archives

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

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

Markus Wiesenbacher commented on CASSANDRA-2676:
------------------------------------------------

If I want to delete all column_metadata I would assume that I can iterate over all entries
and delete one by one.

It´s a bit unhandy now, if I want to add a secondary index after cf definition time, I have
to evaluate the existing ones and have to redefine them.

What for is CfDef.addToColumn_metadata(CfDef) if doesn´t allow a add?




> 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