use of com.hazelcast.core.Member in project hazelcast by hazelcast.
the class ScheduledExecutorServiceBasicTest method capacity_onMember_whenPositiveLimit.
@Test
public void capacity_onMember_whenPositiveLimit() throws ExecutionException, InterruptedException {
String schedulerName = "foobar";
ScheduledExecutorConfig sec = new ScheduledExecutorConfig().setName(schedulerName).setDurability(1).setPoolSize(1).setCapacity(10);
Config config = new Config().addScheduledExecutorConfig(sec);
HazelcastInstance[] instances = createClusterWithCount(1, config);
IScheduledExecutorService service = instances[0].getScheduledExecutorService(schedulerName);
Member member = instances[0].getCluster().getLocalMember();
for (int i = 0; i < 10; i++) {
service.scheduleOnMember(new PlainCallableTask(), member, 0, TimeUnit.SECONDS);
}
try {
service.scheduleOnMember(new PlainCallableTask(), member, 0, TimeUnit.SECONDS);
fail("Should have been rejected.");
} catch (RejectedExecutionException ex) {
assertTrue("Got wrong RejectedExecutionException", ex.getMessage().equals("Maximum capacity of tasks reached."));
}
}
use of com.hazelcast.core.Member in project hazelcast by hazelcast.
the class TopicTest method testTopicGlobalOrder.
@Test
@SuppressWarnings("unchecked")
public void testTopicGlobalOrder() throws Exception {
final int nodeCount = 5;
final int count = 1000;
final String randomTopicName = randomString();
Config config = new Config();
config.getTopicConfig(randomTopicName).setGlobalOrderingEnabled(true);
TestHazelcastInstanceFactory factory = createHazelcastInstanceFactory(nodeCount);
final HazelcastInstance[] nodes = factory.newInstances(config);
final List<TestMessage>[] messageListPerNode = new List[nodeCount];
for (int i = 0; i < nodeCount; i++) {
messageListPerNode[i] = new CopyOnWriteArrayList<TestMessage>();
}
final CountDownLatch messageLatch = new CountDownLatch(nodeCount * count);
// add message listeners
for (int i = 0; i < nodes.length; i++) {
final int nodeIndex = i;
ITopic<TestMessage> topic = nodes[i].getTopic(randomTopicName);
topic.addMessageListener(new MessageListener<TestMessage>() {
public void onMessage(Message<TestMessage> message) {
messageListPerNode[nodeIndex].add(message.getMessageObject());
messageLatch.countDown();
}
});
}
// publish messages
for (HazelcastInstance node : nodes) {
Member localMember = node.getCluster().getLocalMember();
for (int j = 0; j < count; j++) {
TestMessage message = new TestMessage(localMember, UUID.randomUUID().toString());
ITopic<Object> topic = node.getTopic(randomTopicName);
topic.publish(message);
}
}
// all messages in nodes messageLists should be equal
assertTrueEventually(new AssertTask() {
@Override
public void run() throws Exception {
int i = 0;
do {
assertEquals(messageListPerNode[i], messageListPerNode[i++]);
} while (i < nodeCount);
}
});
}
use of com.hazelcast.core.Member in project hazelcast by hazelcast.
the class TopicTest method testTopicMultiThreading.
@Test
@Category(NightlyTest.class)
@SuppressWarnings("unchecked")
public void testTopicMultiThreading() throws Exception {
final int nodeCount = 5;
final int count = 1000;
final String randomTopicName = randomString();
Config config = new Config();
config.getTopicConfig(randomTopicName).setGlobalOrderingEnabled(false);
config.getTopicConfig(randomTopicName).setMultiThreadingEnabled(true);
TestHazelcastInstanceFactory factory = createHazelcastInstanceFactory(nodeCount);
final HazelcastInstance[] instances = factory.newInstances(config);
final Set<String>[] threads = new Set[nodeCount];
for (int i = 0; i < nodeCount; i++) {
threads[i] = new HashSet<String>();
}
final CountDownLatch startLatch = new CountDownLatch(nodeCount);
final CountDownLatch messageLatch = new CountDownLatch(nodeCount * nodeCount * count);
final CountDownLatch publishLatch = new CountDownLatch(nodeCount * count);
ExecutorService ex = Executors.newFixedThreadPool(nodeCount);
for (int i = 0; i < nodeCount; i++) {
final int finalI = i;
ex.execute(new Runnable() {
public void run() {
final Set<String> thNames = threads[finalI];
HazelcastInstance hz = instances[finalI];
ITopic<TestMessage> topic = hz.getTopic(randomTopicName);
topic.addMessageListener(new MessageListener<TestMessage>() {
public void onMessage(Message<TestMessage> message) {
thNames.add(Thread.currentThread().getName());
messageLatch.countDown();
}
});
startLatch.countDown();
try {
startLatch.await(1, TimeUnit.MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
Member localMember = hz.getCluster().getLocalMember();
for (int j = 0; j < count; j++) {
topic.publish(new TestMessage(localMember, UuidUtil.newUnsecureUuidString()));
publishLatch.countDown();
}
}
});
}
try {
assertTrue(publishLatch.await(2, TimeUnit.MINUTES));
assertTrue(messageLatch.await(5, TimeUnit.MINUTES));
boolean passed = false;
for (int i = 0; i < nodeCount; i++) {
if (threads[i].size() > 1) {
passed = true;
}
}
assertTrue("All listeners received messages in single thread. Expecting more threads involved", passed);
} finally {
ex.shutdownNow();
}
}
use of com.hazelcast.core.Member in project hazelcast by hazelcast.
the class TopicTest method testTopicLocalOrder.
@Test
@SuppressWarnings("unchecked")
public void testTopicLocalOrder() throws Exception {
final int nodeCount = 5;
final int count = 1000;
final String randomTopicName = randomString();
Config config = new Config();
config.getTopicConfig(randomTopicName).setGlobalOrderingEnabled(false);
TestHazelcastInstanceFactory factory = createHazelcastInstanceFactory(nodeCount);
final HazelcastInstance[] instances = factory.newInstances(config);
final List<TestMessage>[] messageLists = new List[nodeCount];
for (int i = 0; i < nodeCount; i++) {
messageLists[i] = new CopyOnWriteArrayList<TestMessage>();
}
final CountDownLatch startLatch = new CountDownLatch(nodeCount);
final CountDownLatch messageLatch = new CountDownLatch(nodeCount * nodeCount * count);
final CountDownLatch publishLatch = new CountDownLatch(nodeCount * count);
ExecutorService ex = Executors.newFixedThreadPool(nodeCount);
for (int i = 0; i < nodeCount; i++) {
final int finalI = i;
ex.execute(new Runnable() {
public void run() {
final List<TestMessage> messages = messageLists[finalI];
HazelcastInstance hz = instances[finalI];
ITopic<TestMessage> topic = hz.getTopic(randomTopicName);
topic.addMessageListener(new MessageListener<TestMessage>() {
public void onMessage(Message<TestMessage> message) {
messages.add(message.getMessageObject());
messageLatch.countDown();
}
});
startLatch.countDown();
try {
startLatch.await(1, TimeUnit.MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
Member localMember = hz.getCluster().getLocalMember();
for (int j = 0; j < count; j++) {
topic.publish(new TestMessage(localMember, UuidUtil.newUnsecureUuidString()));
publishLatch.countDown();
}
}
});
}
try {
assertTrue(publishLatch.await(2, TimeUnit.MINUTES));
assertTrue(messageLatch.await(5, TimeUnit.MINUTES));
TestMessage[] ref = new TestMessage[messageLists[0].size()];
messageLists[0].toArray(ref);
Comparator<TestMessage> comparator = new Comparator<TestMessage>() {
public int compare(TestMessage m1, TestMessage m2) {
// sort only publisher blocks. if publishers are the same, leave them as they are
return m1.publisher.getUuid().compareTo(m2.publisher.getUuid());
}
};
Arrays.sort(ref, comparator);
for (int i = 1; i < nodeCount; i++) {
TestMessage[] messages = new TestMessage[messageLists[i].size()];
messageLists[i].toArray(messages);
Arrays.sort(messages, comparator);
assertArrayEquals(ref, messages);
}
} finally {
ex.shutdownNow();
}
}
use of com.hazelcast.core.Member in project hazelcast by hazelcast.
the class HazelcastTestSupport method generateKeyOwnedBy.
/**
* Generates a key according to given reference instance by checking partition ownership for it.
*
* @param instance reference instance for key generation.
* @param generateOwnedKey {@code true} if we want a key which is owned by the given instance, otherwise
* set to {@code false} which means generated key will not be owned by the given instance.
* @return generated string.
*/
public static String generateKeyOwnedBy(HazelcastInstance instance, boolean generateOwnedKey) {
Cluster cluster = instance.getCluster();
checkMemberCount(generateOwnedKey, cluster);
checkPartitionCountGreaterOrEqualMemberCount(instance);
Member localMember = cluster.getLocalMember();
PartitionService partitionService = instance.getPartitionService();
while (true) {
String id = randomString();
Partition partition = partitionService.getPartition(id);
if (comparePartitionOwnership(generateOwnedKey, localMember, partition)) {
return id;
}
}
}
Aggregations