org.apache.usergrid.persistence.qakka.serialization.sharding.ShardIteratorTest.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.usergrid.persistence.qakka.serialization.sharding.ShardIteratorTest.java

Source

/*
 * 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.usergrid.persistence.qakka.serialization.sharding;

import org.apache.commons.lang.RandomStringUtils;
import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.qakka.core.CassandraClientImpl;
import org.apache.usergrid.persistence.qakka.serialization.sharding.impl.ShardSerializationImpl;
import org.apache.usergrid.persistence.qakka.AbstractTest;
import org.apache.usergrid.persistence.qakka.core.CassandraClient;
import org.apache.usergrid.persistence.qakka.core.QakkaUtils;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

import static org.junit.Assert.assertTrue;

/**
 * Created by russo on 6/9/16.
 */
public class ShardIteratorTest extends AbstractTest {

    private static final Logger logger = LoggerFactory.getLogger(ShardIteratorTest.class);

    @Test
    public void getActiveShards() {

        CassandraClient cassandraClient = getInjector().getInstance(CassandraClientImpl.class);
        CassandraConfig cassandraConfig = getInjector().getInstance(CassandraConfig.class);
        ShardSerialization shardSerialization = new ShardSerializationImpl(cassandraConfig, cassandraClient);

        String queueName = "queue_sit_" + RandomStringUtils.randomAlphanumeric(10);

        Shard shard1 = new Shard(queueName, "region1", Shard.Type.DEFAULT, 100L, null);
        Shard shard2 = new Shard(queueName, "region1", Shard.Type.DEFAULT, 200L, null);

        shardSerialization.createShard(shard1);
        shardSerialization.createShard(shard2);

        Iterator<Shard> shardIterator = new ShardIterator(cassandraClient, queueName, "region1", Shard.Type.DEFAULT,
                Optional.empty());

        List<Shard> shards = new ArrayList<>(1);

        shardIterator.forEachRemaining(shard -> {

            logger.info("Shard ID: {}", shard.getShardId());
            shards.add(shard);

        });

        assertTrue(shards.size() == 2 && shards.get(0).equals(shard1) && shards.get(1).equals(shard2));

    }

    @Test
    public void seekActiveShards() {

        CassandraClient cassandraClient = getInjector().getInstance(CassandraClientImpl.class);
        CassandraConfig cassandraConfig = getInjector().getInstance(CassandraConfig.class);
        ShardSerialization shardSerialization = new ShardSerializationImpl(cassandraConfig, cassandraClient);

        String queueName = "queue_sit_" + RandomStringUtils.randomAlphanumeric(10);

        Shard shard1 = new Shard(queueName, "region1", Shard.Type.DEFAULT, 100L, null);
        Shard shard2 = new Shard(queueName, "region1", Shard.Type.DEFAULT, 200L, null);
        Shard shard3 = new Shard(queueName, "region1", Shard.Type.DEFAULT, 300L, null);

        shardSerialization.createShard(shard1);
        shardSerialization.createShard(shard2);
        shardSerialization.createShard(shard3);

        Iterator<Shard> shardIterator = new ShardIterator(cassandraClient, queueName, "region1", Shard.Type.DEFAULT,
                Optional.of(200L));

        List<Shard> shards = new ArrayList<>(1);

        shardIterator.forEachRemaining(shard -> {

            logger.info("Shard ID: {}", shard.getShardId());
            shards.add(shard);

        });

        assertTrue(shards.size() == 1 && shards.get(0).equals(shard3));
    }

    @Test
    public void shardIteratorOrdering() throws Exception {

        CassandraClient cassandraClient = getInjector().getInstance(CassandraClientImpl.class);
        CassandraConfig cassandraConfig = getInjector().getInstance(CassandraConfig.class);
        ShardSerialization shardSerialization = new ShardSerializationImpl(cassandraConfig, cassandraClient);

        int numShards = 10;
        String region = "default";
        String queueName = "sit_queue_" + RandomStringUtils.randomAlphanumeric(20);

        for (long i = 0; i < numShards; i++) {
            UUID messageId = QakkaUtils.getTimeUuid();
            Shard shard = new Shard(queueName, region, Shard.Type.DEFAULT, i + 1, messageId);
            shardSerialization.createShard(shard);
            try {
                Thread.sleep(10);
            } catch (Exception intentionallyIgnored) {
            }
        }

        Iterator<Shard> shardIterator = new ShardIterator(cassandraClient, queueName, region, Shard.Type.DEFAULT,
                Optional.empty());

        int count = 0;
        Long prevTimestamp = null;
        while (shardIterator.hasNext()) {
            Shard shard = shardIterator.next();
            if (prevTimestamp != null) {
                Assert.assertTrue(prevTimestamp < shard.getPointer().timestamp());
            }
            prevTimestamp = shard.getPointer().timestamp();
            count++;
        }

        Assert.assertEquals(numShards, count);
    }
}