Search in sources :

Example 6 with DistributionRegionCallback

use of org.bboxdb.distribution.region.DistributionRegionCallback in project bboxdb by jnidzwetzki.

the class TestRegionSyncer method testMerge.

@Test(timeout = 10000)
public void testMerge() throws ZookeeperException, InterruptedException {
    final DistributionRegionSyncer distributionRegionSyncer = buildSyncer();
    final DistributionRegion root = distributionRegionSyncer.getRootNode();
    createSplittedRoot(distributionRegionSyncer, root);
    // Delete child 1
    System.out.println("=== Delete child 1");
    final CountDownLatch deleteLatch1 = new CountDownLatch(1);
    final DistributionRegionCallback callback1 = (e, r) -> {
        if (root.getAllChildren().size() == 1) {
            deleteLatch1.countDown();
        }
    };
    distributionRegionSyncer.registerCallback(callback1);
    distributionRegionAdapter.deleteChild(root.getChildNumber(1));
    deleteLatch1.await();
    distributionRegionSyncer.unregisterCallback(callback1);
    Assert.assertEquals(1, root.getAllChildren().size());
    // Delete child 2
    System.out.println("=== Delete child 2");
    final CountDownLatch deleteLatch2 = new CountDownLatch(1);
    final DistributionRegionCallback callback2 = (e, r) -> {
        if (root.getAllChildren().size() == 0) {
            deleteLatch2.countDown();
        }
    };
    distributionRegionSyncer.registerCallback(callback2);
    distributionRegionAdapter.deleteChild(root.getChildNumber(0));
    deleteLatch2.await();
    distributionRegionSyncer.unregisterCallback(callback2);
    Assert.assertEquals(0, root.getAllChildren().size());
}
Also used : DistributionRegionIdMapper(org.bboxdb.distribution.region.DistributionRegionIdMapper) ZookeeperClientFactory(org.bboxdb.distribution.zookeeper.ZookeeperClientFactory) SpacePartitionerContext(org.bboxdb.distribution.partitioner.SpacePartitionerContext) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) Set(java.util.Set) DistributionGroupConfigurationBuilder(org.bboxdb.storage.entity.DistributionGroupConfigurationBuilder) Test(org.junit.Test) DistributionRegionState(org.bboxdb.distribution.partitioner.DistributionRegionState) CopyOnWriteArraySet(java.util.concurrent.CopyOnWriteArraySet) BoundingBox(org.bboxdb.commons.math.BoundingBox) CountDownLatch(java.util.concurrent.CountDownLatch) ZookeeperException(org.bboxdb.distribution.zookeeper.ZookeeperException) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) DistributionRegionEvent(org.bboxdb.distribution.region.DistributionRegionEvent) BBoxDBException(org.bboxdb.misc.BBoxDBException) DistributionGroupAdapter(org.bboxdb.distribution.zookeeper.DistributionGroupAdapter) DistributionRegionSyncer(org.bboxdb.distribution.region.DistributionRegionSyncer) DistributionRegionAdapter(org.bboxdb.distribution.zookeeper.DistributionRegionAdapter) DistributionGroupConfiguration(org.bboxdb.storage.entity.DistributionGroupConfiguration) Assert(org.junit.Assert) BBoxDBInstance(org.bboxdb.distribution.membership.BBoxDBInstance) Before(org.junit.Before) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) CountDownLatch(java.util.concurrent.CountDownLatch) DistributionRegionSyncer(org.bboxdb.distribution.region.DistributionRegionSyncer) Test(org.junit.Test)

Example 7 with DistributionRegionCallback

use of org.bboxdb.distribution.region.DistributionRegionCallback in project bboxdb by jnidzwetzki.

the class TestRegionSyncer method testSplit.

