package org.atlasapi.persistence; import org.atlasapi.equiv.CassandraEquivalenceSummaryStore; import org.atlasapi.persistence.content.cassandra.CassandraContentStore; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.metabroadcast.common.properties.Configurer; import com.netflix.astyanax.AstyanaxContext; import com.netflix.astyanax.Keyspace; import com.netflix.astyanax.connectionpool.NodeDiscoveryType; import com.netflix.astyanax.connectionpool.impl.ConnectionPoolConfigurationImpl; import com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor; import com.netflix.astyanax.impl.AstyanaxConfigurationImpl; import com.netflix.astyanax.thrift.ThriftFamilyFactory; /** */ @Configuration public class CassandraPersistenceModule { private final String cluster = Configurer.get("cassandra.cluster").get(); private final String keyspace = Configurer.get("cassandra.keyspace").get(); private final String seeds = Configurer.get("cassandra.seeds").get(); private final int port = Configurer.get("cassandra.port").toInt(); private final int maxConnectionsPerHost = Configurer.get("cassandra.maxConnectionsPerHost").toInt(); private final int maxBlockedThreadsPerHost = Configurer.get("cassandra.maxBlockedThreadsPerHost").toInt(); private final int connectionTimeout = Configurer.get("cassandra.connectionTimeout").toInt(); private final int requestTimeout = Configurer.get("cassandra.requestTimeout").toInt(); @Bean @Qualifier(value = "cassandra") public CassandraContentStore cassandraContentStore() { return new CassandraContentStore(astyanaxContext(), requestTimeout); } @Bean @Qualifier(value = "cassandra") public CassandraEquivalenceSummaryStore cassandraEquivalenceSummaryStore() { return new CassandraEquivalenceSummaryStore(astyanaxContext(), requestTimeout); } @Bean @Qualifier(value = "cassandra") public AstyanaxContext<Keyspace> astyanaxContext() { return new AstyanaxContext.Builder() .forCluster(cluster) .forKeyspace(keyspace) .withAstyanaxConfiguration(new AstyanaxConfigurationImpl().setDiscoveryType(NodeDiscoveryType.NONE)) .withConnectionPoolConfiguration( new ConnectionPoolConfigurationImpl(cluster) .setPort(port) .setMaxBlockedThreadsPerHost(maxBlockedThreadsPerHost) .setMaxConnsPerHost(maxConnectionsPerHost) .setConnectTimeout(connectionTimeout) .setSeeds(seeds) ) .withConnectionPoolMonitor(new CountingConnectionPoolMonitor()) .buildKeyspace(ThriftFamilyFactory.getInstance()); } }