Move CASSANDRA-9519 test in long tests (and reduce the size of the list used)
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0ef18886 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0ef18886 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0ef18886 Branch: refs/heads/cassandra-2.1 Commit: 0ef188869049ec6233d115f7a46c25f492e8fa42 Parents: a9b9e62 Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Thu Jul 16 15:14:54 2015 +0200 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Fri Jul 17 15:35:24 2015 +0200 ---------------------------------------------------------------------- .../locator/DynamicEndpointSnitchLongTest.java | 104 +++++++++++++++++++ .../locator/DynamicEndpointSnitchTest.java | 64 ------------ 2 files changed, 104 insertions(+), 64 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ef18886/test/long/org/apache/cassandra/locator/DynamicEndpointSnitchLongTest.java ---------------------------------------------------------------------- diff --git a/test/long/org/apache/cassandra/locator/DynamicEndpointSnitchLongTest.java b/test/long/org/apache/cassandra/locator/DynamicEndpointSnitchLongTest.java new file mode 100644 index 0000000..1c628fa --- /dev/null +++ b/test/long/org/apache/cassandra/locator/DynamicEndpointSnitchLongTest.java @@ -0,0 +1,104 @@ +/* +* 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.locator; + +import java.io.IOException; +import java.net.InetAddress; +import java.util.*; + +import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.cassandra.service.StorageService; +import org.junit.Test; + +import org.apache.cassandra.utils.FBUtilities; + +import static org.junit.Assert.assertEquals; + +public class DynamicEndpointSnitchLongTest +{ + @Test + public void testConcurrency() throws InterruptedException, IOException, ConfigurationException + { + // The goal of this test is to check for CASSANDRA-8448/CASSANDRA-9519 + double badness = DatabaseDescriptor.getDynamicBadnessThreshold(); + DatabaseDescriptor.setDynamicBadnessThreshold(0.0); + + try + { + final int ITERATIONS = 10000; + + // do this because SS needs to be initialized before DES can work properly. + StorageService.instance.initClient(0); + SimpleSnitch ss = new SimpleSnitch(); + DynamicEndpointSnitch dsnitch = new DynamicEndpointSnitch(ss, String.valueOf(ss.hashCode())); + InetAddress self = FBUtilities.getBroadcastAddress(); + + List<InetAddress> hosts = new ArrayList<>(); + // We want a big list of hosts so sorting takes time, making it much more likely to reproduce the + // problem we're looking for. + for (int i = 0; i < 100; i++) + for (int j = 0; j < 256; j++) + hosts.add(InetAddress.getByAddress(new byte[]{127, 0, (byte)i, (byte)j})); + + ScoreUpdater updater = new ScoreUpdater(dsnitch, hosts); + updater.start(); + + List<InetAddress> result = null; + for (int i = 0; i < ITERATIONS; i++) + result = dsnitch.getSortedListByProximity(self, hosts); + + updater.stopped = true; + updater.join(); + } + finally + { + DatabaseDescriptor.setDynamicBadnessThreshold(badness); + } + } + + public static class ScoreUpdater extends Thread + { + private static final int SCORE_RANGE = 100; + + public volatile boolean stopped; + + private final DynamicEndpointSnitch dsnitch; + private final List<InetAddress> hosts; + private final Random random = new Random(); + + public ScoreUpdater(DynamicEndpointSnitch dsnitch, List<InetAddress> hosts) + { + this.dsnitch = dsnitch; + this.hosts = hosts; + } + + public void run() + { + while (!stopped) + { + InetAddress host = hosts.get(random.nextInt(hosts.size())); + int score = random.nextInt(SCORE_RANGE); + dsnitch.receiveTiming(host, score); + } + } + } +} + http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ef18886/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java b/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java index 3f90532..c1928d8 100644 --- a/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java +++ b/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java @@ -23,7 +23,6 @@ import java.io.IOException; import java.net.InetAddress; import java.util.*; -import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.service.StorageService; import org.junit.Test; @@ -90,67 +89,4 @@ public class DynamicEndpointSnitchTest order = Arrays.asList(host1, host3, host2); assertEquals(order, dsnitch.getSortedListByProximity(self, Arrays.asList(host1, host2, host3))); } - - @Test - public void testConcurrency() throws InterruptedException, IOException, ConfigurationException - { - // The goal of this test is to check for CASSANDRA-8448/CASSANDRA-9519 - double badness = DatabaseDescriptor.getDynamicBadnessThreshold(); - DatabaseDescriptor.setDynamicBadnessThreshold(0.0); - - final int ITERATIONS = 10; - - // do this because SS needs to be initialized before DES can work properly. - StorageService.instance.initClient(0); - SimpleSnitch ss = new SimpleSnitch(); - DynamicEndpointSnitch dsnitch = new DynamicEndpointSnitch(ss, String.valueOf(ss.hashCode())); - InetAddress self = FBUtilities.getBroadcastAddress(); - - List<InetAddress> hosts = new ArrayList<>(); - // We want a giant list of hosts so that sorting it takes time, making it much more likely to reproduce the - // problem we're looking for. - for (int i = 0; i < 10; i++) - for (int j = 0; j < 256; j++) - for (int k = 0; k < 256; k++) - hosts.add(InetAddress.getByAddress(new byte[]{127, (byte)i, (byte)j, (byte)k})); - - ScoreUpdater updater = new ScoreUpdater(dsnitch, hosts); - updater.start(); - - List<InetAddress> result = null; - for (int i = 0; i < ITERATIONS; i++) - result = dsnitch.getSortedListByProximity(self, hosts); - - updater.stopped = true; - updater.join(); - - DatabaseDescriptor.setDynamicBadnessThreshold(badness); - } - - public static class ScoreUpdater extends Thread - { - private static final int SCORE_RANGE = 100; - - public volatile boolean stopped; - - private final DynamicEndpointSnitch dsnitch; - private final List<InetAddress> hosts; - private final Random random = new Random(); - - public ScoreUpdater(DynamicEndpointSnitch dsnitch, List<InetAddress> hosts) - { - this.dsnitch = dsnitch; - this.hosts = hosts; - } - - public void run() - { - while (!stopped) - { - InetAddress host = hosts.get(random.nextInt(hosts.size())); - int score = random.nextInt(SCORE_RANGE); - dsnitch.receiveTiming(host, score); - } - } - } }