@Test(timeout = 10000)
public void testSplit() throws ZookeeperException, InterruptedException {
    final DistributionRegionSyncer distributionRegionSyncer = buildSyncer();
    final DistributionRegion root = distributionRegionSyncer.getRootNode();
    final String fullname = createSplittedRoot(distributionRegionSyncer, root);
    System.out.println("==== Creating subchild");
    final DistributionRegion level1Child = root.getChildNumber(0);
    final BoundingBox leftBoundingBoxChild = level1Child.getConveringBox().splitAndGetLeft(0, 1, true);
    final CountDownLatch latchLevel1 = new CountDownLatch(1);
    final String level1ChildPath = distributionRegionAdapter.getZookeeperPathForDistributionRegion(level1Child);
    final DistributionRegionCallback level1Callback = (e, r) -> {
        if (root.getAllChildren().size() == 3) {
            latchLevel1.countDown();
        }
    };
    distributionRegionSyncer.registerCallback(level1Callback);
    distributionRegionAdapter.createNewChild(level1ChildPath, 0, leftBoundingBoxChild, fullname);
    latchLevel1.await();
    distributionRegionSyncer.unregisterCallback(level1Callback);
    Assert.assertTrue(root.getChildNumber(0).getChildNumber(0) != null);
    Assert.assertEquals(0, root.getRegionId());
    Assert.assertEquals(1, root.getChildNumber(0).getRegionId());
    Assert.assertEquals(3, root.getChildNumber(0).getChildNumber(0).getRegionId());
    Assert.assertEquals(3, root.getAllChildren().size());
    Assert.assertEquals(0, root.getLevel());
    Assert.assertEquals(1, level1Child.getLevel());
    Assert.assertEquals(2, root.getChildNumber(0).getChildNumber(0).getLevel());
    // Reread data from zookeeper
    System.out.println("== clear in memory data");
    distributionRegionSyncer.clear();
    final DistributionRegion root2 = distributionRegionSyncer.getRootNode();
    Assert.assertTrue(root2.getChildNumber(0).getChildNumber(0) != null);
    Assert.assertEquals(0, root2.getRegionId());
    Assert.assertEquals(1, root2.getChildNumber(0).getRegionId());
    Assert.assertEquals(3, root2.getChildNumber(0).getChildNumber(0).getRegionId());
    Assert.assertEquals(3, root2.getAllChildren().size());
    Assert.assertEquals(0, root2.getLevel());
    Assert.assertEquals(2, root2.getChildNumber(0).getChildNumber(0).getLevel());
}
Also used : DistributionRegionIdMapper(org.bboxdb.distribution.region.DistributionRegionIdMapper) ZookeeperClientFactory(org.bboxdb.distribution.zookeeper.ZookeeperClientFactory) SpacePartitionerContext(org.bboxdb.distribution.partitioner.SpacePartitionerContext) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) Set(java.util.Set) DistributionGroupConfigurationBuilder(org.bboxdb.storage.entity.DistributionGroupConfigurationBuilder) Test(org.junit.Test) DistributionRegionState(org.bboxdb.distribution.partitioner.DistributionRegionState) CopyOnWriteArraySet(java.util.concurrent.CopyOnWriteArraySet) BoundingBox(org.bboxdb.commons.math.BoundingBox) CountDownLatch(java.util.concurrent.CountDownLatch) ZookeeperException(org.bboxdb.distribution.zookeeper.ZookeeperException) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) DistributionRegionEvent(org.bboxdb.distribution.region.DistributionRegionEvent) BBoxDBException(org.bboxdb.misc.BBoxDBException) DistributionGroupAdapter(org.bboxdb.distribution.zookeeper.DistributionGroupAdapter) DistributionRegionSyncer(org.bboxdb.distribution.region.DistributionRegionSyncer) DistributionRegionAdapter(org.bboxdb.distribution.zookeeper.DistributionRegionAdapter) DistributionGroupConfiguration(org.bboxdb.storage.entity.DistributionGroupConfiguration) Assert(org.junit.Assert) BBoxDBInstance(org.bboxdb.distribution.membership.BBoxDBInstance) Before(org.junit.Before) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) BoundingBox(org.bboxdb.commons.math.BoundingBox) CountDownLatch(java.util.concurrent.CountDownLatch) DistributionRegionSyncer(org.bboxdb.distribution.region.DistributionRegionSyncer) Test(org.junit.Test)

Example 8 with DistributionRegionCallback

use of org.bboxdb.distribution.region.DistributionRegionCallback in project bboxdb by jnidzwetzki.

the class TestRegionSyncer method testChangeState2.

