Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 96040200C73 for ; Tue, 25 Apr 2017 18:03:56 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 94B47160B9E; Tue, 25 Apr 2017 16:03:56 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id BCA92160BB3 for ; Tue, 25 Apr 2017 18:03:55 +0200 (CEST) Received: (qmail 69906 invoked by uid 500); 25 Apr 2017 16:03:54 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 69817 invoked by uid 99); 25 Apr 2017 16:03:54 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 25 Apr 2017 16:03:54 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 99EBADFB92; Tue, 25 Apr 2017 16:03:54 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: jake@apache.org To: commits@cassandra.apache.org Date: Tue, 25 Apr 2017 16:03:55 -0000 Message-Id: <8f06302d34d94d9f93584b36d04065cb@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [2/3] cassandra git commit: Fix compaction-stress by using daemonInitialization archived-at: Tue, 25 Apr 2017 16:03:56 -0000 Fix compaction-stress by using daemonInitialization Patch by Jay Zhuang; reviewed by tjake for CASSANDRA-13188 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2369faab Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2369faab Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2369faab Branch: refs/heads/trunk Commit: 2369faab7959d57c8f6bc1f324de47c5aeaf19b9 Parents: 1a37992 Author: Jay Zhuang Authored: Tue Apr 25 09:21:00 2017 -0400 Committer: T Jake Luciani Committed: Tue Apr 25 09:25:44 2017 -0400 ---------------------------------------------------------------------- CHANGES.txt | 2 +- build.xml | 2 +- test/resources/blogpost.yaml | 69 ++++++++++++++++++++ .../cassandra/tools/CompactionStressTest.java | 60 +++++++++++++++++ .../io/sstable/StressCQLSSTableWriter.java | 4 +- .../cassandra/stress/CompactionStress.java | 2 +- 6 files changed, 135 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/2369faab/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index c0aceb3..1690e31 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.11.0 + * Fix compaction-stress by using daemonInitialization (CASSANDRA-13188) * V5 protocol flags decoding broken (CASSANDRA-13443) * Use write lock not read lock for removing sstables from compaction strategies. (CASSANDRA-13422) * Use corePoolSize equal to maxPoolSize in JMXEnabledThreadPoolExecutors (CASSANDRA-13329) @@ -101,7 +102,6 @@ Merged from 2.1: * Fix Thread Leak in OutboundTcpConnection (CASSANDRA-13204) * Coalescing strategy can enter infinite loop (CASSANDRA-13159) - 3.10 * Fix secondary index queries regression (CASSANDRA-13013) * Add duration type to the protocol V5 (CASSANDRA-12850) http://git-wip-us.apache.org/repos/asf/cassandra/blob/2369faab/build.xml ---------------------------------------------------------------------- diff --git a/build.xml b/build.xml index 1af8958..bf1577e 100644 --- a/build.xml +++ b/build.xml @@ -1719,7 +1719,7 @@ ]]> - + http://git-wip-us.apache.org/repos/asf/cassandra/blob/2369faab/test/resources/blogpost.yaml ---------------------------------------------------------------------- diff --git a/test/resources/blogpost.yaml b/test/resources/blogpost.yaml new file mode 100644 index 0000000..13987e0 --- /dev/null +++ b/test/resources/blogpost.yaml @@ -0,0 +1,69 @@ +# Copied from https://gist.github.com/tjake/8995058fed11d9921e31 +### DML ### + +# Keyspace Name +keyspace: stresscql + +# The CQL for creating a keyspace (optional if it already exists) +keyspace_definition: | + CREATE KEYSPACE stresscql WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3}; + +# Table name +table: blogposts + +# The CQL for creating a table you wish to stress (optional if it already exists) +table_definition: | + CREATE TABLE blogposts ( + domain text, + published_date timeuuid, + url text, + author text, + title text, + body text, + PRIMARY KEY(domain, published_date) + ) WITH CLUSTERING ORDER BY (published_date DESC) + AND compaction = { 'class':'LeveledCompactionStrategy' } + AND comment='A table to hold blog posts' + +### Column Distribution Specifications ### + +columnspec: + - name: domain + size: gaussian(5..100) #domain names are relatively short + population: uniform(1..10M) #10M possible domains to pick from + + - name: published_date + cluster: fixed(1000) #under each domain we will have max 1000 posts + + - name: url + size: uniform(30..300) + + - name: title #titles shouldn't go beyond 200 chars + size: gaussian(10..200) + + - name: author + size: uniform(5..20) #author names should be short + + - name: body + size: gaussian(100..5000) #the body of the blog post can be long + +### Batch Ratio Distribution Specifications ### + +insert: + partitions: fixed(1) # Our partition key is the domain so only insert one per batch + + select: fixed(1)/1000 # We have 1000 posts per domain so 1/1000 will allow 1 post per batch + + batchtype: UNLOGGED # Unlogged batches + + +# +# A list of queries you wish to run against the schema +# +queries: + singlepost: + cql: select * from blogposts where domain = ? LIMIT 1 + fields: samerow + timeline: + cql: select url, title, published_date from blogposts where domain = ? LIMIT 10 + fields: samerow \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cassandra/blob/2369faab/test/unit/org/apache/cassandra/tools/CompactionStressTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/tools/CompactionStressTest.java b/test/unit/org/apache/cassandra/tools/CompactionStressTest.java new file mode 100644 index 0000000..c8b0b97 --- /dev/null +++ b/test/unit/org/apache/cassandra/tools/CompactionStressTest.java @@ -0,0 +1,60 @@ +/* + * 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.tools; + +import java.io.File; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.apache.cassandra.OrderedJUnit4ClassRunner; + +@RunWith(OrderedJUnit4ClassRunner.class) +public class CompactionStressTest extends ToolsTester +{ + @Test + public void testNoArgs() + { + runTool(0, "org.apache.cassandra.stress.CompactionStress"); + } + + @Test + public void testWriteAndCompact() + { + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("blogpost.yaml").getFile()); + String profileFile = file.getAbsolutePath(); + + runTool(0, + "org.apache.cassandra.stress.CompactionStress", + "write", + "-d", "build/test/cassandra", + "-g", "0", + "-p", profileFile, + "-t", "4"); + + runTool(0, + "org.apache.cassandra.stress.CompactionStress", + "compact", + "-d", "build/test/cassandra", + "-p", profileFile, + "-t", "4"); + } + +} http://git-wip-us.apache.org/repos/asf/cassandra/blob/2369faab/tools/stress/src/org/apache/cassandra/io/sstable/StressCQLSSTableWriter.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/io/sstable/StressCQLSSTableWriter.java b/tools/stress/src/org/apache/cassandra/io/sstable/StressCQLSSTableWriter.java index 41a0d6f..56f0297 100644 --- a/tools/stress/src/org/apache/cassandra/io/sstable/StressCQLSSTableWriter.java +++ b/tools/stress/src/org/apache/cassandra/io/sstable/StressCQLSSTableWriter.java @@ -609,7 +609,9 @@ public class StressCQLSSTableWriter implements Closeable KeyspaceMetadata ksm = Schema.instance.getKSMetaData(keyspace); CFMetaData cfMetaData = ksm.tables.getNullable(schemaStatement.columnFamily()); - assert cfMetaData == null; + + if (cfMetaData != null) + return Schema.instance.getColumnFamilyStoreInstance(cfMetaData.cfId); CreateTableStatement statement = (CreateTableStatement) schemaStatement.prepare(ksm.types).statement; statement.validate(ClientState.forInternalCalls()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/2369faab/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java b/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java index 4180524..1860fef 100644 --- a/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java +++ b/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java @@ -74,7 +74,7 @@ public abstract class CompactionStress implements Runnable static { - DatabaseDescriptor.toolInitialization(); + DatabaseDescriptor.daemonInitialization(); } List getDataDirectories()