Search in sources :

Example 1 with ClusterEvent

use of org.apache.helix.controller.stages.ClusterEvent in project helix by apache.

the class ClusterExternalViewVerifier method calculateBestPossibleState.

BestPossibleStateOutput calculateBestPossibleState(ClusterDataCache cache) throws Exception {
    ClusterEvent event = new ClusterEvent(ClusterEventType.StateVerifier);
    event.addAttribute(AttributeName.ClusterDataCache.name(), cache);
    List<Stage> stages = new ArrayList<Stage>();
    stages.add(new ResourceComputationStage());
    stages.add(new CurrentStateComputationStage());
    stages.add(new BestPossibleStateCalcStage());
    for (Stage stage : stages) {
        runStage(event, stage);
    }
    return event.getAttribute(AttributeName.BEST_POSSIBLE_STATE.name());
}
Also used : ClusterEvent(org.apache.helix.controller.stages.ClusterEvent) ResourceComputationStage(org.apache.helix.controller.stages.ResourceComputationStage) BestPossibleStateCalcStage(org.apache.helix.controller.stages.BestPossibleStateCalcStage) ArrayList(java.util.ArrayList) BestPossibleStateCalcStage(org.apache.helix.controller.stages.BestPossibleStateCalcStage) Stage(org.apache.helix.controller.pipeline.Stage) ResourceComputationStage(org.apache.helix.controller.stages.ResourceComputationStage) CurrentStateComputationStage(org.apache.helix.controller.stages.CurrentStateComputationStage) CurrentStateComputationStage(org.apache.helix.controller.stages.CurrentStateComputationStage)

Example 2 with ClusterEvent

use of org.apache.helix.controller.stages.ClusterEvent in project helix by apache.

the class TestSkipBestPossibleCalculation method test.

@Test()
public void test() throws Exception {
    int numResource = 5;
    for (int i = 0; i < numResource; i++) {
        String dbName = "TestDB_" + i;
        _setupTool.addResourceToCluster(CLUSTER_NAME, dbName, _PARTITIONS, STATE_MODEL, IdealState.RebalanceMode.CUSTOMIZED.name());
        _setupTool.rebalanceResource(CLUSTER_NAME, dbName, 3);
    }
    ClusterDataCache cache = new ClusterDataCache("CLUSTER_" + TestHelper.getTestClassName());
    cache.setTaskCache(false);
    cache.refresh(_manager.getHelixDataAccessor());
    ClusterEvent event = new ClusterEvent(CLUSTER_NAME, ClusterEventType.IdealStateChange);
    event.addAttribute(AttributeName.ClusterDataCache.name(), cache);
    runStage(_manager, event, new ResourceComputationStage());
    runStage(_manager, event, new CurrentStateComputationStage());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), 0);
    runStage(_manager, event, new BestPossibleStateCalcStage());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), numResource);
    cache.notifyDataChange(HelixConstants.ChangeType.INSTANCE_CONFIG);
    cache.refresh(_manager.getHelixDataAccessor());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), 0);
    runStage(_manager, event, new BestPossibleStateCalcStage());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), numResource);
    cache.notifyDataChange(HelixConstants.ChangeType.IDEAL_STATE);
    cache.refresh(_manager.getHelixDataAccessor());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), 0);
    runStage(_manager, event, new BestPossibleStateCalcStage());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), numResource);
    cache.notifyDataChange(HelixConstants.ChangeType.LIVE_INSTANCE);
    cache.refresh(_manager.getHelixDataAccessor());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), 0);
    runStage(_manager, event, new BestPossibleStateCalcStage());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), numResource);
    cache.requireFullRefresh();
    cache.refresh(_manager.getHelixDataAccessor());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), 0);
    runStage(_manager, event, new BestPossibleStateCalcStage());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), numResource);
    cache.notifyDataChange(HelixConstants.ChangeType.CURRENT_STATE);
    cache.refresh(_manager.getHelixDataAccessor());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), numResource);
    cache.notifyDataChange(HelixConstants.ChangeType.RESOURCE_CONFIG);
    cache.refresh(_manager.getHelixDataAccessor());
    Assert.assertEquals(cache.getCachedResourceAssignments().size(), 0);
}
Also used : ClusterEvent(org.apache.helix.controller.stages.ClusterEvent) ClusterDataCache(org.apache.helix.controller.stages.ClusterDataCache) ResourceComputationStage(org.apache.helix.controller.stages.ResourceComputationStage) BestPossibleStateCalcStage(org.apache.helix.controller.stages.BestPossibleStateCalcStage) CurrentStateComputationStage(org.apache.helix.controller.stages.CurrentStateComputationStage) Test(org.testng.annotations.Test)

Example 3 with ClusterEvent

use of org.apache.helix.controller.stages.ClusterEvent in project helix by apache.