@Test(timeout = 10000)
public void testChangeState2() throws InterruptedException, ZookeeperException {
    final DistributionRegionSyncer distributionRegionSyncer = buildSyncer();
    final DistributionRegion root = distributionRegionSyncer.getRootNode();
    createSplittedRoot(distributionRegionSyncer, root);
    final CountDownLatch latch = new CountDownLatch(1);
    final DistributionRegionCallback callback = (e, r) -> {
        if (r == root.getChildNumber(1) && r.getState() == DistributionRegionState.MERGING) {
            latch.countDown();
        }
    };
    distributionRegionSyncer.registerCallback(callback);
    distributionRegionAdapter.setStateForDistributionRegion(root.getChildNumber(0), DistributionRegionState.MERGING);
    distributionRegionAdapter.setStateForDistributionRegion(root.getChildNumber(1), DistributionRegionState.MERGING);
    latch.await();
    distributionRegionSyncer.unregisterCallback(callback);
    Assert.assertEquals(2, root.getDirectChildren().size());
    Assert.assertEquals(DistributionRegionState.MERGING, root.getChildNumber(0).getState());
    Assert.assertEquals(DistributionRegionState.MERGING, root.getChildNumber(1).getState());
    // Reread state from zookeeper
    System.out.println("== clear in memory data");
    distributionRegionSyncer.clear();
    final DistributionRegion root2 = distributionRegionSyncer.getRootNode();
    Assert.assertEquals(2, root2.getDirectChildren().size());
    Assert.assertEquals(DistributionRegionState.MERGING, root2.getChildNumber(0).getState());
    Assert.assertEquals(DistributionRegionState.MERGING, root2.getChildNumber(1).getState());
}
Also used : DistributionRegionIdMapper(org.bboxdb.distribution.region.DistributionRegionIdMapper) ZookeeperClientFactory(org.bboxdb.distribution.zookeeper.ZookeeperClientFactory) SpacePartitionerContext(org.bboxdb.distribution.partitioner.SpacePartitionerContext) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) Set(java.util.Set) DistributionGroupConfigurationBuilder(org.bboxdb.storage.entity.DistributionGroupConfigurationBuilder) Test(org.junit.Test) DistributionRegionState(org.bboxdb.distribution.partitioner.DistributionRegionState) CopyOnWriteArraySet(java.util.concurrent.CopyOnWriteArraySet) BoundingBox(org.bboxdb.commons.math.BoundingBox) CountDownLatch(java.util.concurrent.CountDownLatch) ZookeeperException(org.bboxdb.distribution.zookeeper.ZookeeperException) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) DistributionRegionEvent(org.bboxdb.distribution.region.DistributionRegionEvent) BBoxDBException(org.bboxdb.misc.BBoxDBException) DistributionGroupAdapter(org.bboxdb.distribution.zookeeper.DistributionGroupAdapter) DistributionRegionSyncer(org.bboxdb.distribution.region.DistributionRegionSyncer) DistributionRegionAdapter(org.bboxdb.distribution.zookeeper.DistributionRegionAdapter) DistributionGroupConfiguration(org.bboxdb.storage.entity.DistributionGroupConfiguration) Assert(org.junit.Assert) BBoxDBInstance(org.bboxdb.distribution.membership.BBoxDBInstance) Before(org.junit.Before) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) CountDownLatch(java.util.concurrent.CountDownLatch) DistributionRegionSyncer(org.bboxdb.distribution.region.DistributionRegionSyncer) Test(org.junit.Test)

Example 9 with DistributionRegionCallback

use of org.bboxdb.distribution.region.DistributionRegionCallback in project bboxdb by jnidzwetzki.

the class TestRegionSyncer method testEventTypes.

