merge from 2.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e805f146 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e805f146 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e805f146 Branch: refs/heads/trunk Commit: e805f1466b8589ad79bafe1f9ad16c4206525036 Parents: 56ec3c8 8bc32ba Author: Jonathan Ellis <[email protected]> Authored: Fri Aug 28 17:01:36 2015 -0500 Committer: Jonathan Ellis <[email protected]> Committed: Fri Aug 28 17:01:36 2015 -0500 ---------------------------------------------------------------------- CHANGES.txt | 3 + NEWS.txt | 6 ++ conf/cassandra.yaml | 4 +- .../cassandra/config/DatabaseDescriptor.java | 72 +++++++++++++++++++- 4 files changed, 81 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/e805f146/CHANGES.txt ---------------------------------------------------------------------- diff --cc CHANGES.txt index a2cf9c8,7aec3bc..bf40dd2 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,50 -1,11 +1,53 @@@ -2.2.1 +3.0.0-beta2 + * Fix Materialized View builder when adding multiple MVs (CASSANDRA-10156) + * Choose better poolingOptions for protocol v4 in cassandra-stress (CASSANDRA-10182) + * Fix LWW bug affecting Materialized Views (CASSANDRA-10197) + * Ensures frozen sets and maps are always sorted (CASSANDRA-10162) + * Don't deadlock when flushing CFS backed custom indexes (CASSANDRA-10181) + * Fix double flushing of secondary index tables (CASSANDRA-10180) + * Fix incorrect handling of range tombstones in thrift (CASSANDRA-10046) + * Only use batchlog when paired materialized view replica is remote (CASSANDRA-10061) + * Reuse TemporalRow when updating multiple MaterializedViews (CASSANDRA-10060) + * Validate gc_grace_seconds for batchlog writes and MVs (CASSANDRA-9917) + * Fix sstablerepairedset (CASSANDRA-10132) +Merged from 2.2: + * Fall back to 1/4 commitlog volume for commitlog_total_space on small disks + (CASSANDRA-10199) + * Fix race during construction of commit log (CASSANDRA-10049) * Fix LeveledCompactionStrategyTest (CASSANDRA-9757) * Fix broken UnbufferedDataOutputStreamPlus.writeUTF (CASSANDRA-10203) + * (cqlsh) default load-from-file encoding to utf-8 (CASSANDRA-9898) + * Avoid returning Permission.NONE when failing to query users table (CASSANDRA-10168) * (cqlsh) add CLEAR command (CASSANDRA-10086) * Support string literals as Role names for compatibility (CASSANDRA-10135) +Merged from 2.1: + * Change streaming_socket_timeout_in_ms default to 1 hour (CASSANDRA-8611) + * (cqlsh) update list of CQL keywords (CASSANDRA-9232) + + +3.0.0-beta1 + * Redesign secondary index API (CASSANDRA-9459, 7771, 9041) + * Fix throwing ReadFailure instead of ReadTimeout on range queries (CASSANDRA-10125) + * Rewrite hinted handoff (CASSANDRA-6230) + * Fix query on static compact tables (CASSANDRA-10093) + * Fix race during construction of commit log (CASSANDRA-10049) + * Add option to only purge repaired tombstones (CASSANDRA-6434) + * Change authorization handling for MVs (CASSANDRA-9927) + * Add custom JMX enabled executor for UDF sandbox (CASSANDRA-10026) + * Fix row deletion bug for Materialized Views (CASSANDRA-10014) + * Support mixed-version clusters with Cassandra 2.1 and 2.2 (CASSANDRA-9704) + * Fix multiple slices on RowSearchers (CASSANDRA-10002) + * Fix bug in merging of collections (CASSANDRA-10001) + * Optimize batchlog replay to avoid full scans (CASSANDRA-7237) + * Repair improvements when using vnodes (CASSANDRA-5220) + * Disable scripted UDFs by default (CASSANDRA-9889) + * Bytecode inspection for Java-UDFs (CASSANDRA-9890) + * Use byte to serialize MT hash length (CASSANDRA-9792) + * Replace usage of Adler32 with CRC32 (CASSANDRA-8684) + * Fix migration to new format from 2.1 SSTable (CASSANDRA-10006) + * SequentialWriter should extend BufferedDataOutputStreamPlus (CASSANDRA-9500) + * Use the same repairedAt timestamp within incremental repair session (CASSANDRA-9111) +Merged from 2.2: * Allow count(*) and count(1) to be use as normal aggregation (CASSANDRA-10114) * An NPE is thrown if the column name is unknown for an IN relation (CASSANDRA-10043) * Apply commit_failure_policy to more errors on startup (CASSANDRA-9749) http://git-wip-us.apache.org/repos/asf/cassandra/blob/e805f146/NEWS.txt ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/e805f146/conf/cassandra.yaml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/e805f146/src/java/org/apache/cassandra/config/DatabaseDescriptor.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 01455ac,b7e3eaa..ba283b4 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@@ -483,14 -487,33 +487,41 @@@ public class DatabaseDescripto conf.commitlog_directory += File.separator + "commitlog"; } + if (conf.hints_directory == null) + { + conf.hints_directory = System.getProperty("cassandra.storagedir", null); + if (conf.hints_directory == null) + throw new ConfigurationException("hints_directory is missing and -Dcassandra.storagedir is not set", false); + conf.hints_directory += File.separator + "hints"; + } + + if (conf.commitlog_total_space_in_mb == null) + { + int preferredSize = 8192; + int minSize = 0; + try + { + // use 1/4 of available space. See discussion on #10013 and #10199 + minSize = Ints.checkedCast((guessFileStore(conf.commitlog_directory).getTotalSpace() / 1048576) / 4); + } + catch (IOException e) + { + logger.debug("Error checking disk space", e); + throw new ConfigurationException(String.format("Unable to check disk space available to %s. Perhaps the Cassandra user does not have the necessary permissions", + conf.commitlog_directory), e); + } + if (minSize < preferredSize) + { + logger.warn("Small commitlog volume detected at {}; setting commitlog_total_space_in_mb to {}. You can override this in cassandra.yaml", + conf.commitlog_directory, minSize); + conf.commitlog_total_space_in_mb = minSize; + } + else + { + conf.commitlog_total_space_in_mb = preferredSize; + } + } + if (conf.saved_caches_directory == null) { conf.saved_caches_directory = System.getProperty("cassandra.storagedir", null); @@@ -511,11 -535,24 +543,26 @@@ { if (datadir.equals(conf.commitlog_directory)) throw new ConfigurationException("commitlog_directory must not be the same as any data_file_directories", false); + if (datadir.equals(conf.hints_directory)) + throw new ConfigurationException("hints_directory must not be the same as any data_file_directories", false); if (datadir.equals(conf.saved_caches_directory)) throw new ConfigurationException("saved_caches_directory must not be the same as any data_file_directories", false); + + try + { + dataFreeBytes += guessFileStore(datadir).getUnallocatedSpace(); + } + catch (IOException e) + { + logger.debug("Error checking disk space", e); + throw new ConfigurationException(String.format("Unable to check disk space available to %s. Perhaps the Cassandra user does not have the necessary permissions", + datadir), e); + } } + if (dataFreeBytes < 64L * 1024 * 1048576) // 64 GB + logger.warn("Only {} MB free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots", + dataFreeBytes / 1048576); + if (conf.commitlog_directory.equals(conf.saved_caches_directory)) throw new ConfigurationException("saved_caches_directory must not be the same as the commitlog_directory", false); @@@ -620,21 -653,27 +667,40 @@@ } if (seedProvider.getSeeds().size() == 0) throw new ConfigurationException("The seed provider lists no seeds.", false); + + if (conf.user_defined_function_fail_timeout < 0) + throw new ConfigurationException("user_defined_function_fail_timeout must not be negative", false); + if (conf.user_defined_function_warn_timeout < 0) + throw new ConfigurationException("user_defined_function_warn_timeout must not be negative", false); + + if (conf.user_defined_function_fail_timeout < conf.user_defined_function_warn_timeout) + throw new ConfigurationException("user_defined_function_warn_timeout must less than user_defined_function_fail_timeout", false); + + if (conf.max_mutation_size_in_kb == null) + conf.max_mutation_size_in_kb = conf.commitlog_segment_size_in_mb * 1024 / 2; + else if (conf.commitlog_segment_size_in_mb * 1024 < 2 * conf.max_mutation_size_in_kb) + throw new ConfigurationException("commitlog_segment_size_in_mb must be at least twice the size of max_mutation_size_in_kb / 1024", false); } + private static FileStore guessFileStore(String dir) throws IOException + { + Path path = Paths.get(dir); + while (true) + { + try + { + return Files.getFileStore(path); + } + catch (IOException e) + { + if (e instanceof NoSuchFileException) + path = path.getParent(); + else + throw e; + } + } + } + private static IEndpointSnitch createEndpointSnitch(String snitchClassName) throws ConfigurationException { if (!snitchClassName.contains("."))
