You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2017/12/01 21:13:38 UTC
cassandra git commit: Add GroupCommitLogService
Repository: cassandra
Updated Branches:
refs/heads/trunk 4c80eeece -> f3f90c189
Add GroupCommitLogService
patch by Yuji Ito and jasobrown; reviewed by Ariel Weisberg for CASSANDRA-13530
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f3f90c18
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f3f90c18
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f3f90c18
Branch: refs/heads/trunk
Commit: f3f90c1896eab4f3fb5507b0cf348e2f149db5d1
Parents: 4c80eee
Author: Yuji Ito <yu...@imagine-orb.com>
Authored: Mon Nov 13 07:59:10 2017 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Fri Dec 1 13:12:20 2017 -0800
----------------------------------------------------------------------
.circleci/config.yml | 254 +++++++++++++++++++
NEWS.txt | 5 +
conf/cassandra.yaml | 19 +-
.../org/apache/cassandra/config/Config.java | 8 +-
.../cassandra/config/DatabaseDescriptor.java | 24 +-
.../db/commitlog/BatchCommitLogService.java | 11 +-
.../cassandra/db/commitlog/CommitLog.java | 17 +-
.../db/commitlog/GroupCommitLogService.java | 43 ++++
.../db/commitlog/BatchCommitLogStressTest.java | 37 +++
.../db/commitlog/CommitLogStressTest.java | 178 ++++++-------
.../db/commitlog/GroupCommitLogStressTest.java | 38 +++
.../commitlog/PeriodicCommitLogStressTest.java | 39 +++
.../db/commitlog/BatchCommitLogTest.java | 42 +++
.../cassandra/db/commitlog/CommitLogTest.java | 4 +-
.../db/commitlog/GroupCommitLogTest.java | 43 ++++
.../db/commitlog/PeriodicCommitLogTest.java | 45 ++++
16 files changed, 695 insertions(+), 112 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/.circleci/config.yml
----------------------------------------------------------------------
diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 0000000..387e0f6
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,254 @@
+env_vars: &env_vars
+ JAVA_HOME: /usr/local/openjdk8u154-cassandra-b02
+ ANT_HOME: /usr/local/apache-ant-1.10.1
+ LANG: en_US.UTF-8
+ JDK_HOME: /usr/local/openjdk8u154-cassandra-b02
+ JAVA8_HOME: /usr/local/openjdk8u154-cassandra-b02
+ JAVA7_HOME: /usr/local/openjdk7u82-cassandra-b02
+ DEBUG: true
+ PRINT_DEBUG: true
+ KEEP_TEST_DIR: true
+ CASSANDRA_DIR: /home/cassandra/cassandra
+ DEFAULT_DIR: /home/cassandra/cassandra-dtest
+ PYTHONIOENCODING: utf-8
+ PYTHONUNBUFFERED: true
+ CASS_DRIVER_NO_EXTENSIONS: true
+ CASS_DRIVER_NO_CYTHON: true
+ CCM_MAX_HEAP_SIZE: 3072M
+ CCM_HEAP_NEWSIZE: 256M
+version: 2
+jobs:
+ build:
+ resource_class: xlarge
+ working_directory: ~/
+ shell: /bin/bash -eo pipefail -l
+ docker:
+ - image: kjellman/cassandra-test:0.1.2
+ environment:
+ <<: *env_vars
+ steps:
+ - run:
+ name: Log Environment Information
+ command: |
+ echo '*** id ***'
+ id
+ echo '*** cat /proc/cpuinfo ***'
+ cat /proc/cpuinfo
+ echo '*** free -m ***'
+ free -m
+ echo '*** df -m ***'
+ df -m
+ echo '*** ifconfig -a ***'
+ ifconfig -a
+ echo '*** uname -a ***'
+ uname -a
+ echo '*** mount ***'
+ mount
+ echo '*** env ***'
+ env
+ - run:
+ name: Clone Cassandra Repository (via git)
+ command: |
+ export LANG=en_US.UTF-8
+ git clone --single-branch --depth 1 --branch $CIRCLE_BRANCH git://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git ~/cassandra
+ - run:
+ name: Build Cassandra
+ command: |
+ export LANG=en_US.UTF-8
+ export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
+ export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin
+ cd ~/cassandra
+ # Loop to prevent failure due to maven-ant-tasks not downloading a jar..
+ for x in $(seq 1 3); do
+ ${ANT_HOME}/bin/ant clean jar
+ RETURN="$?"
+ if [ "${RETURN}" -eq "0" ]; then
+ break
+ fi
+ done
+ # Exit, if we didn't build successfully
+ if [ "${RETURN}" -ne "0" ]; then
+ echo "Build failed with exit code: ${RETURN}"
+ exit ${RETURN}
+ fi
+ no_output_timeout: 20m
+ - persist_to_workspace:
+ root: /home/cassandra
+ paths:
+ - cassandra
+ - .m2
+ unit_tests:
+ resource_class: xlarge
+ parallelism: 100
+ working_directory: ~/
+ shell: /bin/bash -eo pipefail -l
+ docker:
+ - image: kjellman/cassandra-test:0.1.2
+ environment:
+ <<: *env_vars
+ steps:
+ - attach_workspace:
+ at: /home/cassandra
+ - run:
+ name: Determine Tests to Run
+ no_output_timeout: 10m
+ command: |
+ # reminder: this code (along with all the steps) is independently executed on every circle container
+ # so the goal here is to get the circleci script to return the tests *this* container will run
+ # which we do via the `circleci` cli tool.
+
+ export LANG=en_US.UTF-8
+ rm -fr ~/cassandra-dtest/upgrade_tests
+ echo "***java tests***"
+
+ # get all of our unit test filenames
+ set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
+
+ # split up the unit tests into groups based on the number of containers we have
+ set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+ set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | cut -c 37-1000000 | grep "Test\.java$" > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+ echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+ cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+ - run:
+ name: Run Unit Tests
+ command: |
+ export LANG=en_US.UTF-8
+ export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
+ export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin
+
+ cd ~/cassandra
+ ant testclasslist -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt || true
+ no_output_timeout: 15m
+ - store_test_results:
+ path: ~/cassandra/build/test/output/
+ - store_artifacts:
+ path: ~/cassandra/build/test/output
+ destination: junitxml
+ - store_artifacts:
+ path: ~/cassandra/build/test/logs
+ destination: logs
+ dtests:
+ resource_class: xlarge
+ parallelism: 100
+ working_directory: ~/
+ shell: /bin/bash -eo pipefail -l
+ docker:
+ - image: kjellman/cassandra-test:0.1.2
+ environment:
+ <<: *env_vars
+ steps:
+ - attach_workspace:
+ at: /home/cassandra
+ - run:
+ name: Clone Cassandra dtest Repository (via git)
+ command: |
+ export LANG=en_US.UTF-8
+ git clone --single-branch --depth 1 git://github.com/jasobrown/cassandra-dtest.git ~/cassandra-dtest
+ - run:
+ name: Configure virtualenv and python Dependencies
+ command: |
+ # note, this should be super quick as all dependencies should be pre-installed in the docker image
+ # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+ # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+ # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+ export LANG=en_US.UTF-8
+ source ~/env/bin/activate
+ export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin
+ export CASS_DRIVER_NO_EXTENSIONS=true
+ export CASS_DRIVER_NO_CYTHON=true
+ pip install -r ~/cassandra-dtest/requirements.txt
+ pip freeze
+ - run:
+ name: Determine Tests to Run
+ no_output_timeout: 10m
+ command: |
+ # reminder: this code (along with all the steps) is independently executed on every circle container
+ # so the goal here is to get the circleci script to return the tests *this* container will run
+ # which we do via the `circleci` cli tool.
+
+ export LANG=en_US.UTF-8
+ echo "***python tests***"
+ cd cassandra-dtest
+ export CASSANDRA_DIR=/home/cassandra/cassandra
+ source ~/env/bin/activate
+ export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin
+
+ echo "***regular python tests***"
+ set -eo pipefail && ./run_dtests.py --vnodes true --nose-options='--verbosity=3 --dtest-collect-only' 2>&1 | tee /tmp/pythontestlist
+ set -eo pipefail && cat /tmp/pythontestlist | grep -v 'upgrade_tests' | grep "... ok" | rev | cut -c 8- | rev > /tmp/testlist_trimmed
+ set -eo pipefail && circleci tests split --split-by=timings --timings-type=classname /tmp/testlist_trimmed > /tmp/python_tests.txt
+ cat /tmp/python_tests.txt
+ cat /tmp/python_tests.txt | grep -v "\-novnode" | grep -v "\-offheap" > /tmp/regular_python_tests.txt
+ cat /tmp/regular_python_tests.txt | tr '\n' ' ' > /tmp/regular_python_tests_final.txt
+ cat /tmp/regular_python_tests_final.txt
+
+ echo "***novnode python tests***"
+ rm /tmp/pythontestlist || true
+ ./run_dtests.py --vnodes false --nose-options='--verbosity=3 --dtest-collect-only --attr=!resource-intensive' 2>&1 | tee -a /tmp/pythontestlist
+ set -eo pipefail && cat /tmp/pythontestlist | grep -v 'upgrade_tests' | grep "... ok" | rev | cut -c 8- | rev > /tmp/testlist_trimmed
+ set -eo pipefail && circleci tests split --split-by=timings --timings-type=classname /tmp/testlist_trimmed > /tmp/novnode_python_tests.txt
+ cat /tmp/novnode_python_tests.txt | tr '\n' ' ' > /tmp/novnode_python_tests_final.txt
+ cat /tmp/novnode_python_tests_final.txt
+
+ # echo "***offheap python tests***"
+ # rm /tmp/pythontestlist || true
+ # TEST_TAG=offheap ./run_dtests.py --vnodes true --nose-options='--verbosity=3 --dtest-collect-only --attr=!resource-intensive' 2>&1 | grep -v "upgrade_tests." | tee -a /tmp/pythontestlist
+ # cat /tmp/python_tests.txt | grep "\-offheap" | rev | cut -c 9- | rev > /tmp/offheap_python_tests.txt
+ # cat /tmp/offheap_python_tests.txt | tr '\n' ' ' > /tmp/offheap_python_tests_final.txt
+ # cat /tmp/offheap_python_tests_final.txt
+ - run:
+ name: Run dtests
+ no_output_timeout: 30m
+ command: |
+ echo "cat /tmp/regular_python_tests_final.txt"
+ cat /tmp/regular_python_tests_final.txt
+
+ source ~/env/bin/activate
+ export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin
+
+ cd ~/cassandra-dtest
+ mkdir -p /tmp/dtest
+ export NUM_TOKENS="32"
+
+ echo "env: $(env)"
+ echo "** done env"
+ ./run_dtests.py --vnodes true --nose-options="--verbosity=3 --with-xunit --nocapture" `cat /tmp/regular_python_tests_final.txt` 2>&1 | tee /tmp/dtest/stdout.txt || true
+
+ # store the test results somewhere where we can pick them up
+ mv nosetests.xml nosetests-regular.xml
+ mkdir -p /tmp/results/ || true
+ find ~/cassandra-dtest/ -name "*.xml" -exec cp {} /tmp/results/ \;
+ - run:
+ name: Run dtests (without vnodes)
+ no_output_timeout: 30m
+ command: |
+ source ~/env/bin/activate
+ export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin
+
+ cd ~/cassandra-dtest
+ export TEST_TAG="novnodes"
+ ./run_dtests.py --vnodes false --nose-options="--verbosity=3 --with-dtestxunit --nocapture --attr=!resource-intensive" `cat /tmp/novnode_python_tests_final.txt` 2>&1 | tee /tmp/dtest/stdout-novnodes.txt || true
+
+ # store the test results somewhere where we can pick them up
+ mv nosetests.xml nosetests-novnode.xml
+ mkdir -p /tmp/results/ || true
+ find ~/cassandra-dtest/ -name "*.xml" -exec cp {} /tmp/results/ \;
+ - store_test_results:
+ path: /tmp/results/
+ - store_artifacts:
+ path: /tmp/dtest
+ destination: dtest
+ - store_artifacts:
+ path: ~/cassandra-dtest/logs
+ destination: dtest_logs
+workflows:
+ version: 2
+ build_and_run_tests:
+ jobs:
+ - build
+ - unit_tests:
+ requires:
+ - build
+ - dtests:
+ requires:
+ - unit_tests
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/NEWS.txt
----------------------------------------------------------------------
diff --git a/NEWS.txt b/NEWS.txt
index 510577e..622cc54 100644
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -82,6 +82,11 @@ Upgrading
the per token range view building status is stored in the new table
`system.view_builds_in_progress`. The old table `system.views_builds_in_progress`
is no longer used and can be removed. See CASSANDRA-12245 for more details.
+ - Config option commitlog_sync_batch_window_in_ms has been deprecated as it's
+ documentation has been incorrect and the setting itself near useless.
+ Batch mode remains a valid commit log mode, however.
+ - There is a new commit log mode, group, which is similar to batch mode
+ but blocks for up to a configurable number of milliseconds between disk flushes.
Materialized Views
-------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/conf/cassandra.yaml
----------------------------------------------------------------------
diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml
index 7328a01..9cfc21c 100644
--- a/conf/cassandra.yaml
+++ b/conf/cassandra.yaml
@@ -358,19 +358,22 @@ counter_cache_save_period: 7200
# If not set, the default directory is $CASSANDRA_HOME/data/saved_caches.
# saved_caches_directory: /var/lib/cassandra/saved_caches
-# commitlog_sync may be either "periodic" or "batch."
+# commitlog_sync may be either "periodic", "group", or "batch."
#
# When in batch mode, Cassandra won't ack writes until the commit log
-# has been fsynced to disk. It will wait
-# commitlog_sync_batch_window_in_ms milliseconds between fsyncs.
-# This window should be kept short because the writer threads will
-# be unable to do extra work while waiting. (You may need to increase
-# concurrent_writes for the same reason.)
+# has been flushed to disk. Each incoming write will trigger the flush task.
+# commitlog_sync_batch_window_in_ms is a deprecated value. Previously it had
+# almost no value, and is being removed.
#
-# commitlog_sync: batch
# commitlog_sync_batch_window_in_ms: 2
#
-# the other option is "periodic" where writes may be acked immediately
+# group mode is similar to batch mode, where Cassandra will not ack writes
+# until the commit log has been flushed to disk. The difference is group
+# mode will wait up to commitlog_sync_group_window_in_ms between flushes.
+#
+# commitlog_sync_group_window_in_ms: 1000
+#
+# the default option is "periodic" where writes may be acked immediately
# and the CommitLog is simply synced every commitlog_sync_period_in_ms
# milliseconds.
commitlog_sync: periodic
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/src/java/org/apache/cassandra/config/Config.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java
index f63d94d..bc91df9 100644
--- a/src/java/org/apache/cassandra/config/Config.java
+++ b/src/java/org/apache/cassandra/config/Config.java
@@ -185,7 +185,12 @@ public class Config
public String commitlog_directory;
public Integer commitlog_total_space_in_mb;
public CommitLogSync commitlog_sync;
+
+ /**
+ * @deprecated since 4.0 This value was near useless, and we're not using it anymore
+ */
public double commitlog_sync_batch_window_in_ms = Double.NaN;
+ public double commitlog_sync_group_window_in_ms = Double.NaN;
public int commitlog_sync_period_in_ms;
public int commitlog_segment_size_in_mb = 32;
public ParameterizedClass commitlog_compression;
@@ -383,7 +388,8 @@ public class Config
public enum CommitLogSync
{
periodic,
- batch
+ batch,
+ group
}
public enum InternodeCompression
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index 58c0bf4..9083550 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -332,15 +332,23 @@ public class DatabaseDescriptor
if (conf.commitlog_sync == Config.CommitLogSync.batch)
{
- if (Double.isNaN(conf.commitlog_sync_batch_window_in_ms) || conf.commitlog_sync_batch_window_in_ms <= 0d)
+ if (conf.commitlog_sync_period_in_ms != 0)
{
- throw new ConfigurationException("Missing value for commitlog_sync_batch_window_in_ms: positive double value expected.", false);
+ throw new ConfigurationException("Batch sync specified, but commitlog_sync_period_in_ms found. Only specify commitlog_sync_batch_window_in_ms when using batch sync", false);
+ }
+ logger.debug("Syncing log with batch mode");
+ }
+ else if (conf.commitlog_sync == CommitLogSync.group)
+ {
+ if (Double.isNaN(conf.commitlog_sync_group_window_in_ms) || conf.commitlog_sync_group_window_in_ms <= 0d)
+ {
+ throw new ConfigurationException("Missing value for commitlog_sync_group_window_in_ms: positive double value expected.", false);
}
else if (conf.commitlog_sync_period_in_ms != 0)
{
- throw new ConfigurationException("Batch sync specified, but commitlog_sync_period_in_ms found. Only specify commitlog_sync_batch_window_in_ms when using batch sync", false);
+ throw new ConfigurationException("Group sync specified, but commitlog_sync_period_in_ms found. Only specify commitlog_sync_group_window_in_ms when using group sync", false);
}
- logger.debug("Syncing log with a batch window of {}", conf.commitlog_sync_batch_window_in_ms);
+ logger.debug("Syncing log with a group window of {}", conf.commitlog_sync_period_in_ms);
}
else
{
@@ -1784,14 +1792,14 @@ public class DatabaseDescriptor
conf.native_transport_max_concurrent_connections_per_ip = native_transport_max_concurrent_connections_per_ip;
}
- public static double getCommitLogSyncBatchWindow()
+ public static double getCommitLogSyncGroupWindow()
{
- return conf.commitlog_sync_batch_window_in_ms;
+ return conf.commitlog_sync_group_window_in_ms;
}
- public static void setCommitLogSyncBatchWindow(double windowMillis)
+ public static void setCommitLogSyncGroupWindow(double windowMillis)
{
- conf.commitlog_sync_batch_window_in_ms = windowMillis;
+ conf.commitlog_sync_group_window_in_ms = windowMillis;
}
public static int getCommitLogSyncPeriod()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java b/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java
index 4edfa34..78bf30c 100644
--- a/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java
+++ b/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java
@@ -17,13 +17,18 @@
*/
package org.apache.cassandra.db.commitlog;
-import org.apache.cassandra.config.DatabaseDescriptor;
-
class BatchCommitLogService extends AbstractCommitLogService
{
+ /**
+ * Batch mode does not rely on the sync thread in {@link AbstractCommitLogService} to wake up for triggering
+ * the disk sync. Instead we trigger it explicitly in {@link #maybeWaitForSync(CommitLogSegment.Allocation)}.
+ * This value here is largely irrelevant, but should high enough so the sync thread is not continually waking up.
+ */
+ private static final int POLL_TIME_MILLIS = 1000;
+
public BatchCommitLogService(CommitLog commitLog)
{
- super(commitLog, "COMMIT-LOG-WRITER", (int) DatabaseDescriptor.getCommitLogSyncBatchWindow());
+ super(commitLog, "COMMIT-LOG-WRITER", POLL_TIME_MILLIS);
}
protected void maybeWaitForSync(CommitLogSegment.Allocation alloc)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
index a4978b1..3a7c792 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
@@ -104,9 +104,20 @@ public class CommitLog implements CommitLogMBean
this.archiver = archiver;
metrics = new CommitLogMetrics();
- executor = DatabaseDescriptor.getCommitLogSync() == Config.CommitLogSync.batch
- ? new BatchCommitLogService(this)
- : new PeriodicCommitLogService(this);
+ switch (DatabaseDescriptor.getCommitLogSync())
+ {
+ case periodic:
+ executor = new PeriodicCommitLogService(this);
+ break;
+ case batch:
+ executor = new BatchCommitLogService(this);
+ break;
+ case group:
+ executor = new GroupCommitLogService(this);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown commitlog service type: " + DatabaseDescriptor.getCommitLogSync());
+ }
segmentManager = DatabaseDescriptor.isCDCEnabled()
? new CommitLogSegmentManagerCDC(this, DatabaseDescriptor.getCommitLogLocation())
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/src/java/org/apache/cassandra/db/commitlog/GroupCommitLogService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/GroupCommitLogService.java b/src/java/org/apache/cassandra/db/commitlog/GroupCommitLogService.java
new file mode 100644
index 0000000..a76923e
--- /dev/null
+++ b/src/java/org/apache/cassandra/db/commitlog/GroupCommitLogService.java
@@ -0,0 +1,43 @@
+/*
+ * 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.db.commitlog;
+
+import org.apache.cassandra.config.DatabaseDescriptor;
+
+/**
+ * A commitlog service that will block returning an ACK back to the a coordinator/client
+ * for a minimum amount of time as we wait until the the commit log segment is flushed.
+ */
+public class GroupCommitLogService extends AbstractCommitLogService
+{
+ public GroupCommitLogService(CommitLog commitLog)
+ {
+ super(commitLog, "GROUP-COMMIT-LOG-WRITER", (int) DatabaseDescriptor.getCommitLogSyncGroupWindow());
+ }
+
+ protected void maybeWaitForSync(CommitLogSegment.Allocation alloc)
+ {
+ // wait until record has been safely persisted to disk
+ pending.incrementAndGet();
+ // wait for commitlog_sync_group_window_in_ms
+ alloc.awaitDiskSync(commitLog.metrics.waitingOnCommit);
+ pending.decrementAndGet();
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/test/long/org/apache/cassandra/db/commitlog/BatchCommitLogStressTest.java
----------------------------------------------------------------------
diff --git a/test/long/org/apache/cassandra/db/commitlog/BatchCommitLogStressTest.java b/test/long/org/apache/cassandra/db/commitlog/BatchCommitLogStressTest.java
new file mode 100644
index 0000000..3665882
--- /dev/null
+++ b/test/long/org/apache/cassandra/db/commitlog/BatchCommitLogStressTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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.db.commitlog;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import org.apache.cassandra.config.Config;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.ParameterizedClass;
+import org.apache.cassandra.security.EncryptionContext;
+
+@RunWith(Parameterized.class)
+public class BatchCommitLogStressTest extends CommitLogStressTest
+{
+ public BatchCommitLogStressTest(ParameterizedClass commitLogCompression, EncryptionContext encryptionContext)
+ {
+ super(commitLogCompression, encryptionContext);
+ DatabaseDescriptor.setCommitLogSync(Config.CommitLogSync.batch);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/test/long/org/apache/cassandra/db/commitlog/CommitLogStressTest.java
----------------------------------------------------------------------
diff --git a/test/long/org/apache/cassandra/db/commitlog/CommitLogStressTest.java b/test/long/org/apache/cassandra/db/commitlog/CommitLogStressTest.java
index eb1be8b..d8909a0 100644
--- a/test/long/org/apache/cassandra/db/commitlog/CommitLogStressTest.java
+++ b/test/long/org/apache/cassandra/db/commitlog/CommitLogStressTest.java
@@ -33,7 +33,11 @@ import com.google.common.util.concurrent.RateLimiter;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
+import org.junit.Ignore;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
import io.netty.util.concurrent.FastThreadLocalThread;
import org.apache.cassandra.SchemaLoader;
@@ -45,6 +49,9 @@ import org.apache.cassandra.db.Mutation;
import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.db.partitions.PartitionUpdate;
import org.apache.cassandra.db.rows.*;
+import org.apache.cassandra.io.compress.DeflateCompressor;
+import org.apache.cassandra.io.compress.LZ4Compressor;
+import org.apache.cassandra.io.compress.SnappyCompressor;
import org.apache.cassandra.io.util.DataInputBuffer;
import org.apache.cassandra.io.util.DataInputPlus;
import org.apache.cassandra.schema.Schema;
@@ -52,7 +59,8 @@ import org.apache.cassandra.security.EncryptionContext;
import org.apache.cassandra.security.EncryptionContextGenerator;
-public class CommitLogStressTest
+@Ignore
+public abstract class CommitLogStressTest
{
static
{
@@ -80,55 +88,68 @@ public class CommitLogStressTest
return hash;
}
- public static void main(String[] args) throws Exception
+ // TODO:JEB resolve this
+// public static void main(String[] args) throws Exception
+// {
+// try
+// {
+// if (args.length >= 1)
+// {
+// NUM_THREADS = Integer.parseInt(args[0]);
+// System.out.println("Setting num threads to: " + NUM_THREADS);
+// }
+//
+// if (args.length >= 2)
+// {
+// numCells = Integer.parseInt(args[1]);
+// System.out.println("Setting num cells to: " + numCells);
+// }
+//
+// if (args.length >= 3)
+// {
+// cellSize = Integer.parseInt(args[1]);
+// System.out.println("Setting cell size to: " + cellSize + " be aware the source corpus may be small");
+// }
+//
+// if (args.length >= 4)
+// {
+// rateLimit = Integer.parseInt(args[1]);
+// System.out.println("Setting per thread rate limit to: " + rateLimit);
+// }
+// initialize();
+//
+// for (Object[] params : buildParameterizedVariants())
+// {
+// ParameterizedClass commitLogCompression = (ParameterizedClass) params[0];
+// EncryptionContext encryptionContext = (EncryptionContext) params[1];
+// CommitLogStressTest tester = new CommitLogStressTest(commitLogCompression, encryptionContext);
+// tester.cleanDir();
+// tester.testFixedSize();
+// }
+// }
+// catch (Throwable e)
+// {
+// e.printStackTrace(System.err);
+// }
+// finally
+// {
+// System.exit(0);
+// }
+// }
+
+ private boolean failed = false;
+ private volatile boolean stop = false;
+ private boolean randomSize = false;
+ private boolean discardedRun = false;
+ private CommitLogPosition discardedPos;
+
+ public CommitLogStressTest(ParameterizedClass commitLogCompression, EncryptionContext encryptionContext)
{
- try
- {
- if (args.length >= 1)
- {
- NUM_THREADS = Integer.parseInt(args[0]);
- System.out.println("Setting num threads to: " + NUM_THREADS);
- }
-
- if (args.length >= 2)
- {
- numCells = Integer.parseInt(args[1]);
- System.out.println("Setting num cells to: " + numCells);
- }
-
- if (args.length >= 3)
- {
- cellSize = Integer.parseInt(args[1]);
- System.out.println("Setting cell size to: " + cellSize + " be aware the source corpus may be small");
- }
-
- if (args.length >= 4)
- {
- rateLimit = Integer.parseInt(args[1]);
- System.out.println("Setting per thread rate limit to: " + rateLimit);
- }
- initialize();
-
- CommitLogStressTest tester = new CommitLogStressTest();
- tester.cleanDir();
- tester.testFixedSize();
- }
- catch (Throwable e)
- {
- e.printStackTrace(System.err);
- }
- finally
- {
- System.exit(0);
- }
+ DatabaseDescriptor.setCommitLogCompression(commitLogCompression);
+ DatabaseDescriptor.setEncryptionContext(encryptionContext);
+ DatabaseDescriptor.setCommitLogSegmentSize(32);
}
- boolean failed = false;
- volatile boolean stop = false;
- boolean randomSize = false;
- boolean discardedRun = false;
- CommitLogPosition discardedPos;
-
@BeforeClass
static public void initialize() throws IOException
{
@@ -166,12 +187,23 @@ public class CommitLogStressTest
}
}
+ @Parameters()
+ public static Collection<Object[]> buildParameterizedVariants()
+ {
+ return Arrays.asList(new Object[][]{
+ {null, EncryptionContextGenerator.createDisabledContext()}, // No compression, no encryption
+ {null, EncryptionContextGenerator.createContext(true)}, // Encryption
+ { new ParameterizedClass(LZ4Compressor.class.getName(), Collections.emptyMap()), EncryptionContextGenerator.createDisabledContext()},
+ { new ParameterizedClass(SnappyCompressor.class.getName(), Collections.emptyMap()), EncryptionContextGenerator.createDisabledContext()},
+ { new ParameterizedClass(DeflateCompressor.class.getName(), Collections.emptyMap()), EncryptionContextGenerator.createDisabledContext()}});
+ }
+
@Test
public void testRandomSize() throws Exception
{
randomSize = true;
discardedRun = false;
- testAllLogConfigs();
+ testLog();
}
@Test
@@ -179,8 +211,7 @@ public class CommitLogStressTest
{
randomSize = false;
discardedRun = false;
-
- testAllLogConfigs();
+ testLog();
}
@Test
@@ -188,45 +219,18 @@ public class CommitLogStressTest
{
randomSize = true;
discardedRun = true;
-
- testAllLogConfigs();
+ testLog();
}
- public void testAllLogConfigs() throws IOException, InterruptedException
+ private void testLog() throws IOException, InterruptedException
{
- failed = false;
- DatabaseDescriptor.setCommitLogSyncBatchWindow(1);
- DatabaseDescriptor.setCommitLogSyncPeriod(30);
- DatabaseDescriptor.setCommitLogSegmentSize(32);
-
- // test plain vanilla commit logs (the choice of 98% of users)
- testLog(null, EncryptionContextGenerator.createDisabledContext());
-
- // test the compression types
- testLog(new ParameterizedClass("LZ4Compressor", null), EncryptionContextGenerator.createDisabledContext());
- testLog(new ParameterizedClass("SnappyCompressor", null), EncryptionContextGenerator.createDisabledContext());
- testLog(new ParameterizedClass("DeflateCompressor", null), EncryptionContextGenerator.createDisabledContext());
-
- // test the encrypted commit log
- testLog(null, EncryptionContextGenerator.createContext(true));
- }
-
- public void testLog(ParameterizedClass compression, EncryptionContext encryptionContext) throws IOException, InterruptedException
- {
- DatabaseDescriptor.setCommitLogCompression(compression);
- DatabaseDescriptor.setEncryptionContext(encryptionContext);
-
String originalDir = DatabaseDescriptor.getCommitLogLocation();
try
{
DatabaseDescriptor.setCommitLogLocation(location);
- for (CommitLogSync sync : CommitLogSync.values())
- {
- DatabaseDescriptor.setCommitLogSync(sync);
- CommitLog commitLog = new CommitLog(CommitLogArchiver.disabled()).start();
- testLog(commitLog);
- assert !failed;
- }
+ CommitLog commitLog = new CommitLog(CommitLogArchiver.disabled()).start();
+ testLog(commitLog);
+ assert !failed;
}
finally
{
@@ -234,7 +238,7 @@ public class CommitLogStressTest
}
}
- public void testLog(CommitLog commitLog) throws IOException, InterruptedException {
+ private void testLog(CommitLog commitLog) throws IOException, InterruptedException {
System.out.format("\nTesting commit log size %.0fmb, compressor: %s, encryption enabled: %b, sync %s%s%s\n",
mb(DatabaseDescriptor.getCommitLogSegmentSize()),
commitLog.configuration.getCompressorName(),
@@ -346,7 +350,7 @@ public class CommitLogStressTest
Assert.assertTrue(ratios.isEmpty());
}
- public ScheduledExecutorService startThreads(final CommitLog commitLog, final List<CommitlogThread> threads)
+ private ScheduledExecutorService startThreads(final CommitLog commitLog, final List<CommitlogThread> threads)
{
stop = false;
for (int ii = 0; ii < NUM_THREADS; ii++) {
@@ -405,7 +409,7 @@ public class CommitLogStressTest
return maxMemory / (1024 * 1024);
}
- public static ByteBuffer randomBytes(int quantity, Random tlr)
+ private static ByteBuffer randomBytes(int quantity, Random tlr)
{
ByteBuffer slice = ByteBuffer.allocate(quantity);
ByteBuffer source = dataSource.duplicate();
@@ -428,7 +432,7 @@ public class CommitLogStressTest
volatile CommitLogPosition clsp;
- public CommitlogThread(CommitLog commitLog, Random rand)
+ CommitlogThread(CommitLog commitLog, Random rand)
{
this.commitLog = commitLog;
this.random = rand;
@@ -525,7 +529,7 @@ public class CommitLogStressTest
}
}
- class DummyHandler implements CommitLogReadHandler
+ static class DummyHandler implements CommitLogReadHandler
{
public boolean shouldSkipSegmentOnError(CommitLogReadException exception) throws IOException { return false; }
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/test/long/org/apache/cassandra/db/commitlog/GroupCommitLogStressTest.java
----------------------------------------------------------------------
diff --git a/test/long/org/apache/cassandra/db/commitlog/GroupCommitLogStressTest.java b/test/long/org/apache/cassandra/db/commitlog/GroupCommitLogStressTest.java
new file mode 100644
index 0000000..e3fa961
--- /dev/null
+++ b/test/long/org/apache/cassandra/db/commitlog/GroupCommitLogStressTest.java
@@ -0,0 +1,38 @@
+/*
+ * 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.db.commitlog;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import org.apache.cassandra.config.Config;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.ParameterizedClass;
+import org.apache.cassandra.security.EncryptionContext;
+
+@RunWith(Parameterized.class)
+public class GroupCommitLogStressTest extends CommitLogStressTest
+{
+ public GroupCommitLogStressTest(ParameterizedClass commitLogCompression, EncryptionContext encryptionContext)
+ {
+ super(commitLogCompression, encryptionContext);
+ DatabaseDescriptor.setCommitLogSync(Config.CommitLogSync.group);
+ DatabaseDescriptor.setCommitLogSyncGroupWindow(1);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/test/long/org/apache/cassandra/db/commitlog/PeriodicCommitLogStressTest.java
----------------------------------------------------------------------
diff --git a/test/long/org/apache/cassandra/db/commitlog/PeriodicCommitLogStressTest.java b/test/long/org/apache/cassandra/db/commitlog/PeriodicCommitLogStressTest.java
new file mode 100644
index 0000000..509d46a
--- /dev/null
+++ b/test/long/org/apache/cassandra/db/commitlog/PeriodicCommitLogStressTest.java
@@ -0,0 +1,39 @@
+/*
+ * 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.db.commitlog;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import org.apache.cassandra.config.Config;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.ParameterizedClass;
+import org.apache.cassandra.security.EncryptionContext;
+
+@RunWith(Parameterized.class)
+public class PeriodicCommitLogStressTest extends CommitLogStressTest
+{
+ public PeriodicCommitLogStressTest(ParameterizedClass commitLogCompression, EncryptionContext encryptionContext)
+ {
+ super(commitLogCompression, encryptionContext);
+ DatabaseDescriptor.setCommitLogSync(Config.CommitLogSync.periodic);
+ DatabaseDescriptor.setCommitLogSyncPeriod(30);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/test/unit/org/apache/cassandra/db/commitlog/BatchCommitLogTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/commitlog/BatchCommitLogTest.java b/test/unit/org/apache/cassandra/db/commitlog/BatchCommitLogTest.java
new file mode 100644
index 0000000..e62ca25
--- /dev/null
+++ b/test/unit/org/apache/cassandra/db/commitlog/BatchCommitLogTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.db.commitlog;
+
+import org.junit.BeforeClass;
+
+import org.apache.cassandra.config.Config;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.ParameterizedClass;
+import org.apache.cassandra.security.EncryptionContext;
+
+public class BatchCommitLogTest extends CommitLogTest
+{
+ public BatchCommitLogTest(ParameterizedClass commitLogCompression, EncryptionContext encryptionContext)
+ {
+ super(commitLogCompression, encryptionContext);
+ }
+
+ @BeforeClass
+ public static void setCommitLogModeDetails()
+ {
+ DatabaseDescriptor.daemonInitialization();
+ DatabaseDescriptor.setCommitLogSync(Config.CommitLogSync.batch);
+ beforeClass();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java b/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java
index 1060a72..8d04ecc 100644
--- a/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java
+++ b/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java
@@ -71,8 +71,9 @@ import static org.apache.cassandra.utils.ByteBufferUtil.bytes;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+@Ignore
@RunWith(Parameterized.class)
-public class CommitLogTest
+public abstract class CommitLogTest
{
private static final String KEYSPACE1 = "CommitLogTest";
private static final String KEYSPACE2 = "CommitLogTestNonDurable";
@@ -99,7 +100,6 @@ public class CommitLogTest
{new ParameterizedClass(DeflateCompressor.class.getName(), Collections.emptyMap()), EncryptionContextGenerator.createDisabledContext()}});
}
- @BeforeClass
public static void beforeClass() throws ConfigurationException
{
// Disable durable writes for system keyspaces to prevent system mutations, e.g. sstable_activity,
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/test/unit/org/apache/cassandra/db/commitlog/GroupCommitLogTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/commitlog/GroupCommitLogTest.java b/test/unit/org/apache/cassandra/db/commitlog/GroupCommitLogTest.java
new file mode 100644
index 0000000..8b0a506
--- /dev/null
+++ b/test/unit/org/apache/cassandra/db/commitlog/GroupCommitLogTest.java
@@ -0,0 +1,43 @@
+/*
+ * 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.db.commitlog;
+
+import org.junit.BeforeClass;
+
+import org.apache.cassandra.config.Config;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.ParameterizedClass;
+import org.apache.cassandra.security.EncryptionContext;
+
+public class GroupCommitLogTest extends CommitLogTest
+{
+ public GroupCommitLogTest(ParameterizedClass commitLogCompression, EncryptionContext encryptionContext)
+ {
+ super(commitLogCompression, encryptionContext);
+ }
+
+ @BeforeClass
+ public static void setCommitLogModeDetails()
+ {
+ DatabaseDescriptor.daemonInitialization();
+ DatabaseDescriptor.setCommitLogSync(Config.CommitLogSync.group);
+ DatabaseDescriptor.setCommitLogSyncGroupWindow(1);
+ beforeClass();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f90c18/test/unit/org/apache/cassandra/db/commitlog/PeriodicCommitLogTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/commitlog/PeriodicCommitLogTest.java b/test/unit/org/apache/cassandra/db/commitlog/PeriodicCommitLogTest.java
new file mode 100644
index 0000000..475412d
--- /dev/null
+++ b/test/unit/org/apache/cassandra/db/commitlog/PeriodicCommitLogTest.java
@@ -0,0 +1,45 @@
+/*
+ * 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.db.commitlog;
+
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+
+import org.apache.cassandra.config.Config;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.ParameterizedClass;
+import org.apache.cassandra.security.EncryptionContext;
+
+@Ignore
+public class PeriodicCommitLogTest extends CommitLogTest
+{
+ public PeriodicCommitLogTest(ParameterizedClass commitLogCompression, EncryptionContext encryptionContext)
+ {
+ super(commitLogCompression, encryptionContext);
+ }
+
+ @BeforeClass
+ public static void setCommitLogModeDetails()
+ {
+ DatabaseDescriptor.daemonInitialization();
+ DatabaseDescriptor.setCommitLogSync(Config.CommitLogSync.periodic);
+ DatabaseDescriptor.setCommitLogSyncPeriod(10 * 1000);
+ beforeClass();
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org