@Test(timeout = 10000)
public void testEventTypes() throws InterruptedException, ZookeeperException {
    final DistributionRegionSyncer distributionRegionSyncer = buildSyncer();
    final DistributionRegion root = distributionRegionSyncer.getRootNode();
    // Root node is changed on add and remove children
    final CountDownLatch changedLatch = new CountDownLatch(2);
    final DistributionRegionCallback rootNodeChangedCallback = (e, r) -> {
        if (e == DistributionRegionEvent.CHANGED && r.equals(root)) {
            changedLatch.countDown();
        }
    };
    distributionRegionSyncer.registerCallback(rootNodeChangedCallback);
    // Two new children will be added
    final CountDownLatch addedLatch = new CountDownLatch(2);
    final DistributionRegionCallback adddedCallback = (e, r) -> {
        if (e == DistributionRegionEvent.ADDED && !r.equals(root)) {
            addedLatch.countDown();
        }
    };
    distributionRegionSyncer.registerCallback(adddedCallback);
    // Two children will be removed
    final CountDownLatch removedLatch = new CountDownLatch(2);
    final DistributionRegionCallback removedCallback = (e, r) -> {
        if (e == DistributionRegionEvent.REMOVED && !r.equals(root)) {
            removedLatch.countDown();
        }
    };
    distributionRegionSyncer.registerCallback(removedCallback);
    // Mutate tree
    createSplittedRoot(distributionRegionSyncer, root);
    // Wait
    System.out.println("=== Wait for added latch");
    addedLatch.await();
    distributionRegionAdapter.deleteChild(root.getChildNumber(0));
    distributionRegionAdapter.deleteChild(root.getChildNumber(1));
    System.out.println("=== Wait for removed latch");
    removedLatch.await();
    System.out.println("=== Wait for changed latch");
    changedLatch.await();
    distributionRegionSyncer.unregisterCallback(rootNodeChangedCallback);
    distributionRegionSyncer.unregisterCallback(adddedCallback);
    distributionRegionSyncer.unregisterCallback(removedCallback);
}
Also used : DistributionRegionIdMapper(org.bboxdb.distribution.region.DistributionRegionIdMapper) ZookeeperClientFactory(org.bboxdb.distribution.zookeeper.ZookeeperClientFactory) SpacePartitionerContext(org.bboxdb.distribution.partitioner.SpacePartitionerContext) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) Set(java.util.Set) DistributionGroupConfigurationBuilder(org.bboxdb.storage.entity.DistributionGroupConfigurationBuilder) Test(org.junit.Test) DistributionRegionState(org.bboxdb.distribution.partitioner.DistributionRegionState) CopyOnWriteArraySet(java.util.concurrent.CopyOnWriteArraySet) BoundingBox(org.bboxdb.commons.math.BoundingBox) CountDownLatch(java.util.concurrent.CountDownLatch) ZookeeperException(org.bboxdb.distribution.zookeeper.ZookeeperException) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) DistributionRegionEvent(org.bboxdb.distribution.region.DistributionRegionEvent) BBoxDBException(org.bboxdb.misc.BBoxDBException) DistributionGroupAdapter(org.bboxdb.distribution.zookeeper.DistributionGroupAdapter) DistributionRegionSyncer(org.bboxdb.distribution.region.DistributionRegionSyncer) DistributionRegionAdapter(org.bboxdb.distribution.zookeeper.DistributionRegionAdapter) DistributionGroupConfiguration(org.bboxdb.storage.entity.DistributionGroupConfiguration) Assert(org.junit.Assert) BBoxDBInstance(org.bboxdb.distribution.membership.BBoxDBInstance) Before(org.junit.Before) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) CountDownLatch(java.util.concurrent.CountDownLatch) DistributionRegionSyncer(org.bboxdb.distribution.region.DistributionRegionSyncer) Test(org.junit.Test)

Example 10 with DistributionRegionCallback

use of org.bboxdb.distribution.region.DistributionRegionCallback in project bboxdb by jnidzwetzki.

the class TupleStoreZookeeperObserver method registerTable.

/**
 * Register a new table, a callback is registered on the space partitioner
 * to delete the table when it is split or merged
 *
 * @param tupleStoreName
 */
public void registerTable(final TupleStoreName tupleStoreName) {
    if (!tupleStoreName.isDistributedTable()) {
        return;
    }
    final String distributionGroup = tupleStoreName.getDistributionGroup();
    final DistributionRegionEntity tableEntity = new DistributionRegionEntity(distributionGroup, tupleStoreName.getRegionId().getAsLong());
    synchronized (knownRegions) {
        if (knownRegions.contains(tableEntity)) {
            return;
        }
        // Register callback
        final DistributionRegionCallback callback = (e, r) -> {
            handleCallback(tableEntity, e, r);
        };
        try {
            final SpacePartitioner spacePartitioner = SpacePartitionerCache.getInstance().getSpacePartitionerForGroupName(distributionGroup);
            spacePartitioner.registerCallback(callback);
            knownRegions.add(tableEntity);
        } catch (BBoxDBException e) {
            logger.error("Unable to register callback", e);
        }
    }
}
Also used : DistributionRegionIdMapper(org.bboxdb.distribution.region.DistributionRegionIdMapper) SpacePartitioner(org.bboxdb.distribution.partitioner.SpacePartitioner) ZookeeperClientFactory(org.bboxdb.distribution.zookeeper.ZookeeperClientFactory) Logger(org.slf4j.Logger) TupleStoreAdapter(org.bboxdb.distribution.zookeeper.TupleStoreAdapter) Collection(java.util.Collection) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) LoggerFactory(org.slf4j.LoggerFactory) Set(java.util.Set) TupleStoreConfigurationCache(org.bboxdb.distribution.TupleStoreConfigurationCache) DistributionRegionState(org.bboxdb.distribution.partitioner.DistributionRegionState) WatchedEvent(org.apache.zookeeper.WatchedEvent) ZookeeperClient(org.bboxdb.distribution.zookeeper.ZookeeperClient) ZookeeperNotFoundException(org.bboxdb.distribution.zookeeper.ZookeeperNotFoundException) HashSet(java.util.HashSet) TupleStoreName(org.bboxdb.storage.entity.TupleStoreName) ZookeeperException(org.bboxdb.distribution.zookeeper.ZookeeperException) List(java.util.List) DistributionRegion(org.bboxdb.distribution.region.DistributionRegion) DistributionRegionEvent(org.bboxdb.distribution.region.DistributionRegionEvent) BBoxDBException(org.bboxdb.misc.BBoxDBException) DistributionGroupAdapter(org.bboxdb.distribution.zookeeper.DistributionGroupAdapter) SpacePartitionerCache(org.bboxdb.distribution.partitioner.SpacePartitionerCache) StorageManagerException(org.bboxdb.storage.StorageManagerException) DistributionRegionCallback(org.bboxdb.distribution.region.DistributionRegionCallback) BBoxDBException(org.bboxdb.misc.BBoxDBException) SpacePartitioner(org.bboxdb.distribution.partitioner.SpacePartitioner)

Aggregations

DistributionRegionCallback (org.bboxdb.distribution.region.DistributionRegionCallback)11 DistributionRegionIdMapper (org.bboxdb.distribution.region.DistributionRegionIdMapper)11 CopyOnWriteArraySet (java.util.concurrent.CopyOnWriteArraySet)10 ZookeeperException (org.bboxdb.distribution.zookeeper.ZookeeperException)10 BBoxDBException (org.bboxdb.misc.BBoxDBException)10 Set (java.util.Set)9 DistributionRegionState (org.bboxdb.distribution.partitioner.DistributionRegionState)9 SpacePartitionerContext (org.bboxdb.distribution.partitioner.SpacePartitionerContext)9 DistributionRegion (org.bboxdb.distribution.region.DistributionRegion)9 DistributionRegionEvent (org.bboxdb.distribution.region.DistributionRegionEvent)9 DistributionRegionSyncer (org.bboxdb.distribution.region.DistributionRegionSyncer)9 DistributionGroupAdapter (org.bboxdb.distribution.zookeeper.DistributionGroupAdapter)9 ZookeeperClientFactory (org.bboxdb.distribution.zookeeper.ZookeeperClientFactory)9 CountDownLatch (java.util.concurrent.CountDownLatch)8 BoundingBox (org.bboxdb.commons.math.BoundingBox)8 BBoxDBInstance (org.bboxdb.distribution.membership.BBoxDBInstance)8 DistributionRegionAdapter (org.bboxdb.distribution.zookeeper.DistributionRegionAdapter)8 DistributionGroupConfiguration (org.bboxdb.storage.entity.DistributionGroupConfiguration)8 DistributionGroupConfigurationBuilder (org.bboxdb.storage.entity.DistributionGroupConfigurationBuilder)8 Assert (org.junit.Assert)8