diff --git a/CHANGES.txt b/CHANGES.txt index 55437139b8..dc65796e33 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -64,6 +64,7 @@ * fix missing arrayOffset in FBUtilities.hash (CASSANDRA-4250) * (cql3) Add name of parameters in CqlResultSet (CASSANDRA-4242) * (cql3) Correctly validat order by queries (CASSANDRA-4246) + * rename stress to cassandra-stress for saner packaging (CASSANDRA-4256) Merged from 1.0: * Fix super columns bug where cache is not updated (CASSANDRA-4190) * fix maxTimestamp to include row tombstones (CASSANDRA-4116) diff --git a/debian/cassandra.install b/debian/cassandra.install index 33ef6c4f0c..f706bd9629 100644 --- a/debian/cassandra.install +++ b/debian/cassandra.install @@ -12,6 +12,7 @@ bin/sstable2json usr/bin bin/sstablekeys usr/bin bin/sstableloader usr/bin bin/cqlsh usr/bin +tools/bin/cassandra-stress usr/bin lib/*.jar usr/share/cassandra/lib lib/*.zip usr/share/cassandra/lib lib/licenses usr/share/doc/cassandra diff --git a/debian/rules b/debian/rules index 97e02742a2..11b78e7b6a 100755 --- a/debian/rules +++ b/debian/rules @@ -45,6 +45,10 @@ install: build dh_install build/apache-cassandra-thrift-$(VERSION).jar \ usr/share/cassandra + # Copy stress jar + dh_install build/tools/lib/stress.jar \ + usr/share/cassandra + dh_link usr/share/cassandra/apache-cassandra-$(VERSION).jar \ usr/share/cassandra/apache-cassandra.jar diff --git a/lib/concurrentlinkedhashmap-lru-1.2.jar b/lib/concurrentlinkedhashmap-lru-1.2.jar deleted file mode 100644 index 74e7636090..0000000000 Binary files a/lib/concurrentlinkedhashmap-lru-1.2.jar and /dev/null differ diff --git a/lib/concurrentlinkedhashmap-lru-1.3.jar b/lib/concurrentlinkedhashmap-lru-1.3.jar new file mode 100644 index 0000000000..7fbdf9fc06 Binary files /dev/null and b/lib/concurrentlinkedhashmap-lru-1.3.jar differ diff --git a/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCache.java b/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCache.java index 862e7392bb..8f36b15019 100644 --- a/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCache.java +++ b/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCache.java @@ -46,7 +46,7 @@ public class ConcurrentLinkedHashCache implements ICache * * @return initialized cache */ - public static ConcurrentLinkedHashCache create(int capacity) + public static ConcurrentLinkedHashCache create(long capacity) { return create(capacity, Weighers.singleton()); } @@ -62,7 +62,7 @@ public class ConcurrentLinkedHashCache implements ICache * * @return initialized cache */ - public static ConcurrentLinkedHashCache create(int weightedCapacity, Weigher weigher) + public static ConcurrentLinkedHashCache create(long weightedCapacity, Weigher weigher) { ConcurrentLinkedHashMap map = new ConcurrentLinkedHashMap.Builder() .weigher(weigher) @@ -73,12 +73,12 @@ public class ConcurrentLinkedHashCache implements ICache return new ConcurrentLinkedHashCache(map); } - public int capacity() + public long capacity() { return map.capacity(); } - public void setCapacity(int capacity) + public void setCapacity(long capacity) { map.setCapacity(capacity); } @@ -93,7 +93,7 @@ public class ConcurrentLinkedHashCache implements ICache return map.size(); } - public int weightedSize() + public long weightedSize() { return map.weightedSize(); } diff --git a/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCacheProvider.java b/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCacheProvider.java index 6367364654..b66b8b39fb 100644 --- a/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCacheProvider.java +++ b/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCacheProvider.java @@ -24,7 +24,7 @@ import org.github.jamm.MemoryMeter; public class ConcurrentLinkedHashCacheProvider implements IRowCacheProvider { - public ICache create(int capacity, boolean useMemoryWeigher) + public ICache create(long capacity, boolean useMemoryWeigher) { return ConcurrentLinkedHashCache.create(capacity, useMemoryWeigher ? createMemoryWeigher() diff --git a/src/java/org/apache/cassandra/cache/ICache.java b/src/java/org/apache/cassandra/cache/ICache.java index 758859dba7..81ffe6279e 100644 --- a/src/java/org/apache/cassandra/cache/ICache.java +++ b/src/java/org/apache/cassandra/cache/ICache.java @@ -26,9 +26,9 @@ import java.util.Set; */ public interface ICache { - public int capacity(); + public long capacity(); - public void setCapacity(int capacity); + public void setCapacity(long capacity); public void put(K key, V value); @@ -42,7 +42,7 @@ public interface ICache public int size(); - public int weightedSize(); + public long weightedSize(); public void clear(); diff --git a/src/java/org/apache/cassandra/cache/IRowCacheProvider.java b/src/java/org/apache/cassandra/cache/IRowCacheProvider.java index 8ebabf834c..2e3ff99e64 100644 --- a/src/java/org/apache/cassandra/cache/IRowCacheProvider.java +++ b/src/java/org/apache/cassandra/cache/IRowCacheProvider.java @@ -24,5 +24,5 @@ import org.apache.cassandra.db.ColumnFamily; */ public interface IRowCacheProvider { - public ICache create(int capacity, boolean useMemoryWeigher); + public ICache create(long capacity, boolean useMemoryWeigher); } diff --git a/src/java/org/apache/cassandra/cache/InstrumentingCache.java b/src/java/org/apache/cassandra/cache/InstrumentingCache.java index 0ccd111073..fda1c6b8fd 100644 --- a/src/java/org/apache/cassandra/cache/InstrumentingCache.java +++ b/src/java/org/apache/cassandra/cache/InstrumentingCache.java @@ -71,7 +71,7 @@ public class InstrumentingCache map.remove(key); } - public int getCapacity() + public long getCapacity() { return map.capacity(); } @@ -81,12 +81,12 @@ public class InstrumentingCache return capacitySetManually; } - public void updateCapacity(int capacity) + public void updateCapacity(long capacity) { map.setCapacity(capacity); } - public void setCapacity(int capacity) + public void setCapacity(long capacity) { updateCapacity(capacity); capacitySetManually = true; @@ -97,7 +97,7 @@ public class InstrumentingCache return map.size(); } - public int weightedSize() + public long weightedSize() { return map.weightedSize(); } diff --git a/src/java/org/apache/cassandra/cache/SerializingCache.java b/src/java/org/apache/cassandra/cache/SerializingCache.java index 8117593154..9e36a89f34 100644 --- a/src/java/org/apache/cassandra/cache/SerializingCache.java +++ b/src/java/org/apache/cassandra/cache/SerializingCache.java @@ -49,7 +49,7 @@ public class SerializingCache implements ICache private final ConcurrentLinkedHashMap map; private final ISerializer serializer; - public SerializingCache(int capacity, boolean useMemoryWeigher, ISerializer serializer) + public SerializingCache(long capacity, boolean useMemoryWeigher, ISerializer serializer) { this.serializer = serializer; @@ -122,12 +122,12 @@ public class SerializingCache implements ICache return freeableMemory; } - public int capacity() + public long capacity() { return map.capacity(); } - public void setCapacity(int capacity) + public void setCapacity(long capacity) { map.setCapacity(capacity); } @@ -142,7 +142,7 @@ public class SerializingCache implements ICache return map.size(); } - public int weightedSize() + public long weightedSize() { return map.weightedSize(); } diff --git a/src/java/org/apache/cassandra/cache/SerializingCacheProvider.java b/src/java/org/apache/cassandra/cache/SerializingCacheProvider.java index 645339be58..6adcd8924e 100644 --- a/src/java/org/apache/cassandra/cache/SerializingCacheProvider.java +++ b/src/java/org/apache/cassandra/cache/SerializingCacheProvider.java @@ -29,7 +29,7 @@ import org.apache.cassandra.net.MessagingService; public class SerializingCacheProvider implements IRowCacheProvider { - public ICache create(int capacity, boolean useMemoryWeigher) + public ICache create(long capacity, boolean useMemoryWeigher) { return new SerializingCache(capacity, useMemoryWeigher, new RowCacheSerializer()); } diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java index 52c1f96aea..0a18bf8725 100644 --- a/src/java/org/apache/cassandra/config/Config.java +++ b/src/java/org/apache/cassandra/config/Config.java @@ -125,11 +125,11 @@ public class Config public boolean trickle_fsync = false; public int trickle_fsync_interval_in_kb = 10240; - public Integer key_cache_size_in_mb = null; + public Long key_cache_size_in_mb = null; public int key_cache_save_period = 14400; public int key_cache_keys_to_save = Integer.MAX_VALUE; - public int row_cache_size_in_mb = 0; + public long row_cache_size_in_mb = 0; public int row_cache_save_period = 0; public int row_cache_keys_to_save = Integer.MAX_VALUE; public String row_cache_provider = ConcurrentLinkedHashCacheProvider.class.getSimpleName(); diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index afe2242828..ce6bbe76f0 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -82,7 +82,7 @@ public class DatabaseDescriptor private static RequestSchedulerId requestSchedulerId; private static RequestSchedulerOptions requestSchedulerOptions; - private static int keyCacheSizeInMB; + private static long keyCacheSizeInMB; private static IRowCacheProvider rowCacheProvider; /** @@ -1019,7 +1019,7 @@ public class DatabaseDescriptor return conf.trickle_fsync_interval_in_kb; } - public static int getKeyCacheSizeInMB() + public static long getKeyCacheSizeInMB() { return keyCacheSizeInMB; } @@ -1034,7 +1034,7 @@ public class DatabaseDescriptor return conf.key_cache_keys_to_save; } - public static int getRowCacheSizeInMB() + public static long getRowCacheSizeInMB() { return conf.row_cache_size_in_mb; } diff --git a/src/java/org/apache/cassandra/service/CacheService.java b/src/java/org/apache/cassandra/service/CacheService.java index 88fe1a061a..3a2d8e9fdd 100644 --- a/src/java/org/apache/cassandra/service/CacheService.java +++ b/src/java/org/apache/cassandra/service/CacheService.java @@ -96,7 +96,7 @@ public class CacheService implements CacheServiceMBean { logger.info("Initializing key cache with capacity of {} MBs.", DatabaseDescriptor.getKeyCacheSizeInMB()); - int keyCacheInMemoryCapacity = DatabaseDescriptor.getKeyCacheSizeInMB() * 1024 * 1024; + long keyCacheInMemoryCapacity = DatabaseDescriptor.getKeyCacheSizeInMB() * 1024 * 1024; // as values are constant size we can use singleton weigher // where 48 = 40 bytes (average size of the key) + 8 bytes (size of value) @@ -123,7 +123,7 @@ public class CacheService implements CacheServiceMBean DatabaseDescriptor.getRowCacheSizeInMB(), DatabaseDescriptor.getRowCacheProvider().getClass().getName()); - int rowCacheInMemoryCapacity = DatabaseDescriptor.getRowCacheSizeInMB() * 1024 * 1024; + long rowCacheInMemoryCapacity = DatabaseDescriptor.getRowCacheSizeInMB() * 1024 * 1024; // cache object ICache rc = DatabaseDescriptor.getRowCacheProvider().create(rowCacheInMemoryCapacity, true); @@ -208,17 +208,17 @@ public class CacheService implements CacheServiceMBean rowCache.clear(); } - public int getRowCacheCapacityInBytes() + public long getRowCacheCapacityInBytes() { return rowCache.getCapacity(); } - public int getRowCacheCapacityInMB() + public long getRowCacheCapacityInMB() { return getRowCacheCapacityInBytes() / 1024 / 1024; } - public void setRowCacheCapacityInMB(int capacity) + public void setRowCacheCapacityInMB(long capacity) { if (capacity < 0) throw new RuntimeException("capacity should not be negative."); @@ -226,17 +226,17 @@ public class CacheService implements CacheServiceMBean rowCache.setCapacity(capacity * 1024 * 1024); } - public int getKeyCacheCapacityInBytes() + public long getKeyCacheCapacityInBytes() { return keyCache.getCapacity() * AVERAGE_KEY_CACHE_ROW_SIZE; } - public int getKeyCacheCapacityInMB() + public long getKeyCacheCapacityInMB() { return getKeyCacheCapacityInBytes() / 1024 / 1024; } - public void setKeyCacheCapacityInMB(int capacity) + public void setKeyCacheCapacityInMB(long capacity) { if (capacity < 0) throw new RuntimeException("capacity should not be negative."); @@ -244,12 +244,12 @@ public class CacheService implements CacheServiceMBean keyCache.setCapacity(capacity * 1024 * 1024 / 48); } - public int getRowCacheSize() + public long getRowCacheSize() { return rowCache.weightedSize(); } - public int getKeyCacheSize() + public long getKeyCacheSize() { return keyCache.weightedSize() * AVERAGE_KEY_CACHE_ROW_SIZE; } diff --git a/src/java/org/apache/cassandra/service/CacheServiceMBean.java b/src/java/org/apache/cassandra/service/CacheServiceMBean.java index 3a2d83d280..747b8f804f 100644 --- a/src/java/org/apache/cassandra/service/CacheServiceMBean.java +++ b/src/java/org/apache/cassandra/service/CacheServiceMBean.java @@ -46,17 +46,17 @@ public interface CacheServiceMBean */ public void invalidateRowCache(); - public int getRowCacheCapacityInMB(); - public int getRowCacheCapacityInBytes(); - public void setRowCacheCapacityInMB(int capacity); + public long getRowCacheCapacityInMB(); + public long getRowCacheCapacityInBytes(); + public void setRowCacheCapacityInMB(long capacity); - public int getKeyCacheCapacityInMB(); - public int getKeyCacheCapacityInBytes(); - public void setKeyCacheCapacityInMB(int capacity); + public long getKeyCacheCapacityInMB(); + public long getKeyCacheCapacityInBytes(); + public void setKeyCacheCapacityInMB(long capacity); - public int getRowCacheSize(); + public long getRowCacheSize(); - public int getKeyCacheSize(); + public long getKeyCacheSize(); /** * sets each cache's maximum capacity to "reduce_cache_capacity_to" of its current size diff --git a/test/unit/org/apache/cassandra/cache/CacheProviderTest.java b/test/unit/org/apache/cassandra/cache/CacheProviderTest.java index e7fdead7ec..1e91da0b54 100644 --- a/test/unit/org/apache/cassandra/cache/CacheProviderTest.java +++ b/test/unit/org/apache/cassandra/cache/CacheProviderTest.java @@ -38,7 +38,7 @@ public class CacheProviderTest extends SchemaLoader String key3 = "key3"; String key4 = "key4"; String key5 = "key5"; - private static final int CAPACITY = 4; + private static final long CAPACITY = 4; private String tableName = "Keyspace1"; private String cfName = "Standard1"; diff --git a/tools/bin/stress b/tools/bin/cassandra-stress old mode 100755 new mode 100644 similarity index 70% rename from tools/bin/stress rename to tools/bin/cassandra-stress index 8c8d22fb8c..9fe2f88dfb --- a/tools/bin/stress +++ b/tools/bin/cassandra-stress @@ -16,22 +16,18 @@ # See the License for the specific language governing permissions and # limitations under the License. -if [ "x$CLASSPATH" = "x" ]; then - - # execute from the build dir. - if [ -d `dirname $0`/../../build/classes ]; then - for directory in `dirname $0`/../../build/classes/*; do - CLASSPATH=$CLASSPATH:$directory - done - else - if [ -f `dirname $0`/../lib/stress.jar ]; then - CLASSPATH=`dirname $0`/../lib/stress.jar +if [ "x$CASSANDRA_INCLUDE" = "x" ]; then + for include in /usr/share/cassandra/cassandra.in.sh \ + /usr/local/share/cassandra/cassandra.in.sh \ + /opt/cassandra/cassandra.in.sh \ + `dirname $0`/cassandra.in.sh; do + if [ -r $include ]; then + . $include + break fi - fi - - for jar in `dirname $0`/../../lib/*.jar; do - CLASSPATH=$CLASSPATH:$jar done +elif [ -r $CASSANDRA_INCLUDE ]; then + . $CASSANDRA_INCLUDE fi if [ -x $JAVA_HOME/bin/java ]; then diff --git a/tools/bin/stress.bat b/tools/bin/cassandra-stress.bat old mode 100755 new mode 100644 similarity index 100% rename from tools/bin/stress.bat rename to tools/bin/cassandra-stress.bat diff --git a/tools/bin/stressd b/tools/bin/cassandra-stressd old mode 100755 new mode 100644 similarity index 98% rename from tools/bin/stressd rename to tools/bin/cassandra-stressd index 400ebb0625..8d337e5411 --- a/tools/bin/stressd +++ b/tools/bin/cassandra-stressd @@ -16,7 +16,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -DESC="Stress Test Daemon" +DESC="Cassandra Stress Test Daemon" if [ "x$CLASSPATH" = "x" ]; then diff --git a/tools/bin/cassandra.in.sh b/tools/bin/cassandra.in.sh new file mode 100644 index 0000000000..aad3257e57 --- /dev/null +++ b/tools/bin/cassandra.in.sh @@ -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. + +if [ "x$CASSANDRA_HOME" = "x" ]; then + CASSANDRA_HOME=`dirname $0`/../../ +fi + +# The directory where Cassandra's configs live (required) +if [ "x$CASSANDRA_CONF" = "x" ]; then + CASSANDRA_CONF=$CASSANDRA_HOME/conf +fi + +# This can be the path to a jar file, or a directory containing the +# compiled classes. NOTE: This isn't needed by the startup script, +# it's just used here in constructing the classpath. +cassandra_bin=$CASSANDRA_HOME/build/classes/main +cassandra_bin=$cassandra_bin:$CASSANDRA_HOME/build/classes/stress +cassandra_bin=$cassandra_bin:$CASSANDRA_HOME/build/classes/thrift +#cassandra_bin=$cassandra_home/build/cassandra.jar + +# JAVA_HOME can optionally be set here +#JAVA_HOME=/usr/local/jdk6 + +# The java classpath (required) +CLASSPATH=$CASSANDRA_CONF:$cassandra_bin + +for jar in $CASSANDRA_HOME/lib/*.jar; do + CLASSPATH=$CLASSPATH:$jar +done diff --git a/tools/stress/README.txt b/tools/stress/README.txt index 4a43a2d9ea..f39a8d7d3f 100644 --- a/tools/stress/README.txt +++ b/tools/stress/README.txt @@ -1,14 +1,14 @@ -stress +cassandra-stress ====== Description ----------- -stress is a tool for benchmarking and load testing a Cassandra +cassandra-stress is a tool for benchmarking and load testing a Cassandra cluster. It is significantly faster than the older py_stress tool. Setup ----- -Run `ant` from the Cassandra source directory, then stress can be invoke from tools/bin/stress +Run `ant` from the Cassandra source directory, then cassandra-stress can be invoke from tools/bin/cassandra-stress Usage ----- @@ -42,7 +42,7 @@ Important options: when switching partioners.) This option sets the number of rows to slice at a time and defaults to 1000. -r or --random: - Only used for reads. By default, stress.py will perform reads on rows + Only used for reads. By default, cassandra-stress will perform reads on rows with a guassian distribution, which will cause some repeats. Setting this option makes the reads completely random instead. -i or --progress-interval: @@ -53,6 +53,6 @@ Remember that you must perform inserts before performing reads or range slices. Examples -------- - * contrib/stress/bin/stress -d 192.168.1.101 # 1M inserts to given host - * contrib/stress/bin/stress -d 192.168.1.101 -o read # 1M reads - * contrib/stress/bin/stress -d 192.168.1.101,192.168.1.102 -n 10000000 # 10M inserts spread across two nodes + * tools/bin/cassandra-stress -d 192.168.1.101 # 1M inserts to given host + * tools/bin/cassandra-stress -d 192.168.1.101 -o read # 1M reads + * tools/bin/cassandra-stress -d 192.168.1.101,192.168.1.102 -n 10000000 # 10M inserts spread across two nodes diff --git a/tools/stress/src/org/apache/cassandra/stress/Stress.java b/tools/stress/src/org/apache/cassandra/stress/Stress.java index b490d6918b..738a1c043c 100644 --- a/tools/stress/src/org/apache/cassandra/stress/Stress.java +++ b/tools/stress/src/org/apache/cassandra/stress/Stress.java @@ -100,7 +100,7 @@ public final class Stress */ public static void printHelpMessage() { - System.out.println("Usage: ./bin/stress [options]\n\nOptions:"); + System.out.println("Usage: ./bin/cassandra-stress [options]\n\nOptions:"); for(Object o : Session.availableOptions.getOptions()) {