Search in sources :

Example 6 with StreamingSlopPusherJob

use of voldemort.server.scheduler.slop.StreamingSlopPusherJob in project voldemort by voldemort.

the class StreamingSlopPusherTest method testOutOfOrder.

/**
     * Tests that everything works even if the slops get replayed out of order
     */
@Test
@Ignore
public void testOutOfOrder() throws InterruptedException, IOException {
    startServers(0, 1);
    // Put into slop store 0
    StorageEngine<ByteArray, Slop, byte[]> slopStoreNode0 = getVoldemortServer(0).getStoreRepository().getSlopStore().asSlopStore();
    // 5 slops for 3 stores => ( key1 [put(value1), delete, put(value2)] AND
    // key2 [put(value2), delete] )
    long keyInt1 = (long) (Math.random() * 1000000000L), keyInt2 = (long) (Math.random() * 10000000L);
    ByteArray key1 = new ByteArray(ByteUtils.getBytes("" + keyInt1, "UTF-8")), key2 = new ByteArray(ByteUtils.getBytes("" + keyInt2, "UTF-8"));
    byte[] value1 = ByteUtils.getBytes("value-" + new String(key1.get()), "UTF-8"), value2 = ByteUtils.getBytes("value-" + new String(key2.get()), "UTF-8");
    VectorClock vectorClock1 = new VectorClock(), vectorClock2 = new VectorClock();
    List<Versioned<Slop>> entrySet = Lists.newArrayList();
    for (String storeName : Lists.newArrayList("test-replication-memory", "users", "test-replication-persistent")) {
        entrySet.add(Versioned.value(new Slop(storeName, Slop.Operation.PUT, key1, value1, null, 1, new Date()), vectorClock1));
        vectorClock1 = vectorClock1.incremented(0, System.currentTimeMillis());
        entrySet.add(Versioned.value(new Slop(storeName, Slop.Operation.DELETE, key1, null, null, 1, new Date()), vectorClock1));
        vectorClock1 = vectorClock1.incremented(0, System.currentTimeMillis());
        entrySet.add(Versioned.value(new Slop(storeName, Slop.Operation.PUT, key1, value2, null, 1, new Date()), vectorClock1));
        vectorClock2 = vectorClock2.incremented(0, System.currentTimeMillis());
        entrySet.add(Versioned.value(new Slop(storeName, Slop.Operation.PUT, key2, value2, null, 1, new Date()), vectorClock2));
        vectorClock2 = vectorClock2.incremented(0, System.currentTimeMillis());
        entrySet.add(Versioned.value(new Slop(storeName, Slop.Operation.DELETE, key2, null, null, 1, new Date()), vectorClock2));
    }
    Collections.shuffle(entrySet);
    // Generate two sub lists to send in batches
    List<Versioned<Slop>> firstSet = entrySet.subList(0, 7), secondSet = entrySet.subList(7, 15);
    populateSlops(0, slopStoreNode0, firstSet);
    StreamingSlopPusherJob pusher = new StreamingSlopPusherJob(getVoldemortServer(0).getStoreRepository(), getVoldemortServer(0).getMetadataStore(), new BannagePeriodFailureDetector(new FailureDetectorConfig().setCluster(cluster).setConnectionVerifier(new ServerStoreConnectionVerifier(socketStoreFactory, metadataStore, configs[0]))), configs[0], new ScanPermitWrapper(1));
    pusher.run();
    populateSlops(0, slopStoreNode0, secondSet);
    pusher.run();
    // Give some time for the slops to go over
    Thread.sleep(2000);
    for (String storeName : Lists.newArrayList("test-replication-memory", "users", "test-replication-persistent")) {
        StorageEngine<ByteArray, byte[], byte[]> store = getVoldemortServer(1).getStoreRepository().getStorageEngine(storeName);
        assertEquals(store.get(key1, null).size(), 1);
        assertEquals(ByteUtils.compare(store.get(key1, null).get(0).getValue(), value2), 0);
        assertEquals(store.get(key2, null).size(), 0);
    }
    stopServers(0, 1);
}
Also used : Versioned(voldemort.versioning.Versioned) VectorClock(voldemort.versioning.VectorClock) ScanPermitWrapper(voldemort.server.storage.ScanPermitWrapper) StreamingSlopPusherJob(voldemort.server.scheduler.slop.StreamingSlopPusherJob) Date(java.util.Date) FailureDetectorConfig(voldemort.cluster.failuredetector.FailureDetectorConfig) ByteArray(voldemort.utils.ByteArray) ServerStoreConnectionVerifier(voldemort.cluster.failuredetector.ServerStoreConnectionVerifier) Slop(voldemort.store.slop.Slop) BannagePeriodFailureDetector(voldemort.cluster.failuredetector.BannagePeriodFailureDetector) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 7 with StreamingSlopPusherJob

use of voldemort.server.scheduler.slop.StreamingSlopPusherJob in project voldemort by voldemort.

the class StreamingSlopPusherTest method testNormalPush.

