From b8408f068bf2fc73f632d09239ba892a9835416f Mon Sep 17 00:00:00 2001 From: Marcus Eriksson Date: Wed, 20 Jan 2016 08:58:05 +0100 Subject: [PATCH 1/2] Make it clear what timestamp_resolution is used for Patch by marcuse; reviewed by Jeff Jirsa for CASSANDRA-11041 --- CHANGES.txt | 1 + doc/cql3/CQL.textile | 2 +- pylib/cqlshlib/cql3handling.py | 1 - .../db/compaction/DateTieredCompactionStrategyOptions.java | 6 ++++++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 806e6d5aee..e5d6ff1294 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.14 + * Make it clear what DTCS timestamp_resolution is used for (CASSANDRA-11041) * Gossiper#isEnabled is not thread safe (CASSANDRA-11116) diff --git a/doc/cql3/CQL.textile b/doc/cql3/CQL.textile index 3b69fcccf2..812a75edf6 100644 --- a/doc/cql3/CQL.textile +++ b/doc/cql3/CQL.textile @@ -347,7 +347,7 @@ The @compaction@ property must at least define the @'class'@ sub-option, that de | @bucket_low@ | SizeTieredCompactionStrategy | 0.5 | Size tiered consider sstables to be within the same bucket if their size is within [average_size * @bucket_low@, average_size * @bucket_high@ ] (i.e the default groups sstable whose sizes diverges by at most 50%)| | @bucket_high@ | SizeTieredCompactionStrategy | 1.5 | Size tiered consider sstables to be within the same bucket if their size is within [average_size * @bucket_low@, average_size * @bucket_high@ ] (i.e the default groups sstable whose sizes diverges by at most 50%).| | @sstable_size_in_mb@ | LeveledCompactionStrategy | 5MB | The target size (in MB) for sstables in the leveled strategy. Note that while sstable sizes should stay less or equal to @sstable_size_in_mb@, it is possible to exceptionally have a larger sstable as during compaction, data for a given partition key are never split into 2 sstables| -| @timestamp_resolution@ | DateTieredCompactionStrategy | MICROSECONDS | The timestamp resolution used when inserting data, could be MILLISECONDS, MICROSECONDS etc (should be understandable by Java TimeUnit)| +| @timestamp_resolution@ | DateTieredCompactionStrategy | MICROSECONDS | The timestamp resolution used when inserting data, could be MILLISECONDS, MICROSECONDS etc (should be understandable by Java TimeUnit) - don't change this unless you do mutations with USING TIMESTAMP (or equivalent directly in the client)| | @base_time_seconds@ | DateTieredCompactionStrategy | 60 | The base size of the time windows. | | @max_sstable_age_days@ | DateTieredCompactionStrategy | 365 | SSTables only containing data that is older than this will never be compacted. | diff --git a/pylib/cqlshlib/cql3handling.py b/pylib/cqlshlib/cql3handling.py index 38f118f31b..029e0c79a3 100644 --- a/pylib/cqlshlib/cql3handling.py +++ b/pylib/cqlshlib/cql3handling.py @@ -470,7 +470,6 @@ def cf_prop_val_mapkey_completer(ctxt, cass): elif csc == 'DateTieredCompactionStrategy': opts.add('base_time_seconds') opts.add('max_sstable_age_days') - opts.add('timestamp_resolution') opts.add('min_threshold') opts.add('max_window_size_seconds') return map(escape_value, opts) diff --git a/src/java/org/apache/cassandra/db/compaction/DateTieredCompactionStrategyOptions.java b/src/java/org/apache/cassandra/db/compaction/DateTieredCompactionStrategyOptions.java index 580311543d..78a0cab4a2 100644 --- a/src/java/org/apache/cassandra/db/compaction/DateTieredCompactionStrategyOptions.java +++ b/src/java/org/apache/cassandra/db/compaction/DateTieredCompactionStrategyOptions.java @@ -20,10 +20,14 @@ package org.apache.cassandra.db.compaction; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import org.apache.cassandra.exceptions.ConfigurationException; public final class DateTieredCompactionStrategyOptions { + private static final Logger logger = LoggerFactory.getLogger(DateTieredCompactionStrategy.class); protected static final TimeUnit DEFAULT_TIMESTAMP_RESOLUTION = TimeUnit.MICROSECONDS; @Deprecated protected static final double DEFAULT_MAX_SSTABLE_AGE_DAYS = 365*1000; @@ -48,6 +52,8 @@ public final class DateTieredCompactionStrategyOptions { String optionValue = options.get(TIMESTAMP_RESOLUTION_KEY); TimeUnit timestampResolution = optionValue == null ? DEFAULT_TIMESTAMP_RESOLUTION : TimeUnit.valueOf(optionValue); + if (timestampResolution != DEFAULT_TIMESTAMP_RESOLUTION) + logger.warn("Using a non-default timestamp_resolution {} - are you really doing inserts with USING TIMESTAMP (or driver equivalent)?", timestampResolution.toString()); optionValue = options.get(MAX_SSTABLE_AGE_KEY); double fractionalDays = optionValue == null ? DEFAULT_MAX_SSTABLE_AGE_DAYS : Double.parseDouble(optionValue); maxSSTableAge = Math.round(fractionalDays * timestampResolution.convert(1, TimeUnit.DAYS)); From 725b9b1f7f16ff8ad8e77ad0f7679d39bc7f05b2 Mon Sep 17 00:00:00 2001 From: Marcus Eriksson Date: Tue, 9 Feb 2016 07:09:54 +0100 Subject: [PATCH 2/2] fix CHANGES.txt after 2.1.13 release --- CHANGES.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e5d6ff1294..72b3d592a5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,11 +1,11 @@ 2.1.14 * Make it clear what DTCS timestamp_resolution is used for (CASSANDRA-11041) * Gossiper#isEnabled is not thread safe (CASSANDRA-11116) + * Avoid major compaction mixing repaired and unrepaired sstables in DTCS (CASSANDRA-11113) + * test_bulk_round_trip_blogposts is failing occasionally (CASSANDRA-10938) 2.1.13 - * Avoid major compaction mixing repaired and unrepaired sstables in DTCS (CASSANDRA-11113) - * test_bulk_round_trip_blogposts is failing occasionally (CASSANDRA-10938) * Fix isJoined return true only after becoming cluster member (CASANDRA-11007) * Fix bad gossip generation seen in long-running clusters (CASSANDRA-10969) * Avoid NPE when incremental repair fails (CASSANDRA-10909)