This is an automated email from the ASF dual-hosted git repository. jlewandowski pushed a commit to branch cep-15-accord in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cep-15-accord by this push: new a7cd114435 CEP-15: Add Accord configuration stub a7cd114435 is described below commit a7cd114435704b988c81f47ef53d0bfd6441f38b Author: Jacek Lewandowski <lewandowski.ja...@gmail.com> AuthorDate: Mon Oct 9 15:05:57 2023 +0200 CEP-15: Add Accord configuration stub Patch by Jacek Lewandowski; reviewed by David Capwell for CASSANDRA-18221 --- CHANGES.txt | 1 + conf/cassandra.yaml | 16 +++++++-- modules/accord | 2 +- .../org/apache/cassandra/config/AccordSpec.java | 30 ++++++++++++++++ src/java/org/apache/cassandra/config/Config.java | 8 ++--- .../cassandra/config/DatabaseDescriptor.java | 42 +++++++++++----------- .../org/apache/cassandra/config/DurationSpec.java | 6 ++++ .../cql3/statements/TransactionStatement.java | 2 +- .../service/accord/AccordConfiguration.java | 40 +++++++++++++++++++++ .../cassandra/service/accord/AccordService.java | 12 ++++--- test/conf/cassandra-mtls.yaml | 3 +- test/conf/cassandra-murmur.yaml | 3 +- test/conf/cassandra-old.yaml | 3 +- test/conf/cassandra-pem-jks-sslcontextfactory.yaml | 3 +- ...pem-sslcontextfactory-invalidconfiguration.yaml | 3 +- test/conf/cassandra-pem-sslcontextfactory.yaml | 3 +- test/conf/cassandra-seeds.yaml | 3 +- ...dra-sslcontextfactory-invalidconfiguration.yaml | 3 +- test/conf/cassandra-sslcontextfactory.yaml | 3 +- test/conf/cassandra.yaml | 8 +++-- .../cassandra/distributed/impl/InstanceConfig.java | 16 ++++++--- .../test/accord/AccordBootstrapTest.java | 2 +- .../test/accord/AccordFeatureFlagTest.java | 11 +++--- .../config/DatabaseDescriptorRefTest.java | 25 ++++++------- .../config/YamlConfigurationLoaderTest.java | 6 ++-- 25 files changed, 181 insertions(+), 73 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 69eb1f833b..dc7de36c99 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ accord + * Add Accord configuration stub (CASSANDRA-18221) * Improve transaction statement validation (CASSANDRA-18302) * Add support for prepared statements for accord transactions (CASSANDRA-18299) * Fix statement validation against partition range queries (CASSANDRA-18240) diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml index 2bd927ecf4..e24672d04c 100644 --- a/conf/cassandra.yaml +++ b/conf/cassandra.yaml @@ -1818,9 +1818,6 @@ drop_compact_storage_enabled: false # Whether or not USE <keyspace> is allowed. This is enabled by default to avoid failure on upgrade. #use_statements_enabled: true -# Enables the execution of Accord (multi-key) transactions on this node. -accord_transactions_enabled: false - # When the client triggers a protocol exception or unknown issue (Cassandra bug) we increment # a client metric showing this; this logic will exclude specific subnets from updating these # metrics @@ -2113,3 +2110,16 @@ accord_transactions_enabled: false # a stable cluster. If a node from a previous version was started by accident we won't any longer toggle behaviors as when UPGRADING. # storage_compatibility_mode: NONE + +#accord: +# # Enables the execution of Accord (multi-key) transactions on this node. +# enabled: false +# +# # Journal directory for Accord +# journal_directory: +# +# # The number of Accord shards on this node; -1 means use the number of cores +# shard_count: -1 +# +# # Progress log scheduling delay +# progress_log_schedule_delay: 1s diff --git a/modules/accord b/modules/accord index 0419858bd1..5ffe3d504b 160000 --- a/modules/accord +++ b/modules/accord @@ -1 +1 @@ -Subproject commit 0419858bd1f6761f08fd1369477f7c142f5bbb4f +Subproject commit 5ffe3d504bb5aa1ff1c2b96d817791e40f7ced0f diff --git a/src/java/org/apache/cassandra/config/AccordSpec.java b/src/java/org/apache/cassandra/config/AccordSpec.java new file mode 100644 index 0000000000..b025d561b6 --- /dev/null +++ b/src/java/org/apache/cassandra/config/AccordSpec.java @@ -0,0 +1,30 @@ +/* + * 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.cassandra.config; + +public class AccordSpec +{ + public volatile boolean enabled = false; + + public volatile String journal_directory; + + public volatile OptionaldPositiveInt shard_count = OptionaldPositiveInt.UNDEFINED; + + public volatile DurationSpec.IntSecondsBound progress_log_schedule_delay = new DurationSpec.IntSecondsBound(1); +} diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java index eefe0dd43f..fe290d89eb 100644 --- a/src/java/org/apache/cassandra/config/Config.java +++ b/src/java/org/apache/cassandra/config/Config.java @@ -390,9 +390,6 @@ public class Config public DataStorageSpec.IntMebibytesBound commitlog_total_space; public CommitLogSync commitlog_sync; - // Accord Journal - public String accord_journal_directory; - @Replaces(oldName = "commitlog_sync_group_window_in_ms", converter = Converters.MILLIS_DURATION_DOUBLE, deprecated = true) public DurationSpec.IntMillisecondsBound commitlog_sync_group_window = new DurationSpec.IntMillisecondsBound("0ms"); @Replaces(oldName = "commitlog_sync_period_in_ms", converter = Converters.MILLIS_DURATION_INT, deprecated = true) @@ -606,9 +603,6 @@ public class Config public volatile boolean use_statements_enabled = true; - public boolean accord_transactions_enabled = false; - public OptionaldPositiveInt accord_shard_count = OptionaldPositiveInt.UNDEFINED; - /** * Optionally disable asynchronous UDF execution. * Disabling asynchronous UDF execution also implicitly disables the security-manager! @@ -1129,6 +1123,8 @@ public class Config */ public ParameterizedClass default_compaction = null; + public final AccordSpec accord = new AccordSpec(); + public static Supplier<Config> getOverrideLoadConfig() { return overrideLoadConfig; diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 38495e0a10..cf0a0e5573 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -640,9 +640,9 @@ public class DatabaseDescriptor conf.commitlog_directory = storagedirFor("commitlog"); } - if (conf.accord_journal_directory == null) + if (conf.accord.journal_directory == null) { - conf.accord_journal_directory = storagedirFor("accord_journal"); + conf.accord.journal_directory = storagedirFor("accord_journal"); } if (conf.hints_directory == null) @@ -720,8 +720,8 @@ public class DatabaseDescriptor throw new ConfigurationException("local_system_data_file_directory must not be the same as any data_file_directories", false); 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.accord_journal_directory)) - throw new ConfigurationException("accord_journal_directory must not be the same as any data_file_directories", false); + if (datadir.equals(conf.accord.journal_directory)) + throw new ConfigurationException("accord.journal_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)) @@ -737,8 +737,8 @@ public class DatabaseDescriptor { if (conf.local_system_data_file_directory.equals(conf.commitlog_directory)) throw new ConfigurationException("local_system_data_file_directory must not be the same as the commitlog_directory", false); - if (conf.local_system_data_file_directory.equals(conf.accord_journal_directory)) - throw new ConfigurationException("local_system_data_file_directory must not be the same as the accord_journal_directory", false); + if (conf.local_system_data_file_directory.equals(conf.accord.journal_directory)) + throw new ConfigurationException("local_system_data_file_directory must not be the same as the accord.journal_directory", false); if (conf.local_system_data_file_directory.equals(conf.saved_caches_directory)) throw new ConfigurationException("local_system_data_file_directory must not be the same as the saved_caches_directory", false); if (conf.local_system_data_file_directory.equals(conf.hints_directory)) @@ -751,17 +751,17 @@ public class DatabaseDescriptor FBUtilities.prettyPrintMemory(freeBytes)); } - if (conf.commitlog_directory.equals(conf.accord_journal_directory)) - throw new ConfigurationException("accord_journal_directory must not be the same as the commitlog_directory", false); + if (conf.commitlog_directory.equals(conf.accord.journal_directory)) + throw new ConfigurationException("accord.journal_directory must not be the same as the commitlog_directory", false); if (conf.commitlog_directory.equals(conf.hints_directory)) throw new ConfigurationException("hints_directory must not be the same as the commitlog_directory", false); 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); - if (conf.accord_journal_directory.equals(conf.hints_directory)) - throw new ConfigurationException("hints_directory must not be the same as the accord_journal_directory", false); - if (conf.accord_journal_directory.equals(conf.saved_caches_directory)) - throw new ConfigurationException("saved_caches_directory must not be the same as the accord_journal_directory", false); + if (conf.accord.journal_directory.equals(conf.hints_directory)) + throw new ConfigurationException("hints_directory must not be the same as the accord.journal_directory", false); + if (conf.accord.journal_directory.equals(conf.saved_caches_directory)) + throw new ConfigurationException("saved_caches_directory must not be the same as the accord.journal_directory", false); if (conf.hints_directory.equals(conf.saved_caches_directory)) throw new ConfigurationException("saved_caches_directory must not be the same as the hints_directory", false); @@ -1023,7 +1023,7 @@ public class DatabaseDescriptor conf.progress_barrier_default_consistency_level, progressBarrierCLsArr)); } - if (conf.legacy_paxos_strategy == Config.LegacyPaxosStrategy.accord && !conf.accord_transactions_enabled) + if (conf.legacy_paxos_strategy == Config.LegacyPaxosStrategy.accord && !conf.accord.enabled) throw new ConfigurationException(NO_ACCORD_PAXOS_STRATEGY_WITH_ACCORD_DISABLED_MESSAGE); } @@ -1894,9 +1894,9 @@ public class DatabaseDescriptor throw new ConfigurationException("commitlog_directory must be specified", false); FileUtils.createDirectory(conf.commitlog_directory); - if (conf.accord_journal_directory == null) - throw new ConfigurationException("accord_journal_directory must be specified", false); - FileUtils.createDirectory(conf.accord_journal_directory); + if (conf.accord.journal_directory == null) + throw new ConfigurationException("accord.journal_directory must be specified", false); + FileUtils.createDirectory(conf.accord.journal_directory); if (conf.hints_directory == null) throw new ConfigurationException("hints_directory must be specified", false); @@ -2649,12 +2649,12 @@ public class DatabaseDescriptor public static String getAccordJournalDirectory() { - return conf.accord_journal_directory; + return conf.accord.journal_directory; } public static void setAccordJournalDirectory(String path) { - conf.accord_journal_directory = path; + conf.accord.journal_directory = path; } public static Config.FlushCompression getFlushCompression() @@ -4733,17 +4733,17 @@ public class DatabaseDescriptor public static boolean getAccordTransactionsEnabled() { - return conf.accord_transactions_enabled; + return conf.accord.enabled; } public static void setAccordTransactionsEnabled(boolean b) { - conf.accord_transactions_enabled = b; + conf.accord.enabled = b; } public static int getAccordShardCount() { - return conf.accord_shard_count.or(DatabaseDescriptor::getAvailableProcessors); + return conf.accord.shard_count.or(DatabaseDescriptor::getAvailableProcessors); } public static boolean getForceNewPreparedStatementBehaviour() diff --git a/src/java/org/apache/cassandra/config/DurationSpec.java b/src/java/org/apache/cassandra/config/DurationSpec.java index 2522d86124..2f218f70e0 100644 --- a/src/java/org/apache/cassandra/config/DurationSpec.java +++ b/src/java/org/apache/cassandra/config/DurationSpec.java @@ -17,6 +17,7 @@ */ package org.apache.cassandra.config; +import java.time.Duration; import java.util.Arrays; import java.util.Objects; import java.util.concurrent.TimeUnit; @@ -135,6 +136,11 @@ public abstract class DurationSpec return unit; } + public Duration toDuration() + { + return Duration.of(quantity(), unit().toChronoUnit()); + } + /** * @param symbol the time unit symbol * @return the time unit associated to the specified symbol diff --git a/src/java/org/apache/cassandra/cql3/statements/TransactionStatement.java b/src/java/org/apache/cassandra/cql3/statements/TransactionStatement.java index e52150abe5..5f90be2f1a 100644 --- a/src/java/org/apache/cassandra/cql3/statements/TransactionStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/TransactionStatement.java @@ -98,7 +98,7 @@ public class TransactionStatement implements CQLStatement.CompositeCQLStatement, public static final String NO_TIMESTAMPS_IN_UPDATES_MESSAGE = "Updates within transactions may not specify custom timestamps; %s statement %s"; public static final String EMPTY_TRANSACTION_MESSAGE = "Transaction contains no reads or writes"; public static final String SELECT_REFS_NEED_COLUMN_MESSAGE = "SELECT references must specify a column."; - public static final String TRANSACTIONS_DISABLED_MESSAGE = "Accord transactions are disabled. (See accord_transactions_enabled in cassandra.yaml)"; + public static final String TRANSACTIONS_DISABLED_MESSAGE = "Accord transactions are disabled. (See accord.enabled in cassandra.yaml)"; public static final String ILLEGAL_RANGE_QUERY_MESSAGE = "Range queries are not allowed for reads within a transaction; %s %s"; static class NamedSelect diff --git a/src/java/org/apache/cassandra/service/accord/AccordConfiguration.java b/src/java/org/apache/cassandra/service/accord/AccordConfiguration.java new file mode 100644 index 0000000000..a17a9fc844 --- /dev/null +++ b/src/java/org/apache/cassandra/service/accord/AccordConfiguration.java @@ -0,0 +1,40 @@ +/* + * 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.cassandra.service.accord; + +import java.time.Duration; + +import accord.config.LocalConfig; +import org.apache.cassandra.config.Config; + +public class AccordConfiguration implements LocalConfig +{ + private final Config config; + + public AccordConfiguration(Config config) + { + this.config = config; + } + + @Override + public Duration getProgressLogScheduleDelay() + { + return config.accord.progress_log_schedule_delay.toDuration(); + } +} diff --git a/src/java/org/apache/cassandra/service/accord/AccordService.java b/src/java/org/apache/cassandra/service/accord/AccordService.java index 95ef73f0e7..2a4ed5a2a7 100644 --- a/src/java/org/apache/cassandra/service/accord/AccordService.java +++ b/src/java/org/apache/cassandra/service/accord/AccordService.java @@ -31,6 +31,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import accord.api.Result; +import accord.config.LocalConfig; import accord.coordinate.Preempted; import accord.coordinate.Timeout; import accord.impl.AbstractConfigurationService; @@ -105,6 +106,7 @@ public class AccordService implements IAccordService, Shutdownable private final AccordDataStore dataStore; private final AccordJournal journal; private final AccordVerbHandler<? extends Request> verbHandler; + private final LocalConfig configuration; private static final IAccordService NOOP_SERVICE = new IAccordService() { @@ -117,13 +119,13 @@ public class AccordService implements IAccordService, Shutdownable @Override public TxnData coordinate(Txn txn, ConsistencyLevel consistencyLevel) { - throw new UnsupportedOperationException("No accord transaction should be executed when accord_transactions_enabled = false in cassandra.yaml"); + throw new UnsupportedOperationException("No accord transaction should be executed when accord.enabled = false in cassandra.yaml"); } @Override public long currentEpoch() { - throw new UnsupportedOperationException("Cannot return epoch when accord_transactions_enabled = false in cassandra.yaml"); + throw new UnsupportedOperationException("Cannot return epoch when accord.enabled = false in cassandra.yaml"); } @Override @@ -132,7 +134,7 @@ public class AccordService implements IAccordService, Shutdownable @Override public TopologyManager topology() { - throw new UnsupportedOperationException("Cannot return topology when accord_transactions_enabled = false in cassandra.yaml"); + throw new UnsupportedOperationException("Cannot return topology when accord.enabled = false in cassandra.yaml"); } @Override @@ -227,6 +229,7 @@ public class AccordService implements IAccordService, Shutdownable this.scheduler = new AccordScheduler(); this.dataStore = new AccordDataStore(); this.journal = new AccordJournal(); + this.configuration = new AccordConfiguration(DatabaseDescriptor.getRawConfig()); this.node = new Node(localId, messageSink, this::handleLocalMessage, @@ -240,7 +243,8 @@ public class AccordService implements IAccordService, Shutdownable scheduler, SizeOfIntersectionSorter.SUPPLIER, SimpleProgressLog::new, - AccordCommandStores.factory(journal)); + AccordCommandStores.factory(journal), + configuration); this.nodeShutdown = toShutdownable(node); this.verbHandler = new AccordVerbHandler<>(node, configService, journal); } diff --git a/test/conf/cassandra-mtls.yaml b/test/conf/cassandra-mtls.yaml index efa167c10f..daa014566a 100644 --- a/test/conf/cassandra-mtls.yaml +++ b/test/conf/cassandra-mtls.yaml @@ -24,7 +24,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal cdc_raw_directory: build/test/cassandra/cdc_raw cdc_enabled: false hints_directory: build/test/cassandra/hints @@ -87,3 +86,5 @@ authenticator: class_name : org.apache.cassandra.auth.MutualTlsAuthenticator parameters : validator_class_name: org.apache.cassandra.auth.SpiffeCertificateValidator +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra-murmur.yaml b/test/conf/cassandra-murmur.yaml index 7d6af4e40b..fee5d8cf91 100644 --- a/test/conf/cassandra-murmur.yaml +++ b/test/conf/cassandra-murmur.yaml @@ -7,7 +7,6 @@ memtable_allocation_type: heap_buffers commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal cdc_raw_directory: build/test/cassandra/cdc_raw cdc_enabled: false hints_directory: build/test/cassandra/hints @@ -42,3 +41,5 @@ user_defined_functions_enabled: true scripted_user_defined_functions_enabled: false sasi_indexes_enabled: true materialized_views_enabled: true +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra-old.yaml b/test/conf/cassandra-old.yaml index 99c7c0d1c7..3acc8eae98 100644 --- a/test/conf/cassandra-old.yaml +++ b/test/conf/cassandra-old.yaml @@ -8,7 +8,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size_in_mb: 5 commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal # commitlog_compression: # - class_name: LZ4Compressor cdc_raw_directory: build/test/cassandra/cdc_raw @@ -56,3 +55,5 @@ internode_send_buff_size_in_bytes: 5 internode_recv_buff_size_in_bytes: 5 max_hint_window_in_ms: 10800000 cache_load_timeout_seconds: 35 +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra-pem-jks-sslcontextfactory.yaml b/test/conf/cassandra-pem-jks-sslcontextfactory.yaml index bcba6fd698..dd16c30ca6 100644 --- a/test/conf/cassandra-pem-jks-sslcontextfactory.yaml +++ b/test/conf/cassandra-pem-jks-sslcontextfactory.yaml @@ -26,7 +26,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal # commitlog_compression: # - class_name: LZ4Compressor cdc_raw_directory: build/test/cassandra/cdc_raw @@ -149,3 +148,5 @@ stream_throughput_outbound: 24MiB/s sasi_indexes_enabled: true materialized_views_enabled: true file_cache_enabled: true +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra-pem-sslcontextfactory-invalidconfiguration.yaml b/test/conf/cassandra-pem-sslcontextfactory-invalidconfiguration.yaml index d06c99a6ac..751eb64a54 100644 --- a/test/conf/cassandra-pem-sslcontextfactory-invalidconfiguration.yaml +++ b/test/conf/cassandra-pem-sslcontextfactory-invalidconfiguration.yaml @@ -26,7 +26,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal # commitlog_compression: # - class_name: LZ4Compressor cdc_raw_directory: build/test/cassandra/cdc_raw @@ -146,3 +145,5 @@ stream_throughput_outbound: 24MiB/s sasi_indexes_enabled: true materialized_views_enabled: true file_cache_enabled: true +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra-pem-sslcontextfactory.yaml b/test/conf/cassandra-pem-sslcontextfactory.yaml index 2d64708a3b..2dc0cfba2c 100644 --- a/test/conf/cassandra-pem-sslcontextfactory.yaml +++ b/test/conf/cassandra-pem-sslcontextfactory.yaml @@ -26,7 +26,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal # commitlog_compression: # - class_name: LZ4Compressor cdc_raw_directory: build/test/cassandra/cdc_raw @@ -150,3 +149,5 @@ stream_throughput_outbound: 24MiB/s sasi_indexes_enabled: true materialized_views_enabled: true file_cache_enabled: true +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra-seeds.yaml b/test/conf/cassandra-seeds.yaml index 2403fa844b..9cbc873bb3 100644 --- a/test/conf/cassandra-seeds.yaml +++ b/test/conf/cassandra-seeds.yaml @@ -8,7 +8,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal cdc_raw_directory: build/test/cassandra/cdc_raw cdc_enabled: false hints_directory: build/test/cassandra/hints @@ -41,3 +40,5 @@ row_cache_class_name: org.apache.cassandra.cache.OHCProvider row_cache_size: 16MiB user_defined_functions_enabled: true scripted_user_defined_functions_enabled: false +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra-sslcontextfactory-invalidconfiguration.yaml b/test/conf/cassandra-sslcontextfactory-invalidconfiguration.yaml index 4edea57690..bf8f912fd8 100644 --- a/test/conf/cassandra-sslcontextfactory-invalidconfiguration.yaml +++ b/test/conf/cassandra-sslcontextfactory-invalidconfiguration.yaml @@ -26,7 +26,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal # commitlog_compression: # - class_name: LZ4Compressor cdc_raw_directory: build/test/cassandra/cdc_raw @@ -80,3 +79,5 @@ stream_throughput_outbound: 23841858MiB/s sasi_indexes_enabled: true materialized_views_enabled: true file_cache_enabled: true +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra-sslcontextfactory.yaml b/test/conf/cassandra-sslcontextfactory.yaml index 76acf22e85..2e8aaaf18d 100644 --- a/test/conf/cassandra-sslcontextfactory.yaml +++ b/test/conf/cassandra-sslcontextfactory.yaml @@ -26,7 +26,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal # commitlog_compression: # - class_name: LZ4Compressor cdc_raw_directory: build/test/cassandra/cdc_raw @@ -83,3 +82,5 @@ stream_throughput_outbound: 23841858MiB/s sasi_indexes_enabled: true materialized_views_enabled: true file_cache_enabled: true +accord: + journal_directory: build/test/cassandra/accord_journal diff --git a/test/conf/cassandra.yaml b/test/conf/cassandra.yaml index 830e38b612..80e0166066 100644 --- a/test/conf/cassandra.yaml +++ b/test/conf/cassandra.yaml @@ -8,7 +8,6 @@ memtable_allocation_type: offheap_objects commitlog_sync: batch commitlog_segment_size: 5MiB commitlog_directory: build/test/cassandra/commitlog -accord_journal_directory: build/test/cassandra/accord_journal # commitlog_compression: # - class_name: LZ4Compressor cdc_raw_directory: build/test/cassandra/cdc_raw @@ -55,7 +54,6 @@ file_cache_enabled: true full_query_logging_options: allow_nodetool_archive_command: true auto_hints_cleanup_enabled: true -accord_transactions_enabled: true heap_dump_path: build/test dump_heap_on_uncaught_exception: false @@ -114,3 +112,9 @@ memtable: class_name: TrieMemtable # Note: keep the memtable configuration at the end of the file, so that the default mapping can be changed without # duplicating the whole section above. + +accord: + enabled: true + journal_directory: build/test/cassandra/accord_journal + shard_count: 4 + progress_log_schedule_delay: 1s diff --git a/test/distributed/org/apache/cassandra/distributed/impl/InstanceConfig.java b/test/distributed/org/apache/cassandra/distributed/impl/InstanceConfig.java index 6d1d6c96c1..317b14b44f 100644 --- a/test/distributed/org/apache/cassandra/distributed/impl/InstanceConfig.java +++ b/test/distributed/org/apache/cassandra/distributed/impl/InstanceConfig.java @@ -30,6 +30,8 @@ import java.util.UUID; import java.util.function.Function; import com.vdurmont.semver4j.Semver; +import org.apache.cassandra.config.AccordSpec; +import org.apache.cassandra.config.OptionaldPositiveInt; import org.apache.cassandra.distributed.api.Feature; import org.apache.cassandra.distributed.api.IInstanceConfig; import org.apache.cassandra.distributed.shared.NetworkTopology; @@ -70,7 +72,7 @@ public class InstanceConfig implements IInstanceConfig String commitlog_directory, String hints_directory, String cdc_raw_directory, - String accord_journal_directory, + AccordSpec accord, Collection<String> initial_token, int storage_port, int native_transport_port, @@ -91,7 +93,10 @@ public class InstanceConfig implements IInstanceConfig .set("commitlog_directory", commitlog_directory) .set("hints_directory", hints_directory) .set("cdc_raw_directory", cdc_raw_directory) - .set("accord_journal_directory", accord_journal_directory) + .set("accord.enabled", accord.enabled) + .set("accord.journal_directory", accord.journal_directory) + .set("accord.shard_count", accord.shard_count.toString()) + .set("accord.progress_log_schedule_delay", accord.progress_log_schedule_delay.toString()) .set("partitioner", "org.apache.cassandra.dht.Murmur3Partitioner") .set("start_native_transport", true) .set("concurrent_writes", 2) @@ -110,7 +115,6 @@ public class InstanceConfig implements IInstanceConfig // required settings for dtest functionality .set("diagnostic_events_enabled", true) .set("auto_bootstrap", false) - .set("accord_transactions_enabled", true) // capacities that are based on `totalMemory` that should be fixed size .set("index_summary_capacity", "50MiB") .set("counter_cache_size", "50MiB") @@ -263,6 +267,10 @@ public class InstanceConfig implements IInstanceConfig Collection<String> tokens, int datadirCount) { + AccordSpec accordSpec = new AccordSpec(); + accordSpec.enabled = true; + accordSpec.journal_directory = String.format("%s/node%d/accord_journal", root, nodeNum); + accordSpec.shard_count = new OptionaldPositiveInt(4); return new InstanceConfig(nodeNum, networkTopology, provisionStrategy.ipAddress(nodeNum), @@ -276,7 +284,7 @@ public class InstanceConfig implements IInstanceConfig String.format("%s/node%d/commitlog", root, nodeNum), String.format("%s/node%d/hints", root, nodeNum), String.format("%s/node%d/cdc", root, nodeNum), - String.format("%s/node%d/accord_journal", root, nodeNum), + accordSpec, tokens, provisionStrategy.storagePort(nodeNum), provisionStrategy.nativeTransportPort(nodeNum), diff --git a/test/distributed/org/apache/cassandra/distributed/test/accord/AccordBootstrapTest.java b/test/distributed/org/apache/cassandra/distributed/test/accord/AccordBootstrapTest.java index cd202fc729..377a919940 100644 --- a/test/distributed/org/apache/cassandra/distributed/test/accord/AccordBootstrapTest.java +++ b/test/distributed/org/apache/cassandra/distributed/test/accord/AccordBootstrapTest.java @@ -174,7 +174,7 @@ public class AccordBootstrapTest extends TestBaseImpl .withoutVNodes() .withTokenSupplier(TokenSupplier.evenlyDistributedTokens(expandedNodeCount)) .withNodeIdTopology(NetworkTopology.singleDcNetworkTopology(expandedNodeCount, "dc0", "rack0")) - .withConfig(config -> config.set("accord_shard_count", 2).with(NETWORK, GOSSIP)) + .withConfig(config -> config.set("accord.shard_count", 2).with(NETWORK, GOSSIP)) .start()) { long initialMax = maxEpoch(cluster); diff --git a/test/distributed/org/apache/cassandra/distributed/test/accord/AccordFeatureFlagTest.java b/test/distributed/org/apache/cassandra/distributed/test/accord/AccordFeatureFlagTest.java index e4bf7ccb7c..06b44805b3 100644 --- a/test/distributed/org/apache/cassandra/distributed/test/accord/AccordFeatureFlagTest.java +++ b/test/distributed/org/apache/cassandra/distributed/test/accord/AccordFeatureFlagTest.java @@ -25,8 +25,6 @@ import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.apache.cassandra.schema.Schema; -import org.assertj.core.api.Assertions; import org.junit.Test; import org.apache.cassandra.db.virtual.AccordVirtualTables; @@ -39,14 +37,15 @@ import org.apache.cassandra.distributed.api.IIsolatedExecutor; import org.apache.cassandra.distributed.test.TestBaseImpl; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.InvalidRequestException; +import org.apache.cassandra.schema.Schema; import org.apache.cassandra.service.accord.AccordService; import org.apache.cassandra.utils.AssertionUtils; - -import static org.junit.Assert.assertEquals; +import org.assertj.core.api.Assertions; import static org.apache.cassandra.config.DatabaseDescriptor.NO_ACCORD_PAXOS_STRATEGY_WITH_ACCORD_DISABLED_MESSAGE; import static org.apache.cassandra.cql3.statements.TransactionStatement.TRANSACTIONS_DISABLED_MESSAGE; import static org.apache.cassandra.schema.SchemaConstants.ACCORD_KEYSPACE_NAME; +import static org.junit.Assert.assertEquals; public class AccordFeatureFlagTest extends TestBaseImpl { @@ -55,7 +54,7 @@ public class AccordFeatureFlagTest extends TestBaseImpl { try (Cluster cluster = init(Cluster.build(1) .withoutVNodes() - .withConfig(c -> c.with(Feature.NETWORK).set("accord_transactions_enabled", "false")) + .withConfig(c -> c.with(Feature.NETWORK).set("accord.enabled", "false")) .start())) { cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (k int, c int, v int, primary key (k, c))"); @@ -91,7 +90,7 @@ public class AccordFeatureFlagTest extends TestBaseImpl try (Cluster cluster = Cluster.build(1) .withoutVNodes() .withConfig(c -> c.with(Feature.NETWORK) - .set("accord_transactions_enabled", "false") + .set("accord.enabled", "false") .set("legacy_paxos_strategy", "accord")).createWithoutStarting()) { diff --git a/test/unit/org/apache/cassandra/config/DatabaseDescriptorRefTest.java b/test/unit/org/apache/cassandra/config/DatabaseDescriptorRefTest.java index fa28ea4f4c..cee7552146 100644 --- a/test/unit/org/apache/cassandra/config/DatabaseDescriptorRefTest.java +++ b/test/unit/org/apache/cassandra/config/DatabaseDescriptorRefTest.java @@ -72,11 +72,12 @@ public class DatabaseDescriptorRefTest "org.apache.cassandra.auth.Cacheable", "org.apache.cassandra.auth.IAuthenticator", "org.apache.cassandra.auth.IAuthorizer", - "org.apache.cassandra.auth.IInternodeAuthenticator", "org.apache.cassandra.auth.ICIDRAuthorizer", "org.apache.cassandra.auth.ICIDRAuthorizer$CIDRAuthorizerMode", + "org.apache.cassandra.auth.IInternodeAuthenticator", "org.apache.cassandra.auth.INetworkAuthorizer", "org.apache.cassandra.auth.IRoleManager", + "org.apache.cassandra.config.AccordSpec", "org.apache.cassandra.config.CassandraRelevantProperties", "org.apache.cassandra.config.CassandraRelevantProperties$PropertyConverter", "org.apache.cassandra.config.Config", @@ -123,8 +124,8 @@ public class DatabaseDescriptorRefTest "org.apache.cassandra.config.DurationSpec$IntMillisecondsBound", "org.apache.cassandra.config.DurationSpec$IntMinutesBound", "org.apache.cassandra.config.DurationSpec$IntSecondsBound", - "org.apache.cassandra.config.DurationSpec$LongMillisecondsBound", "org.apache.cassandra.config.DurationSpec$LongMicrosecondsBound", + "org.apache.cassandra.config.DurationSpec$LongMillisecondsBound", "org.apache.cassandra.config.DurationSpec$LongNanosecondsBound", "org.apache.cassandra.config.DurationSpec$LongSecondsBound", "org.apache.cassandra.config.EncryptionOptions", @@ -144,24 +145,24 @@ public class DatabaseDescriptorRefTest "org.apache.cassandra.config.ParameterizedClass", "org.apache.cassandra.config.RepairConfig", "org.apache.cassandra.config.RepairRetrySpec", + "org.apache.cassandra.config.ReplicaFilteringProtectionOptions", "org.apache.cassandra.config.RetrySpec", "org.apache.cassandra.config.RetrySpec$MaxAttempt", "org.apache.cassandra.config.RetrySpec$Type", - "org.apache.cassandra.config.ReplicaFilteringProtectionOptions", "org.apache.cassandra.config.StartupChecksOptions", + "org.apache.cassandra.config.StartupChecksOptions", + "org.apache.cassandra.config.StorageAttachedIndexOptions", + "org.apache.cassandra.config.SubnetGroups", "org.apache.cassandra.config.SubnetGroups", "org.apache.cassandra.config.TrackWarnings", + "org.apache.cassandra.config.TrackWarnings", + "org.apache.cassandra.config.TransparentDataEncryptionOptions", "org.apache.cassandra.config.TransparentDataEncryptionOptions", "org.apache.cassandra.config.YamlConfigurationLoader", "org.apache.cassandra.config.YamlConfigurationLoader$CustomConstructor", + "org.apache.cassandra.config.YamlConfigurationLoader$CustomConstructor", "org.apache.cassandra.config.YamlConfigurationLoader$PropertiesChecker", "org.apache.cassandra.config.YamlConfigurationLoader$PropertiesChecker$1", - "org.apache.cassandra.config.YamlConfigurationLoader$CustomConstructor", - "org.apache.cassandra.config.TransparentDataEncryptionOptions", - "org.apache.cassandra.config.StartupChecksOptions", - "org.apache.cassandra.config.SubnetGroups", - "org.apache.cassandra.config.TrackWarnings", - "org.apache.cassandra.config.StorageAttachedIndexOptions", "org.apache.cassandra.db.ConsistencyLevel", "org.apache.cassandra.db.commitlog.AbstractCommitLogSegmentManager", "org.apache.cassandra.db.commitlog.CommitLog", @@ -227,9 +228,9 @@ public class DatabaseDescriptorRefTest "org.apache.cassandra.io.sstable.format.SSTableReaderLoadingBuilder", "org.apache.cassandra.io.sstable.format.SSTableReaderWithFilter", "org.apache.cassandra.io.sstable.format.SSTableReaderWithFilter$Builder", - "org.apache.cassandra.io.sstable.format.SortedTableReaderLoadingBuilder", "org.apache.cassandra.io.sstable.format.SSTableWriter", "org.apache.cassandra.io.sstable.format.SSTableWriter$Builder", + "org.apache.cassandra.io.sstable.format.SortedTableReaderLoadingBuilder", "org.apache.cassandra.io.sstable.format.SortedTableWriter", "org.apache.cassandra.io.sstable.format.SortedTableWriter$Builder", "org.apache.cassandra.io.sstable.format.Version", @@ -268,23 +269,23 @@ public class DatabaseDescriptorRefTest "org.apache.cassandra.locator.ReplicaCollection", "org.apache.cassandra.locator.SeedProvider", "org.apache.cassandra.locator.SimpleSeedProvider", + "org.apache.cassandra.security.AbstractCryptoProvider", "org.apache.cassandra.security.EncryptionContext", "org.apache.cassandra.security.ISslContextFactory", "org.apache.cassandra.security.SSLFactory", "org.apache.cassandra.service.CacheService$CacheType", - "org.apache.cassandra.security.AbstractCryptoProvider", "org.apache.cassandra.transport.ProtocolException", "org.apache.cassandra.utils.Closeable", "org.apache.cassandra.utils.CloseableIterator", "org.apache.cassandra.utils.FBUtilities", "org.apache.cassandra.utils.FBUtilities$1", "org.apache.cassandra.utils.Pair", + "org.apache.cassandra.utils.StorageCompatibilityMode", "org.apache.cassandra.utils.binlog.BinLogOptions", "org.apache.cassandra.utils.concurrent.RefCounted", "org.apache.cassandra.utils.concurrent.SelfRefCounted", "org.apache.cassandra.utils.concurrent.Transactional", "org.apache.cassandra.utils.concurrent.UncheckedInterruptedException", - "org.apache.cassandra.utils.StorageCompatibilityMode" }; static final Set<String> checkedClasses = new HashSet<>(Arrays.asList(validClasses)); diff --git a/test/unit/org/apache/cassandra/config/YamlConfigurationLoaderTest.java b/test/unit/org/apache/cassandra/config/YamlConfigurationLoaderTest.java index bbc7bf2c82..372619d145 100644 --- a/test/unit/org/apache/cassandra/config/YamlConfigurationLoaderTest.java +++ b/test/unit/org/apache/cassandra/config/YamlConfigurationLoaderTest.java @@ -436,11 +436,11 @@ public class YamlConfigurationLoaderTest { Config c = fromType(type, "available_processors", 4); assertThat(c.available_processors).isEqualTo(new OptionaldPositiveInt(4)); - assertThat(c.accord_shard_count).isEqualTo(OptionaldPositiveInt.UNDEFINED); + assertThat(c.accord.shard_count).isEqualTo(OptionaldPositiveInt.UNDEFINED); - c = fromType(type, "available_processors", 3, "accord_shard_count", 1); + c = fromType(type, "available_processors", 3, "accord.shard_count", 1); assertThat(c.available_processors).isEqualTo(new OptionaldPositiveInt(3)); - assertThat(c.accord_shard_count).isEqualTo(new OptionaldPositiveInt(1)); + assertThat(c.accord.shard_count).isEqualTo(new OptionaldPositiveInt(1)); } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org