/** * 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. */ package org.apache.hadoop.fs.slive; import org.apache.commons.cli.Option; /** * Class which extends the basic option object and adds in the configuration id * and a default value so a central place can be used for retrieval of these as * needed */ class ConfigOption<T> extends Option { private static final long serialVersionUID = 7218954906367671150L; // config starts with this prefix private static final String SLIVE_PREFIX = "slive"; // command line options and descriptions and config option name static final ConfigOption<Integer> MAPS = new ConfigOption<Integer>( "maps", true, "Number of maps", SLIVE_PREFIX + ".maps", 10); static final ConfigOption<Integer> REDUCES = new ConfigOption<Integer>( "reduces", true, "Number of reduces", SLIVE_PREFIX + ".reduces", 1); static final ConfigOption<Integer> OPS = new ConfigOption<Integer>( "ops", true, "Max number of operations per map", SLIVE_PREFIX + ".map.ops", 1000); static final ConfigOption<Integer> DURATION = new ConfigOption<Integer>( "duration", true, "Duration of a map task in seconds (MAX_INT for no limit)", SLIVE_PREFIX + ".duration", Integer.MAX_VALUE); static final ConfigOption<Boolean> EXIT_ON_ERROR = new ConfigOption<Boolean>( "exitOnError", false, "Exit on first error", SLIVE_PREFIX + ".exit.on.error", false); static final ConfigOption<Integer> FILES = new ConfigOption<Integer>( "files", true, "Max total number of files", SLIVE_PREFIX + ".total.files", 10); static final ConfigOption<Integer> DIR_SIZE = new ConfigOption<Integer>( "dirSize", true, "Max files per directory", SLIVE_PREFIX + ".dir.size", 32); static final ConfigOption<String> BASE_DIR = new ConfigOption<String>( "baseDir", true, "Base directory path", SLIVE_PREFIX + ".base.dir", "/test/slive"); static final ConfigOption<String> RESULT_FILE = new ConfigOption<String>( "resFile", true, "Result file name", SLIVE_PREFIX + ".result.file", "part-0000"); static final ConfigOption<Short> REPLICATION_AM = new ConfigOption<Short>( "replication", true, "Min,max value for replication amount", SLIVE_PREFIX + ".file.replication", (short) 3); static final ConfigOption<Long> BLOCK_SIZE = new ConfigOption<Long>( "blockSize", true, "Min,max for dfs file block size", SLIVE_PREFIX + ".block.size", 64L * Constants.MEGABYTES); static final ConfigOption<Long> READ_SIZE = new ConfigOption<Long>( "readSize", true, "Min,max for size to read (min=max=MAX_LONG=read entire file)", SLIVE_PREFIX + ".op.read.size", null); static final ConfigOption<Long> WRITE_SIZE = new ConfigOption<Long>( "writeSize", true, "Min,max for size to write (min=max=MAX_LONG=blocksize)", SLIVE_PREFIX + ".op.write.size", null); static final ConfigOption<Long> SLEEP_TIME = new ConfigOption<Long>( "sleep", true, "Min,max for millisecond of random sleep to perform (between operations)", SLIVE_PREFIX + ".op.sleep.range", null); static final ConfigOption<Long> APPEND_SIZE = new ConfigOption<Long>( "appendSize", true, "Min,max for size to append (min=max=MAX_LONG=blocksize)", SLIVE_PREFIX + ".op.append.size", null); static final ConfigOption<Long> RANDOM_SEED = new ConfigOption<Long>( "seed", true, "Random number seed", SLIVE_PREFIX + ".seed", null); // command line only options static final Option HELP = new Option("help", false, "Usage information"); static final Option CLEANUP = new Option("cleanup", true, "Cleanup & remove directory after reporting"); // non slive specific settings static final ConfigOption<String> QUEUE_NAME = new ConfigOption<String>( "queue", true, "Queue name", "mapred.job.queue.name", "default"); static final ConfigOption<String> PACKET_SIZE = new ConfigOption<String>( "packetSize", true, "Dfs write packet size", "dfs.write.packet.size", null); /** * Hadoop configuration property name */ private String cfgOption; /** * Default value if no value is located by other means */ private T defaultValue; ConfigOption(String cliOption, boolean hasArg, String description, String cfgOption, T def) { super(cliOption, hasArg, description); this.cfgOption = cfgOption; this.defaultValue = def; } /** * @return the configuration option name to lookup in Configuration objects * for this option */ String getCfgOption() { return cfgOption; } /** * @return the default object for this option */ T getDefault() { return defaultValue; } }