the class TaskTestUtil method calculateBestPossibleState.

public static BestPossibleStateOutput calculateBestPossibleState(ClusterDataCache cache, HelixManager manager) throws Exception {
    ClusterEvent event = new ClusterEvent(ClusterEventType.Unknown);
    event.addAttribute(AttributeName.ClusterDataCache.name(), cache);
    event.addAttribute(AttributeName.helixmanager.name(), manager);
    List<Stage> stages = new ArrayList<Stage>();
    stages.add(new ReadClusterDataStage());
    stages.add(new ResourceComputationStage());
    stages.add(new CurrentStateComputationStage());
    stages.add(new BestPossibleStateCalcStage());
    for (Stage stage : stages) {
        runStage(event, stage);
    }
    return event.getAttribute(AttributeName.BEST_POSSIBLE_STATE.name());
}
Also used : ClusterEvent(org.apache.helix.controller.stages.ClusterEvent) ResourceComputationStage(org.apache.helix.controller.stages.ResourceComputationStage) ReadClusterDataStage(org.apache.helix.controller.stages.ReadClusterDataStage) BestPossibleStateCalcStage(org.apache.helix.controller.stages.BestPossibleStateCalcStage) ArrayList(java.util.ArrayList) BestPossibleStateCalcStage(org.apache.helix.controller.stages.BestPossibleStateCalcStage) Stage(org.apache.helix.controller.pipeline.Stage) ReadClusterDataStage(org.apache.helix.controller.stages.ReadClusterDataStage) ResourceComputationStage(org.apache.helix.controller.stages.ResourceComputationStage) CurrentStateComputationStage(org.apache.helix.controller.stages.CurrentStateComputationStage) CurrentStateComputationStage(org.apache.helix.controller.stages.CurrentStateComputationStage)

Example 4 with ClusterEvent

use of org.apache.helix.controller.stages.ClusterEvent in project helix by apache.

the class BestPossibleExternalViewVerifier method calcBestPossState.

/**
 * calculate the best possible state note that DROPPED states are not checked since when
 * kick off the BestPossibleStateCalcStage we are providing an empty current state map
 *
 * @param cache
 * @return
 * @throws Exception
 */
private BestPossibleStateOutput calcBestPossState(ClusterDataCache cache) throws Exception {
    ClusterEvent event = new ClusterEvent(ClusterEventType.StateVerifier);
    event.addAttribute(AttributeName.ClusterDataCache.name(), cache);
    runStage(event, new ResourceComputationStage());
    runStage(event, new CurrentStateComputationStage());
    // TODO: be caution here, should be handled statelessly.
    runStage(event, new BestPossibleStateCalcStage());
    BestPossibleStateOutput output = event.getAttribute(AttributeName.BEST_POSSIBLE_STATE.name());
    return output;
}
Also used : ClusterEvent(org.apache.helix.controller.stages.ClusterEvent) BestPossibleStateOutput(org.apache.helix.controller.stages.BestPossibleStateOutput) ResourceComputationStage(org.apache.helix.controller.stages.ResourceComputationStage) BestPossibleStateCalcStage(org.apache.helix.controller.stages.BestPossibleStateCalcStage) CurrentStateComputationStage(org.apache.helix.controller.stages.CurrentStateComputationStage)

Example 5 with ClusterEvent

use of org.apache.helix.controller.stages.ClusterEvent in project helix by apache.

the class ClusterEventBlockingQueue method take.

/**
 * Remove an element from the front of the queue, blocking if none is available. This method
 * will return the most recent event seen with the oldest enqueued event name.
 * @return ClusterEvent at the front of the queue
 * @throws InterruptedException if the wait for elements was interrupted
 */
public ClusterEvent take() throws InterruptedException {
    ClusterEvent event = _eventQueue.take();
    if (event != null) {
        LOG.debug("Taking event " + event.getEventType());
        LOG.debug("Event queue size: " + _eventQueue.size());
    }
    return event;
}
Also used : ClusterEvent(org.apache.helix.controller.stages.ClusterEvent)

Aggregations

ClusterEvent (org.apache.helix.controller.stages.ClusterEvent)5 BestPossibleStateCalcStage (org.apache.helix.controller.stages.BestPossibleStateCalcStage)4 CurrentStateComputationStage (org.apache.helix.controller.stages.CurrentStateComputationStage)4 ResourceComputationStage (org.apache.helix.controller.stages.ResourceComputationStage)4 ArrayList (java.util.ArrayList)2 Stage (org.apache.helix.controller.pipeline.Stage)2 BestPossibleStateOutput (org.apache.helix.controller.stages.BestPossibleStateOutput)1 ClusterDataCache (org.apache.helix.controller.stages.ClusterDataCache)1 ReadClusterDataStage (org.apache.helix.controller.stages.ReadClusterDataStage)1 Test (org.testng.annotations.Test)1