package com.netflix.aegisthus.util; import com.google.common.base.Preconditions; import com.netflix.Aegisthus; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.cql3.QueryProcessor; import org.apache.cassandra.cql3.statements.CreateTableStatement; import org.apache.cassandra.exceptions.RequestValidationException; import org.apache.hadoop.conf.Configuration; public class CFMetadataUtility { public static CFMetaData initializeCfMetaData(Configuration configuration) { final String cql = configuration.get(Aegisthus.Feature.CONF_CQL_SCHEMA); Preconditions.checkNotNull(cql, "Cannot proceed without CQL definition."); final CreateTableStatement statement = getCreateTableStatement(cql); try { final CFMetaData cfMetaData = statement.getCFMetaData(); cfMetaData.rebuild(); return cfMetaData; } catch (RequestValidationException e) { // Cannot proceed if an error occurs throw new RuntimeException("Error initializing CFMetadata from CQL.", e); } } private static CreateTableStatement getCreateTableStatement(String cql) { CreateTableStatement statement; try { statement = (CreateTableStatement) QueryProcessor.parseStatement(cql).prepare().statement; } catch (RequestValidationException e) { // Cannot proceed if an error occurs throw new RuntimeException("Error configuring SSTable reader. Cannot proceed", e); } return statement; } }