@Test
public void testNormalPush() throws InterruptedException, IOException {
    startServers(0, 1);
    // Put into slop store 0
    StorageEngine<ByteArray, Slop, byte[]> slopStoreNode0 = getVoldemortServer(0).getStoreRepository().getSlopStore().asSlopStore();
    // Generate slops for 1
    final List<Versioned<Slop>> entrySet = ServerTestUtils.createRandomSlops(1, 100, "test-replication-memory", "users", "test-replication-persistent", "test-readrepair-memory", "test-consistent", "test-consistent-with-pref-list");
    populateSlops(0, slopStoreNode0, entrySet);
    StreamingSlopPusherJob pusher = new StreamingSlopPusherJob(getVoldemortServer(0).getStoreRepository(), getVoldemortServer(0).getMetadataStore(), new BannagePeriodFailureDetector(new FailureDetectorConfig().setCluster(cluster).setConnectionVerifier(new ServerStoreConnectionVerifier(socketStoreFactory, metadataStore, configs[0]))), configs[0], new ScanPermitWrapper(1));
    pusher.run();
    // Give some time for the slops to go over
    Thread.sleep(2000);
    // Now check if the slops went through and also got deleted
    Iterator<Versioned<Slop>> entryIterator = entrySet.listIterator();
    while (entryIterator.hasNext()) {
        Versioned<Slop> versionedSlop = entryIterator.next();
        Slop nextSlop = versionedSlop.getValue();
        StorageEngine<ByteArray, byte[], byte[]> store = getVoldemortServer(1).getStoreRepository().getStorageEngine(nextSlop.getStoreName());
        if (nextSlop.getOperation().equals(Slop.Operation.PUT)) {
            assertNotSame("entry should be present at store", 0, store.get(nextSlop.getKey(), null).size());
            assertEquals("entry value should match", new String(nextSlop.getValue()), new String(store.get(nextSlop.getKey(), null).get(0).getValue()));
        } else if (nextSlop.getOperation().equals(Slop.Operation.DELETE)) {
            assertEquals("entry value should match", 0, store.get(nextSlop.getKey(), null).size());
        }
        // did it get deleted correctly
        assertEquals("slop should have gone", 0, slopStoreNode0.get(nextSlop.makeKey(), null).size());
    }
    // Check counts
    SlopStorageEngine slopEngine = getVoldemortServer(0).getStoreRepository().getSlopStore();
    assertEquals(slopEngine.getOutstandingTotal(), 0);
    assertEquals(slopEngine.getOutstandingByNode().get(1), new Long(0));
    assertEquals(slopEngine.getOutstandingByNode().get(2), new Long(0));
    stopServers(0, 1);
}
Also used : Versioned(voldemort.versioning.Versioned) ScanPermitWrapper(voldemort.server.storage.ScanPermitWrapper) StreamingSlopPusherJob(voldemort.server.scheduler.slop.StreamingSlopPusherJob) FailureDetectorConfig(voldemort.cluster.failuredetector.FailureDetectorConfig) ByteArray(voldemort.utils.ByteArray) ServerStoreConnectionVerifier(voldemort.cluster.failuredetector.ServerStoreConnectionVerifier) SlopStorageEngine(voldemort.store.slop.SlopStorageEngine) Slop(voldemort.store.slop.Slop) BannagePeriodFailureDetector(voldemort.cluster.failuredetector.BannagePeriodFailureDetector) Test(org.junit.Test)

Aggregations

StreamingSlopPusherJob (voldemort.server.scheduler.slop.StreamingSlopPusherJob)7 Test (org.junit.Test)6 FailureDetectorConfig (voldemort.cluster.failuredetector.FailureDetectorConfig)6 ScanPermitWrapper (voldemort.server.storage.ScanPermitWrapper)6 Slop (voldemort.store.slop.Slop)6 SlopStorageEngine (voldemort.store.slop.SlopStorageEngine)6 ByteArray (voldemort.utils.ByteArray)6 Versioned (voldemort.versioning.Versioned)6 BannagePeriodFailureDetector (voldemort.cluster.failuredetector.BannagePeriodFailureDetector)5 ServerStoreConnectionVerifier (voldemort.cluster.failuredetector.ServerStoreConnectionVerifier)5 Date (java.util.Date)2 ArrayList (java.util.ArrayList)1 GregorianCalendar (java.util.GregorianCalendar)1 Ignore (org.junit.Ignore)1 Cluster (voldemort.cluster.Cluster)1 AdminSlopStreamingVerifier (voldemort.cluster.failuredetector.AdminSlopStreamingVerifier)1 ThresholdFailureDetector (voldemort.cluster.failuredetector.ThresholdFailureDetector)1 RoutingStrategyFactory (voldemort.routing.RoutingStrategyFactory)1 BlockingSlopPusherJob (voldemort.server.scheduler.slop.BlockingSlopPusherJob)1 SlopPurgeJob (voldemort.server.scheduler.slop.SlopPurgeJob)1