/** * Toggle the status of the table between OFFLINE and ONLINE. * * @param tableName: Name of the table for which to toggle the status. * @param status: True for ONLINE and False for OFFLINE. * @return */ public PinotResourceManagerResponse toggleTableState(String tableName, boolean status) { if (!_helixAdmin.getResourcesInCluster(_helixClusterName).contains(tableName)) { return PinotResourceManagerResponse.failure("Table " + tableName + " not found"); } _helixAdmin.enableResource(_helixClusterName, tableName, status); // If enabling a resource, also reset segments in error state for that resource boolean resetSuccessful = false; if (status) { try { _helixAdmin.resetResource(_helixClusterName, Collections.singletonList(tableName)); resetSuccessful = true; } catch (HelixException e) { LOGGER.warn("Caught exception while resetting resource {}, ignoring.", e, tableName); } } return (status) ? PinotResourceManagerResponse .success("Table " + tableName + " enabled (reset success = " + resetSuccessful + ")") : PinotResourceManagerResponse.success("Table " + tableName + " disabled"); }
_helixAdmin.enableResource(_clusterName, disabledOfflineTable, false);
/** * Enable or disable a resource within a resource group associated with a given resource tag * * @param clusterName * @param resourceName * @param resourceTag */ public void enableResource(String clusterName, String resourceName, String resourceTag, boolean enabled) { String idealStateId = genIdealStateNameWithResourceTag(resourceName, resourceTag); _admin.enableResource(clusterName, idealStateId, enabled); }
/** * Enable or disable a resource within a resource group associated with a given resource tag * * @param clusterName * @param resourceName * @param resourceTag */ public void enableResource(String clusterName, String resourceName, String resourceTag, boolean enabled) { String idealStateId = genIdealStateNameWithResourceTag(resourceName, resourceTag); _admin.enableResource(clusterName, idealStateId, enabled); }
switch (cmd) { case enable: admin.enableResource(clusterId, resourceName, true); break; case disable: admin.enableResource(clusterId, resourceName, false); break; case rebalance:
private void enableResource(String clusterName, boolean enabled) { HelixAdmin admin = new ZKHelixAdmin(_gZkClient); admin.enableResource(clusterName, "TestDB0", enabled); }
setupTool.enableResource(clusterName, resourceName, resourceTag, enabled); } else { setupTool.getClusterManagementTool().enableResource(clusterName, resourceName, enabled);
setupTool.enableResource(clusterName, resourceName, resourceTag, enabled); } else { setupTool.getClusterManagementTool().enableResource(clusterName, resourceName, enabled);
@Test public void testDisableCancellationWhenDisableResource() throws InterruptedException { // Disable cancellation ClusterConfig clusterConfig = _configAccessor.getClusterConfig(CLUSTER_NAME); clusterConfig.stateTransitionCancelEnabled(false); _configAccessor.setClusterConfig(CLUSTER_NAME, clusterConfig); // Reenable resource stateCleanUp(); _gSetupTool.getClusterManagementTool() .enableResource(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, true); // Wait for assignment done Thread.sleep(2000); // Disable the resource _gSetupTool.getClusterManagementTool() .enableResource(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, false); // Wait for pipeline reaching final stage Thread.sleep(2000L); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB); for (String partition : externalView.getPartitionSet()) { Assert.assertTrue(externalView.getStateMap(partition).values().contains("SLAVE")); } }
@Test public void testJobScheduleBeforeResourceDisabled() throws InterruptedException { String workflowName = TestHelper.getTestMethodName(); Workflow.Builder workflow = new Workflow.Builder(workflowName); _jobCfg.setJobCommandConfigMap(ImmutableMap.of(MockTask.JOB_DELAY, "1000000")); workflow.addJob(_jobName, _jobCfg); _driver.start(workflow.build()); Thread.sleep(1000); _gSetupTool.getClusterManagementTool() .enableResource(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, false); _driver.pollForWorkflowState(workflowName, TaskState.FAILED); }
@Test public void testCancellationWhenDisableResource() throws InterruptedException { // Enable cancellation ClusterConfig clusterConfig = _configAccessor.getClusterConfig(CLUSTER_NAME); clusterConfig.stateTransitionCancelEnabled(true); _configAccessor.setClusterConfig(CLUSTER_NAME, clusterConfig); // Wait for assignment done Thread.sleep(2000); // Disable the resource _gSetupTool.getClusterManagementTool() .enableResource(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, false); // Wait for pipeline reaching final stage Assert.assertTrue(_verifier.verifyByPolling()); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB); for (String partition : externalView.getPartitionSet()) { for (String currentState : externalView.getStateMap(partition).values()) { Assert.assertEquals(currentState, "OFFLINE"); } } }
jsonParameters.verifyCommand(ClusterSetup.enableResource); boolean enabled = Boolean.parseBoolean(jsonParameters.getParameter(JsonParameters.ENABLED)); setupTool.getClusterManagementTool().enableResource(clusterName, resourceName, enabled); } else { throw new HelixException("Unsupported command: " + command + ". Should be one of ["
@Test public void testJobScheduleAfterResourceDisabled() throws InterruptedException { String workflowName = TestHelper.getTestMethodName(); _gSetupTool.getClusterManagementTool() .enableResource(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, false); Workflow.Builder workflow = new Workflow.Builder(workflowName); workflow.addJob(_jobName, _jobCfg); _driver.start(workflow.build()); _driver.pollForWorkflowState(workflowName, TaskState.FAILED); }
@Test public void testDisableResource() { String className = TestHelper.getTestClassName(); String methodName = TestHelper.getTestMethodName(); String clusterName = className + "_" + methodName; System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis())); HelixAdmin admin = new ZKHelixAdmin(_gZkClient); admin.addCluster(clusterName, true); Assert.assertTrue(ZKUtil.isClusterSetup(clusterName, _gZkClient), "Cluster should be setup"); String resourceName = "TestDB"; admin.addStateModelDef(clusterName, "MasterSlave", new StateModelDefinition( StateModelConfigGenerator.generateConfigForMasterSlave())); admin.addResource(clusterName, resourceName, 4, "MasterSlave"); admin.enableResource(clusterName, resourceName, false); BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient); HelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, baseAccessor); PropertyKey.Builder keyBuilder = accessor.keyBuilder(); IdealState idealState = accessor.getProperty(keyBuilder.idealStates(resourceName)); Assert.assertFalse(idealState.isEnabled()); admin.enableResource(clusterName, resourceName, true); idealState = accessor.getProperty(keyBuilder.idealStates(resourceName)); Assert.assertTrue(idealState.isEnabled()); admin.dropCluster(clusterName); System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis())); }
@Test public void testStateTransitionTimeoutByClusterLevel() throws InterruptedException { _gSetupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB + 1, _PARTITIONS, STATE_MODEL); _gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, TEST_DB + 1, false); _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB + 1, 3); StateTransitionTimeoutConfig stateTransitionTimeoutConfig = new StateTransitionTimeoutConfig(new ZNRecord(TEST_DB + 1)); stateTransitionTimeoutConfig.setStateTransitionTimeout("SLAVE", "MASTER", 300); ClusterConfig clusterConfig = _configAccessor.getClusterConfig(CLUSTER_NAME); clusterConfig.setStateTransitionTimeoutConfig(stateTransitionTimeoutConfig); _configAccessor.setClusterConfig(CLUSTER_NAME, clusterConfig); setParticipants(TEST_DB + 1); _gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, TEST_DB + 1, true); boolean result = ClusterStateVerifier .verifyByPolling(new MasterNbInExtViewVerifier(ZK_ADDR, CLUSTER_NAME)); Assert.assertTrue(result); verify(TEST_DB + 1); }
.enableResource(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, true);
admin.enableResource(clusterName, customCodeRunnerResource, false); admin.enableResource(clusterName, customCodeRunnerResource, true); result = ClusterStateVerifier
admin.enableResource(clusterName, dbName, false);
_gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, "TestDB_2", false);
@Test public void testStateTransitionTimeOut() throws Exception { _gSetupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, STATE_MODEL); _gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, TEST_DB, false); _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, 3); // Set the timeout values StateTransitionTimeoutConfig stateTransitionTimeoutConfig = new StateTransitionTimeoutConfig(new ZNRecord(TEST_DB)); stateTransitionTimeoutConfig.setStateTransitionTimeout("SLAVE", "MASTER", 300); ResourceConfig resourceConfig = new ResourceConfig.Builder(TEST_DB) .setStateTransitionTimeoutConfig(stateTransitionTimeoutConfig) .setRebalanceConfig(new RebalanceConfig(new ZNRecord(TEST_DB))) .setNumPartitions(_PARTITIONS).setHelixEnabled(false).build(); _configAccessor.setResourceConfig(CLUSTER_NAME, TEST_DB, resourceConfig); setParticipants(TEST_DB); _gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, TEST_DB, true); boolean result = ClusterStateVerifier .verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR, CLUSTER_NAME)); Assert.assertTrue(result); verify(TEST_DB); }