You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2021/04/13 08:53:57 UTC
[cassandra] branch cassandra-3.11 updated: Add autocomplete,
errors for provide_overlapping_tombstones
This is an automated email from the ASF dual-hosted git repository.
marcuse pushed a commit to branch cassandra-3.11
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cassandra-3.11 by this push:
new 7152d40 Add autocomplete, errors for provide_overlapping_tombstones
7152d40 is described below
commit 7152d40bb372398bd40db1f649e8d644f90fbb44
Author: Brian Houser <br...@amazon.com>
AuthorDate: Mon Apr 12 13:25:13 2021 -0700
Add autocomplete, errors for provide_overlapping_tombstones
Patch by Brian Houser; reviewed by marcuse for CASSANDRA-16350
---
CHANGES.txt | 1 +
pylib/cqlshlib/cql3handling.py | 4 +++-
pylib/cqlshlib/test/test_cqlsh_completion.py | 8 ++++---
.../apache/cassandra/schema/CompactionParams.java | 21 +++++++++++++++--
.../db/compaction/CompactionsCQLTest.java | 26 ++++++++++++++++++++++
5 files changed, 54 insertions(+), 6 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 1fa7546..ca69c82 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.11.11
+ * Add autocomplete and error messages for provide_overlapping_tombstones (CASSANDRA-16350)
* Add StorageServiceMBean.getKeyspaceReplicationInfo(keyspaceName) (CASSANDRA-16447)
* Upgrade jackson-databind to 2.9.10.8 (CASSANDRA-16462)
Merged from 3.0:
diff --git a/pylib/cqlshlib/cql3handling.py b/pylib/cqlshlib/cql3handling.py
index 7709a26..33793d2 100644
--- a/pylib/cqlshlib/cql3handling.py
+++ b/pylib/cqlshlib/cql3handling.py
@@ -59,7 +59,7 @@ class Cql3ParsingRuleSet(CqlParsingRuleSet):
# (CQL3 option name, schema_columnfamilies column name (or None if same),
# list of known map keys)
('compaction', 'compaction_strategy_options',
- ('class', 'max_threshold', 'tombstone_compaction_interval', 'tombstone_threshold', 'enabled', 'unchecked_tombstone_compaction', 'only_purge_repaired_tombstones')),
+ ('class', 'max_threshold', 'tombstone_compaction_interval', 'tombstone_threshold', 'enabled', 'unchecked_tombstone_compaction', 'only_purge_repaired_tombstones', 'provide_overlapping_tombstones')),
('compression', 'compression_parameters',
('sstable_compression', 'chunk_length_kb', 'crc_check_chance')),
('caching', None,
@@ -538,6 +538,8 @@ def cf_prop_val_mapval_completer(ctxt, cass):
if opt == 'compaction':
if key == 'class':
return map(escape_value, CqlRuleSet.available_compaction_classes)
+ if key == 'provide_overlapping_tombstones':
+ return [Hint('<NONE|ROW|CELL>')]
return [Hint('<option_value>')]
elif opt == 'compression':
if key == 'sstable_compression':
diff --git a/pylib/cqlshlib/test/test_cqlsh_completion.py b/pylib/cqlshlib/test/test_cqlsh_completion.py
index df4f7e8..e0b4774 100644
--- a/pylib/cqlshlib/test/test_cqlsh_completion.py
+++ b/pylib/cqlshlib/test/test_cqlsh_completion.py
@@ -639,7 +639,8 @@ class TestCqlshCompletion(CqlshCompletionCase):
'tombstone_compaction_interval',
'tombstone_threshold',
'unchecked_tombstone_compaction',
- 'only_purge_repaired_tombstones'])
+ 'only_purge_repaired_tombstones',
+ 'provide_overlapping_tombstones'])
self.trycompletions(prefix + " new_table (col_a int PRIMARY KEY) WITH compaction = "
+ "{'class': 'SizeTieredCompactionStrategy'}",
choices=[';', 'AND'])
@@ -660,14 +661,15 @@ class TestCqlshCompletion(CqlshCompletionCase):
'timestamp_resolution', 'min_threshold', 'class', 'max_threshold',
'tombstone_compaction_interval', 'tombstone_threshold',
'enabled', 'unchecked_tombstone_compaction',
- 'max_window_size_seconds', 'only_purge_repaired_tombstones'])
+ 'max_window_size_seconds',
+ 'only_purge_repaired_tombstones', 'provide_overlapping_tombstones'])
self.trycompletions(prefix + " new_table (col_a int PRIMARY KEY) WITH compaction = "
+ "{'class': 'TimeWindowCompactionStrategy', '",
choices=['compaction_window_unit', 'compaction_window_size',
'timestamp_resolution', 'min_threshold', 'class', 'max_threshold',
'tombstone_compaction_interval', 'tombstone_threshold',
'enabled', 'unchecked_tombstone_compaction',
- 'only_purge_repaired_tombstones'])
+ 'only_purge_repaired_tombstones','provide_overlapping_tombstones'])
def test_complete_in_create_columnfamily(self):
self.trycompletions('CREATE C', choices=['COLUMNFAMILY', 'CUSTOM'])
diff --git a/src/java/org/apache/cassandra/schema/CompactionParams.java b/src/java/org/apache/cassandra/schema/CompactionParams.java
index 73271f1..c096b7c 100644
--- a/src/java/org/apache/cassandra/schema/CompactionParams.java
+++ b/src/java/org/apache/cassandra/schema/CompactionParams.java
@@ -18,9 +18,11 @@
package org.apache.cassandra.schema;
import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;
@@ -60,6 +62,13 @@ public final class CompactionParams
NONE,
ROW,
CELL;
+
+ private static final TombstoneOption[] copyOfValues = values();
+
+ public static Optional<TombstoneOption> forName(String name)
+ {
+ return Arrays.stream(copyOfValues).filter(x -> x.name().equals(name)).findFirst();
+ }
}
public static final int DEFAULT_MIN_THRESHOLD = 4;
@@ -94,8 +103,16 @@ public final class CompactionParams
boolean isEnabled = options.containsKey(Option.ENABLED.toString())
? Boolean.parseBoolean(options.get(Option.ENABLED.toString()))
: DEFAULT_ENABLED;
- TombstoneOption tombstoneOption = TombstoneOption.valueOf(options.getOrDefault(Option.PROVIDE_OVERLAPPING_TOMBSTONES.toString(),
- DEFAULT_PROVIDE_OVERLAPPING_TOMBSTONES.toString()).toUpperCase());
+ String overlappingTombstoneParm = options.getOrDefault(Option.PROVIDE_OVERLAPPING_TOMBSTONES.toString(),
+ DEFAULT_PROVIDE_OVERLAPPING_TOMBSTONES.toString()).toUpperCase();
+ Optional<TombstoneOption> tombstoneOptional = TombstoneOption.forName(overlappingTombstoneParm);
+ if (!tombstoneOptional.isPresent())
+ {
+ throw new ConfigurationException(format("Invalid value %s for 'provide_overlapping_tombstones' compaction sub-option - must be one of the following [%s].",
+ overlappingTombstoneParm,
+ StringUtils.join(TombstoneOption.values(), ", ")));
+ }
+ TombstoneOption tombstoneOption = tombstoneOptional.get();
Map<String, String> allOptions = new HashMap<>(options);
if (supportsThresholdParams(klass))
diff --git a/test/unit/org/apache/cassandra/db/compaction/CompactionsCQLTest.java b/test/unit/org/apache/cassandra/db/compaction/CompactionsCQLTest.java
index 7873ac9..fe15085 100644
--- a/test/unit/org/apache/cassandra/db/compaction/CompactionsCQLTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/CompactionsCQLTest.java
@@ -25,7 +25,9 @@ import org.junit.Test;
import org.apache.cassandra.cql3.CQLTester;
import org.apache.cassandra.cql3.UntypedResultSet;
+import org.apache.cassandra.schema.CompactionParams;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -60,6 +62,7 @@ public class CompactionsCQLTest extends CQLTester
}
+
@Test
public void testTriggerMinorCompactionDTCS() throws Throwable
{
@@ -226,6 +229,29 @@ public class CompactionsCQLTest extends CQLTester
getCurrentColumnFamilyStore().setCompactionParameters(localOptions);
}
+ @Test(expected = IllegalArgumentException.class)
+ public void testBadProvidesTombstoneOption()
+ {
+ createTable("CREATE TABLE %s (id text PRIMARY KEY)");
+ Map<String, String> localOptions = new HashMap<>();
+ localOptions.put("class","SizeTieredCompactionStrategy");
+ localOptions.put("provide_overlapping_tombstones","IllegalValue");
+
+ getCurrentColumnFamilyStore().setCompactionParameters(localOptions);
+ }
+ @Test
+ public void testProvidesTombstoneOptionverifiation()
+ {
+ createTable("CREATE TABLE %s (id text PRIMARY KEY)");
+ Map<String, String> localOptions = new HashMap<>();
+ localOptions.put("class","SizeTieredCompactionStrategy");
+ localOptions.put("provide_overlapping_tombstones","row");
+
+ getCurrentColumnFamilyStore().setCompactionParameters(localOptions);
+ assertEquals(CompactionParams.TombstoneOption.ROW, getCurrentColumnFamilyStore().getCompactionStrategyManager().getCompactionParams().tombstoneOption());
+ }
+
+
public boolean verifyStrategies(CompactionStrategyManager manager, Class<? extends AbstractCompactionStrategy> expected)
{
boolean found = false;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org