public Map<String, Map<String, String>> getKeyspaces() { Map<String, Map<String, String>> rval = new HashMap<String, Map<String, String>>(); for (KeyspaceDefinition k : cluster.describeKeyspaces()) { if (!k.getName().equals("system")) { rval.put(keyPrefix + '/' + k.getName(), k.getStrategyOptions()); } } // TODO add empty check return rval; }
// iterate the keyspaces and query each one of them public int queryAllKeyspaces(int limit, Writer out) throws IOException { int total_rows = 0; for (KeyspaceDefinition ksDef : _cluster.describeKeyspaces()) { String keyspace = ksDef.getName(); // only keyspaces that uses as prefix our pre-defined one if (!keyspace.startsWith(Listener.DEFAULT_ERS_KEYSPACES_PREFIX) || keyspace.equals(Listener.GRAPHS_NAMES_KEYSPACE)) continue; // query this keyspace total_rows += queryEntireKeyspace(keyspace, out, limit); } return total_rows; }
public Map<String, Map<String, String>> getColumnFamilies(String keyspace) { KeyspaceDefinition keyspaceDef = cluster.describeKeyspace(keyspace.toString()); List<ColumnFamilyDefinition> cfDef = keyspaceDef.getCfDefs(); Map<String, Map<String, String>> rval = new HashMap<String, Map<String, String>>(); for (ColumnFamilyDefinition cf : cfDef) { String cfurl = keyPrefix + '/' + keyspace + '/' + cf.getName(); String comment = cf.getComment(); Map<String, String> commentMap = new HashMap<String, String>(); commentMap.put("comment", comment); rval.put(cfurl, commentMap); } return rval; }
boolean checkExist(String cfname) { List<ColumnFamilyDefinition> lcf = ksdef.getCfDefs(); Iterator<ColumnFamilyDefinition> it = lcf.iterator(); while (it.hasNext()) { ColumnFamilyDefinition cf = it.next(); if (cf.getName().equals(cfname)) return true; } return false; }
ColumnFamilyDefinition getCfdf(String cfname) { cfname = cfname.toLowerCase(); List<ColumnFamilyDefinition> lcf = ksdef.getCfDefs(); Iterator<ColumnFamilyDefinition> it = lcf.iterator(); while (it.hasNext()) { ColumnFamilyDefinition cf = it.next(); if (cf.getName().equals(cfname)) return cf; } return null; }
public Map getColumnFamily(String keyspace, String cf) throws CharacterCodingException { KeyspaceDefinition keyspaceDef = cluster.describeKeyspace(keyspace.toString()); List<ColumnFamilyDefinition> cfDef = keyspaceDef.getCfDefs(); Map rval = new HashMap(); for (ColumnFamilyDefinition cfentry : cfDef) { if (cfentry.getName().equals(cf)) { // Handle Metadata Charset charset = Charset.forName("UTF8"); // TODO add handling for other types CharsetDecoder decoder = charset.newDecoder(); List<Map<String, String>> cfmetaList = new ArrayList<Map<String, String>>(3); for (ColumnDefinition colDef : cfentry.getColumnMetadata()) { Map<String, String> cfmeta = new HashMap<String, String>(); String colName = decoder.decode(colDef.getName()).toString(); cfmeta.put("column_name", colName); cfmeta.put("validation_class", colDef.getValidationClass()); ColumnIndexType idxType = colDef.getIndexType(); if (idxType != null) { cfmeta.put("index_type", idxType.toString()); cfmeta.put("index_name", colDef.getIndexName()); } cfmetaList.add(cfmeta); } rval.put("column_metadata", cfmetaList); // rval.put("metadata", cfmeta); // Handle page link Map<String, String> link = new HashMap<String, String>(); link.put( "href", keyPrefix + '/' + keyspace + '/' + cf + "/?" + numRowsVar + "=" + defaultNumRows); rval.put("browse", link); // Handle search template // TODO check for existence of indexed column, use one as example col. Map<String, String> search = new HashMap<String, String>(); search.put("href", keyPrefix + '/' + keyspace + '/' + cf + "[email protected]"); // TODO I mean it, make the above link better. rval.put("search", search); break; } } return rval; }
/** * Create a Column family for cassandra counters in a given Cluster intance * * @param name ColumnFamily Name * @param keySpace KeySpace name * @param cluster Cluster instance * @throws CassandraDataAccessException In case of an Error accessing database or data error */ public static void createCounterColumnFamily(String name, String keySpace, Cluster cluster) throws CassandraDataAccessException { KeyspaceDefinition ksDef = cluster.describeKeyspace(keySpace); if (ksDef == null) { throw new CassandraDataAccessException( "Can't create Column family, keyspace " + keySpace + " does not exist"); } ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition(keySpace, name, ComparatorType.COUNTERTYPE); cfDef.setComparatorType(ComparatorType.UTF8TYPE); cfDef.setDefaultValidationClass(ComparatorType.COUNTERTYPE.getClassName()); cfDef.setColumnType(ColumnType.STANDARD); List<ColumnFamilyDefinition> cfDefsList = ksDef.getCfDefs(); HashSet<String> cfNames = new HashSet<String>(); for (ColumnFamilyDefinition columnFamilyDefinition : cfDefsList) { cfNames.add(columnFamilyDefinition.getName()); } if (!cfNames.contains(name)) { cluster.addColumnFamily(cfDef, true); } }
/** * Create a Column family in a Given Cluster instance * * @param name ColumnFamily Name * @param keySpace KeySpace name * @param cluster Cluster instance * @param comparatorType Comparator * @throws CassandraDataAccessException In case of an Error accessing database or data error */ public static void createColumnFamily( String name, String keySpace, Cluster cluster, String comparatorType) throws CassandraDataAccessException { KeyspaceDefinition ksDef = cluster.describeKeyspace(keySpace); if (ksDef == null) { throw new CassandraDataAccessException( "Can't create Column family, keyspace " + keySpace + " does not exist"); } ColumnFamilyDefinition cfDef = new ThriftCfDef(keySpace, /*"Queue"*/ name, ComparatorType.getByClassName(comparatorType)); List<ColumnFamilyDefinition> cfDefsList = ksDef.getCfDefs(); HashSet<String> cfNames = new HashSet<String>(); for (ColumnFamilyDefinition columnFamilyDefinition : cfDefsList) { cfNames.add(columnFamilyDefinition.getName()); } if (!cfNames.contains(name)) { cluster.addColumnFamily(cfDef, true); } }
/** * @param outputTransportMessageConfiguration - topic name to publish messages * @param message - is and Object[]{Event, EventDefinition} * @param outputTransportAdaptorConfiguration * @param tenantId */ public void publish( OutputTransportAdaptorMessageConfiguration outputTransportMessageConfiguration, Object message, OutputTransportAdaptorConfiguration outputTransportAdaptorConfiguration, int tenantId) { if (message instanceof Map) { ConcurrentHashMap<String, TransportAdaptorInfo> cassandraClusterCache = tenantedCassandraClusterCache.get(tenantId); if (null == cassandraClusterCache) { cassandraClusterCache = new ConcurrentHashMap<String, TransportAdaptorInfo>(); if (null != tenantedCassandraClusterCache.putIfAbsent(tenantId, cassandraClusterCache)) { cassandraClusterCache = tenantedCassandraClusterCache.get(tenantId); } } TransportAdaptorInfo transportAdaptorInfo = cassandraClusterCache.get(outputTransportAdaptorConfiguration.getName()); if (null == transportAdaptorInfo) { Map<String, String> properties = outputTransportAdaptorConfiguration.getOutputProperties(); Map<String, String> credentials = new HashMap<String, String>(); credentials.put( "username", properties.get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_USER_NAME)); credentials.put( "password", properties.get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_PASSWORD)); Cluster cluster = HFactory.createCluster( properties.get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_CLUSTER_NAME), new CassandraHostConfigurator( properties.get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_HOSTNAME) + ":" + properties.get( CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_PORT)), credentials); String indexAllColumnsString = properties.get( CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_INDEX_ALL_COLUMNS); boolean indexAllColumns = false; if (indexAllColumnsString != null && indexAllColumnsString.equals("true")) { indexAllColumns = true; } transportAdaptorInfo = new TransportAdaptorInfo(cluster, indexAllColumns); if (null != cassandraClusterCache.putIfAbsent( outputTransportAdaptorConfiguration.getName(), transportAdaptorInfo)) { transportAdaptorInfo = cassandraClusterCache.get(outputTransportAdaptorConfiguration.getName()); } else { log.info("Initiated Cassandra Writer " + outputTransportAdaptorConfiguration.getName()); } } String keySpaceName = outputTransportMessageConfiguration .getOutputMessageProperties() .get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_KEY_SPACE_NAME); String columnFamilyName = outputTransportMessageConfiguration .getOutputMessageProperties() .get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_COLUMN_FAMILY_NAME); MessageInfo messageInfo = transportAdaptorInfo.getMessageInfoMap().get(outputTransportMessageConfiguration); if (null == messageInfo) { Keyspace keyspace = HFactory.createKeyspace(keySpaceName, transportAdaptorInfo.getCluster()); messageInfo = new MessageInfo(keyspace); if (null != transportAdaptorInfo .getMessageInfoMap() .putIfAbsent(outputTransportMessageConfiguration, messageInfo)) { messageInfo = transportAdaptorInfo.getMessageInfoMap().get(outputTransportMessageConfiguration); } } if (transportAdaptorInfo.getCluster().describeKeyspace(keySpaceName) == null) { BasicColumnFamilyDefinition columnFamilyDefinition = new BasicColumnFamilyDefinition(); columnFamilyDefinition.setKeyspaceName(keySpaceName); columnFamilyDefinition.setName(columnFamilyName); columnFamilyDefinition.setComparatorType(ComparatorType.UTF8TYPE); columnFamilyDefinition.setDefaultValidationClass(ComparatorType.UTF8TYPE.getClassName()); columnFamilyDefinition.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName()); ColumnFamilyDefinition cfDef = new ThriftCfDef(columnFamilyDefinition); KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition( keySpaceName, "org.apache.cassandra.locator.SimpleStrategy", 1, Arrays.asList(cfDef)); transportAdaptorInfo.getCluster().addKeyspace(keyspaceDefinition); KeyspaceDefinition fromCluster = transportAdaptorInfo.getCluster().describeKeyspace(keySpaceName); messageInfo.setColumnFamilyDefinition( new BasicColumnFamilyDefinition(fromCluster.getCfDefs().get(0))); } else { KeyspaceDefinition fromCluster = transportAdaptorInfo.getCluster().describeKeyspace(keySpaceName); for (ColumnFamilyDefinition columnFamilyDefinition : fromCluster.getCfDefs()) { if (columnFamilyDefinition.getName().equals(columnFamilyName)) { messageInfo.setColumnFamilyDefinition( new BasicColumnFamilyDefinition(columnFamilyDefinition)); break; } } } Mutator<String> mutator = HFactory.createMutator(messageInfo.getKeyspace(), sser); String uuid = UUID.randomUUID().toString(); for (Map.Entry<String, Object> entry : ((Map<String, Object>) message).entrySet()) { if (transportAdaptorInfo.isIndexAllColumns() && !messageInfo.getColumnNames().contains(entry.getKey())) { BasicColumnFamilyDefinition columnFamilyDefinition = messageInfo.getColumnFamilyDefinition(); BasicColumnDefinition columnDefinition = new BasicColumnDefinition(); columnDefinition.setName(StringSerializer.get().toByteBuffer(entry.getKey())); columnDefinition.setIndexType(ColumnIndexType.KEYS); columnDefinition.setIndexName( keySpaceName + "_" + columnFamilyName + "_" + entry.getKey() + "_Index"); columnDefinition.setValidationClass(ComparatorType.UTF8TYPE.getClassName()); columnFamilyDefinition.addColumnDefinition(columnDefinition); transportAdaptorInfo .getCluster() .updateColumnFamily(new ThriftCfDef(columnFamilyDefinition)); messageInfo.getColumnNames().add(entry.getKey()); } mutator.insert( uuid, columnFamilyName, HFactory.createStringColumn(entry.getKey(), entry.getValue().toString())); } mutator.execute(); } }