All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.netflix.ndbench.plugin.cass.astyanax.CassA6XManagerImpl Maven / Gradle / Ivy

/**
 * Copyright (c) 2018 Netflix, Inc.  All rights reserved.
 */
package com.netflix.ndbench.plugin.cass.astyanax;

import javax.inject.Singleton;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.netflix.astyanax.AstyanaxContext;
import com.netflix.astyanax.Cluster;
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;

/**
 * @author vchella
 */
@Singleton
public class CassA6XManagerImpl implements CassA6XManager
{
    private static final Logger logger = LoggerFactory.getLogger(CassA6XManagerImpl.class);
    private AstyanaxContext clusterContext;
    private AstyanaxContext keyspaceContext;

    public synchronized Cluster registerCluster(String clusterName, String contactPoint, int port)
    {
        logger.info("Connected Cassandra Cluster: " + clusterName);
        if(clusterContext == null)
        {
            clusterContext = new AstyanaxContext.Builder().forCluster(clusterName)
                                                          .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
                                                                                     .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
                                                          )
                                                          .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
                                                                                           .setPort(port)
                                                                                           .setMaxConnsPerHost(1)
                                                                                           .setSeeds(contactPoint)
                                                          )
                                                          .withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
                                                          .buildCluster(ThriftFamilyFactory.getInstance());
            clusterContext.start();
        }
        logger.warn("Cluster already registered");
        return clusterContext.getClient();
    }

    public synchronized Keyspace registerKeyspace(String clusterName, String ksName, String contactPoint, int port)
    {
        logger.info("Cassandra  Cluster: " + clusterName);
        if(keyspaceContext == null)
        {
            keyspaceContext = new AstyanaxContext.Builder()
                              .forCluster(clusterName)
                              .forKeyspace(ksName)
                              .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
                                                         .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
                              )
                              .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
                                                               .setPort(port)
                                                               .setMaxConnsPerHost(1)
                                                               .setSeeds(contactPoint)
                              )
                              .withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
                              .buildKeyspace(ThriftFamilyFactory.getInstance());
            keyspaceContext.start();
        }
        logger.warn("Keyspace already registered");
        return keyspaceContext.getClient();
    }

    public void shutDown()
    {
        this.keyspaceContext.shutdown();
        this.clusterContext.shutdown();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy