/* * Copyright (C) 2012-2015 DataStax Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.datastax.driver.core; import java.io.Closeable; import java.io.File; import java.net.InetSocketAddress; import java.util.Map; public interface CCMAccess extends Closeable { enum Workload {cassandra, solr, hadoop, spark, cfs, graph} // Inspection methods /** * @return The CCM cluster name. */ String getClusterName(); /** * Returns the Cassandra version of this CCM cluster. If {@link #getDSEVersion()} is non-null it is assumed * that this value is only used for representing the compatible Cassandra version for that DSE version. * <p/> * * @return The version of this CCM cluster. */ VersionNumber getCassandraVersion(); /** * Returns the DSE version of this CCM cluster if this is a DSE cluster, otherwise null. * <p/> * * @return The version of this CCM cluster. */ VersionNumber getDSEVersion(); /** * @return The config directory for this CCM cluster. */ File getCcmDir(); /** * @return The cluster directory for this CCM cluster. */ File getClusterDir(); /** * @param n the node number, starting with 1. * @return The node directory for this CCM cluster. */ File getNodeDir(int n); /** * @param n the node number, starting with 1. * @return The node config directory for this CCM cluster. */ File getNodeConfDir(int n); /** * @return The storage port for this CCM cluster. */ int getStoragePort(); /** * @return The thrift port for this CCM cluster. */ int getThriftPort(); /** * @return The binary port for this CCM cluster. */ int getBinaryPort(); /** * Signals that logs for this CCM cluster should be kept after the cluster is stopped. */ void setKeepLogs(boolean keepLogs); /** * Returns the address of the {@code nth} host in the CCM cluster (counting from 1, i.e., * {@code addressOfNode(1)} returns the address of the first node. * <p/> * In multi-DC setups, nodes are numbered in ascending order of their datacenter number. * E.g. with 2 DCs and 3 nodes in each DC, the first node in DC 2 is number 4. * * @return the address of the {@code nth} host in the cluster. */ InetSocketAddress addressOfNode(int n); // Methods altering the whole cluster /** * Starts the cluster. */ void start(); /** * Stops the cluster. */ void stop(); /** * Aggressively stops the cluster. */ void forceStop(); /** * Alias for {@link #stop()}. */ @Override void close(); /** * Removes this CCM cluster and deletes all of its files. */ void remove(); /** * Updates the config files for all nodes in the CCM cluster. */ void updateConfig(Map<String, Object> configs); /** * Updates the DSE config files for all nodes in the CCM cluster. */ void updateDSEConfig(Map<String, Object> configs); /** * Checks for errors in the logs of all nodes in the cluster. */ String checkForErrors(); // Methods altering nodes /** * Starts the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void start(int n); /** * Stops the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void stop(int n); /** * Aggressively stops the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void forceStop(int n); /** * Pauses the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void pause(int n); /** * Resumes the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void resume(int n); /** * Removes the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void remove(int n); /** * Adds the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void add(int n); /** * Adds the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void add(int dc, int n); /** * Decommissions the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void decommission(int n); /** * Updates the {@code nth} host's config file in the CCM cluster. * * @param n the node number (starting from 1). */ void updateNodeConfig(int n, String key, Object value); /** * Updates the {@code nth} host's config file in the CCM cluster. * * @param n the node number (starting from 1). */ void updateNodeConfig(int n, Map<String, Object> configs); /** * Updates the {@code nth} host's dse config file in the CCM cluster. * * @param n the node number (starting from 1). */ void updateDSENodeConfig(int n, String key, Object value); /** * Updates the {@code nth} host's dse config file in the CCM cluster. * * @param n the node number (starting from 1). */ void updateDSENodeConfig(int n, Map<String, Object> configs); /** * Sets the workload(s) for the {@code nth} host in the CCM cluster. * * @param n the node number (starting from 1). */ void setWorkload(int n, Workload... workload); // Methods blocking until nodes are up or down /** * Waits for a host to be up by pinging the TCP socket directly, without using the Java driver's API. */ void waitForUp(int node); /** * Waits for a host to be down by pinging the TCP socket directly, without using the Java driver's API. */ void waitForDown(int node); /** * @return The target protocolVersion to use when connecting to this CCM cluster. * <p/> * This should be based on the highest protocol version that both the cluster and driver support. * <p/> * For example, C* 2.0.17 should return {@link ProtocolVersion#V2} since C* supports up to V2 and the driver * supports that version. */ ProtocolVersion getProtocolVersion(); /** * @param maximumAllowed The maximum protocol version to use. * @return The target protocolVersion or maximumAllowed if {@link #getProtocolVersion} is greater. */ ProtocolVersion getProtocolVersion(ProtocolVersion maximumAllowed); }