com.eucalyptus.cassandra.CassandraCluster.java Source code

Java tutorial

Introduction

Here is the source code for com.eucalyptus.cassandra.CassandraCluster.java

Source

/*************************************************************************
 * (c) Copyright 2017 Hewlett Packard Enterprise Development Company LP
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see http://www.gnu.org/licenses/.
 ************************************************************************/
package com.eucalyptus.cassandra;

import java.util.Set;
import java.util.stream.Collectors;
import com.eucalyptus.bootstrap.Databases;
import com.eucalyptus.bootstrap.Hosts;
import com.eucalyptus.bootstrap.SystemIds;
import com.eucalyptus.cassandra.common.Cassandra;
import com.eucalyptus.component.Component;
import com.eucalyptus.component.Components;
import com.eucalyptus.component.ServiceConfiguration;
import com.eucalyptus.component.Topology;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;

/**
 *
 */
public class CassandraCluster {

    /**
     * We can start if we are the first seed, or if the first seed is already up.
     */
    public static boolean canStart() {
        boolean canStart = false;
        if (Hosts.hasCoordinator() && !Databases.isVolatile()) {
            final Set<ServiceConfiguration> configurations = seedOrderedConfigurations();
            if (!configurations.isEmpty()) {
                final ServiceConfiguration configuration = Iterables.get(configurations, 0, null);
                if (configuration != null && configuration.isHostLocal()) {
                    canStart = true;
                } else if (configuration != null && Component.State.ENABLED.apply(configuration)
                        && Topology.isEnabled(Cassandra.class)) {
                    canStart = true; //TODO:STEVE: should be one node at a time?
                }
            }
        }
        return canStart;
    }

    /**
     * Get the name for the eucalyptus cassandra cluster datacenter.
     */
    public static String datacenter() {
        return "eucalyptus";
    }

    /**
     * Get the name for the eucalyptus cassandra cluster rack.
     */
    public static String rack() {
        return Components.lookup(Cassandra.class).getLocalServiceConfiguration().getPartition();
    }

    /**
     * Get the name for the eucalyptus cassandra cluster.
     */
    public static String name() {
        return SystemIds.createShortCloudUniqueName("cassandra");
    }

    /**
     * Should a local cassandra node auto bootstrap when starting
     */
    public static boolean autoBootstrap() {
        // auto bootstrap unless we are the first up in the cluster and have no data
        return Topology.isEnabled(Cassandra.class) || !CassandraDirectory.DATA.isEmpty();
    }

    /**
     * Get the ordered seed list
     */
    public static Set<String> seeds() {
        return seedOrderedConfigurations().stream().map(ServiceConfiguration::getHostName)
                .collect(Collectors.toCollection(Sets::newLinkedHashSet));
    }

    /**
     * Get the ordered seed list
     */
    private static Set<ServiceConfiguration> seedOrderedConfigurations() {
        return Cassandra.sortedServiceConfigurations();
    }
}