in src/java/org/apache/cassandra/db/compaction/unified/Controller.java [486:664]
public static Map<String, String> validateOptions(Map<String, String> options) throws ConfigurationException
{
options = new HashMap<>(options);
String s;
s = options.remove(SCALING_PARAMETERS_OPTION);
if (s != null)
parseScalingParameters(s);
s = options.remove(BASE_SHARD_COUNT_OPTION);
if (s != null)
{
try
{
int numShards = Integer.parseInt(s);
if (numShards <= 0)
throw new ConfigurationException(String.format("Invalid configuration, %s should be positive: %d",
BASE_SHARD_COUNT_OPTION,
numShards));
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s is not a parsable int (base10) for %s",
s,
BASE_SHARD_COUNT_OPTION), e);
}
}
// preserve the configuration for later use during min_sstable_size.
long targetSSTableSize = DEFAULT_TARGET_SSTABLE_SIZE;
s = options.remove(TARGET_SSTABLE_SIZE_OPTION);
if (s != null)
{
try
{
targetSSTableSize = FBUtilities.parseHumanReadableBytes(s);
if (targetSSTableSize < MIN_TARGET_SSTABLE_SIZE)
{
throw new ConfigurationException(String.format("%s %s is not acceptable, size must be at least %s",
TARGET_SSTABLE_SIZE_OPTION,
s,
FBUtilities.prettyPrintMemory(MIN_TARGET_SSTABLE_SIZE)));
}
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s %s is not a valid size in bytes: %s",
TARGET_SSTABLE_SIZE_OPTION,
s,
e.getMessage()),
e);
}
}
s = options.remove(FLUSH_SIZE_OVERRIDE_OPTION);
if (s != null)
{
try
{
long flushSize = FBUtilities.parseHumanReadableBytes(s);
if (flushSize < MIN_TARGET_SSTABLE_SIZE)
throw new ConfigurationException(String.format("%s %s is not acceptable, size must be at least %s",
FLUSH_SIZE_OVERRIDE_OPTION,
s,
FBUtilities.prettyPrintMemory(MIN_TARGET_SSTABLE_SIZE)));
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s %s is not a valid size in bytes: %s",
FLUSH_SIZE_OVERRIDE_OPTION,
s,
e.getMessage()),
e);
}
}
s = options.remove(MAX_SSTABLES_TO_COMPACT_OPTION);
if (s != null)
{
try
{
Integer.parseInt(s); // values less than or equal to 0 enable the default
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s is not a parsable int (base10) for %s",
s,
MAX_SSTABLES_TO_COMPACT_OPTION),
e);
}
}
s = options.remove(EXPIRED_SSTABLE_CHECK_FREQUENCY_SECONDS_OPTION);
if (s != null)
{
try
{
long expiredSSTableCheckFrequency = Long.parseLong(s);
if (expiredSSTableCheckFrequency <= 0)
throw new ConfigurationException(String.format("Invalid configuration, %s should be positive: %d",
EXPIRED_SSTABLE_CHECK_FREQUENCY_SECONDS_OPTION,
expiredSSTableCheckFrequency));
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s is not a parsable long (base10) for %s",
s,
EXPIRED_SSTABLE_CHECK_FREQUENCY_SECONDS_OPTION),
e);
}
}
validateBoolean(options, ALLOW_UNSAFE_AGGRESSIVE_SSTABLE_EXPIRATION_OPTION);
validateBoolean(options, PARALLELIZE_OUTPUT_SHARDS_OPTION);
s = options.remove(OVERLAP_INCLUSION_METHOD_OPTION);
if (s != null)
{
try
{
Overlaps.InclusionMethod.valueOf(toUpperCaseLocalized(s));
}
catch (IllegalArgumentException e)
{
throw new ConfigurationException(String.format("Invalid overlap inclusion method %s. The valid options are %s.",
s,
Arrays.toString(Overlaps.InclusionMethod.values())));
}
}
s = options.remove(MIN_SSTABLE_SIZE_OPTION);
if (s != null)
{
try
{
long sizeInBytes = FBUtilities.parseHumanReadableBytes(s);
// zero is a valid option to disable feature
if (sizeInBytes < 0)
throw new ConfigurationException(String.format("Invalid configuration, %s should be greater than or equal to 0 (zero)",
MIN_SSTABLE_SIZE_OPTION));
int limit = (int) Math.ceil(targetSSTableSize * INVERSE_SQRT_2);
if (sizeInBytes >= limit)
throw new ConfigurationException(String.format("Invalid configuration, %s (%s) should be less than the target size minimum: %s",
MIN_SSTABLE_SIZE_OPTION,
FBUtilities.prettyPrintMemory(sizeInBytes),
FBUtilities.prettyPrintMemory(limit)));
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s is not a valid size in bytes for %s",
s,
MIN_SSTABLE_SIZE_OPTION),
e);
}
}
s = options.remove(SSTABLE_GROWTH_OPTION);
if (s != null)
{
try
{
double targetSSTableGrowth = FBUtilities.parsePercent(s);
if (targetSSTableGrowth < 0 || targetSSTableGrowth > 1)
{
throw new ConfigurationException(String.format("%s %s must be between 0 and 1",
SSTABLE_GROWTH_OPTION,
s));
}
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s is not a valid number between 0 and 1: %s",
SSTABLE_GROWTH_OPTION,
e.getMessage()),
e);
}
}
return options;
}