package org.apache.cassandra.stress.settings; /* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. * */ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; public enum Command { READ(false, "standard1", "Multiple concurrent reads - the cluster must first be populated by a write test", CommandCategory.BASIC ), WRITE(true, "standard1", "insert", "Multiple concurrent writes against the cluster", CommandCategory.BASIC ), MIXED(true, null, "Interleaving of any basic commands, with configurable ratio and distribution - the cluster must first be populated by a write test", CommandCategory.MIXED ), COUNTER_WRITE(true, "counter1", "counter_add", "Multiple concurrent updates of counters.", CommandCategory.BASIC ), COUNTER_READ(false, "counter1", "counter_get", "Multiple concurrent reads of counters. The cluster must first be populated by a counterwrite test.", CommandCategory.BASIC ), USER(true, null, "Interleaving of user provided queries, with configurable ratio and distribution", CommandCategory.USER ), HELP(false, null, "-?", "Print help for a command or option", null), PRINT(false, null, "Inspect the output of a distribution definition", null), LEGACY(false, null, "Legacy support mode", null), VERSION(false, null, "Print the version of cassandra stress", null) ; private static final Map<String, Command> LOOKUP; static { final Map<String, Command> lookup = new HashMap<>(); for (Command cmd : values()) { for (String name : cmd.names) lookup.put(name, cmd); } LOOKUP = lookup; } public static Command get(String command) { return LOOKUP.get(command.toLowerCase()); } public final boolean updates; public final CommandCategory category; public final List<String> names; public final String description; public final String table; Command(boolean updates, String table, String description, CommandCategory category) { this(updates, table, null, description, category); } Command(boolean updates, String table, String extra, String description, CommandCategory category) { this.table = table; this.updates = updates; this.category = category; List<String> names = new ArrayList<>(); names.add(this.toString().toLowerCase()); names.add(this.toString().replaceAll("_", "").toLowerCase()); if (extra != null) { names.add(extra.toLowerCase()); names.add(extra.replaceAll("_", "").toLowerCase()); } this.names = ImmutableList.copyOf(names); this.description = description; } public void printHelp() { helpPrinter().run(); } public final Runnable helpPrinter() { switch (this) { case PRINT: return SettingsMisc.printHelpPrinter(); case HELP: return SettingsMisc.helpHelpPrinter(); case LEGACY: return Legacy.helpPrinter(); } switch (category) { case USER: return SettingsCommandUser.helpPrinter(); case BASIC: return SettingsCommandPreDefined.helpPrinter(this); case MIXED: return SettingsCommandPreDefinedMixed.helpPrinter(); } throw new AssertionError(); } }