Merge branch 'helixli/master' Conflicts: helix-admin-webapp/helix-admin-webapp-0.6.10-SNAPSHOT.ivy helix-admin-webapp/helix-admin-webapp-0.6.6-SNAPSHOT.ivy helix-admin-webapp/helix-admin-webapp-0.6.9-SNAPSHOT.ivy helix-admin-webapp/pom.xml helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/JobResource.java helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/SchedulerTasksResource.java helix-admin-webapp/src/test/java/org/apache/helix/webapp/TestClusterManagementWebapp.java helix-agent/helix-agent-0.6.10-SNAPSHOT.ivy helix-agent/helix-agent-0.6.6-SNAPSHOT.ivy helix-agent/helix-agent-0.6.9-SNAPSHOT.ivy helix-agent/pom.xml helix-core/helix-core-0.6.10-SNAPSHOT.ivy helix-core/helix-core-0.6.6-SNAPSHOT.ivy helix-core/helix-core-0.6.9-SNAPSHOT.ivy helix-core/pom.xml helix-core/src/main/java/org/apache/helix/BaseDataAccessor.java helix-core/src/main/java/org/apache/helix/ConfigAccessor.java helix-core/src/main/java/org/apache/helix/HelixAdmin.java helix-core/src/main/java/org/apache/helix/HelixConstants.java helix-core/src/main/java/org/apache/helix/HelixDataAccessor.java helix-core/src/main/java/org/apache/helix/NotificationContext.java helix-core/src/main/java/org/apache/helix/PropertyPathBuilder.java helix-core/src/main/java/org/apache/helix/ZNRecord.java helix-core/src/main/java/org/apache/helix/api/config/RebalanceConfig.java helix-core/src/main/java/org/apache/helix/api/config/StateTransitionThrottleConfig.java helix-core/src/main/java/org/apache/helix/api/config/StateTransitionTimeoutConfig.java helix-core/src/main/java/org/apache/helix/controller/GenericHelixController.java helix-core/src/main/java/org/apache/helix/controller/common/PartitionStateMap.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/AbstractRebalancer.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/AutoRebalancer.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/DelayedAutoRebalancer.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/SemiAutoRebalancer.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/strategy/AutoRebalanceStrategy.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/strategy/CrushRebalanceStrategy.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/strategy/MultiRoundCrushRebalanceStrategy.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/strategy/crushMapping/CRUSHPlacementAlgorithm.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/topology/Node.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/topology/Topology.java helix-core/src/main/java/org/apache/helix/controller/rebalancer/util/RebalanceScheduler.java helix-core/src/main/java/org/apache/helix/controller/stages/BestPossibleStateCalcStage.java helix-core/src/main/java/org/apache/helix/controller/stages/BestPossibleStateOutput.java helix-core/src/main/java/org/apache/helix/controller/stages/ClusterDataCache.java helix-core/src/main/java/org/apache/helix/controller/stages/CurrentStateComputationStage.java helix-core/src/main/java/org/apache/helix/controller/stages/ExternalViewComputeStage.java helix-core/src/main/java/org/apache/helix/controller/stages/IntermediateStateCalcStage.java helix-core/src/main/java/org/apache/helix/controller/stages/MessageGenerationPhase.java helix-core/src/main/java/org/apache/helix/controller/stages/MessageSelectionStage.java helix-core/src/main/java/org/apache/helix/controller/stages/PersistAssignmentStage.java helix-core/src/main/java/org/apache/helix/controller/stages/ReadClusterDataStage.java helix-core/src/main/java/org/apache/helix/controller/stages/ResourceComputationStage.java helix-core/src/main/java/org/apache/helix/controller/stages/StateTransitionThrottleController.java helix-core/src/main/java/org/apache/helix/controller/stages/TaskAssignmentStage.java helix-core/src/main/java/org/apache/helix/manager/zk/CallbackHandler.java helix-core/src/main/java/org/apache/helix/manager/zk/ParticipantManager.java helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixDataAccessor.java helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java helix-core/src/main/java/org/apache/helix/manager/zk/ZKUtil.java helix-core/src/main/java/org/apache/helix/manager/zk/ZkClient.java helix-core/src/main/java/org/apache/helix/messaging/DefaultMessagingService.java helix-core/src/main/java/org/apache/helix/messaging/handling/HelixTask.java helix-core/src/main/java/org/apache/helix/messaging/handling/HelixTaskExecutor.java helix-core/src/main/java/org/apache/helix/model/ClusterConfig.java helix-core/src/main/java/org/apache/helix/model/IdealState.java helix-core/src/main/java/org/apache/helix/model/InstanceConfig.java helix-core/src/main/java/org/apache/helix/model/LeaderHistory.java helix-core/src/main/java/org/apache/helix/model/ParticipantHistory.java helix-core/src/main/java/org/apache/helix/model/ResourceConfig.java helix-core/src/main/java/org/apache/helix/model/StateModelDefinition.java helix-core/src/main/java/org/apache/helix/model/builder/IdealStateBuilder.java helix-core/src/main/java/org/apache/helix/monitoring/ParticipantStatusMonitor.java helix-core/src/main/java/org/apache/helix/monitoring/mbeans/ClusterStatusMonitor.java helix-core/src/main/java/org/apache/helix/monitoring/mbeans/InstanceMonitor.java helix-core/src/main/java/org/apache/helix/monitoring/mbeans/JobMonitor.java helix-core/src/main/java/org/apache/helix/monitoring/mbeans/ParticipantMessageMonitor.java helix-core/src/main/java/org/apache/helix/participant/statemachine/StateModelFactory.java helix-core/src/main/java/org/apache/helix/task/DeprecatedTaskRebalancer.java helix-core/src/main/java/org/apache/helix/task/FixedTargetTaskAssignmentCalculator.java helix-core/src/main/java/org/apache/helix/task/GenericTaskAssignmentCalculator.java helix-core/src/main/java/org/apache/helix/task/JobConfig.java helix-core/src/main/java/org/apache/helix/task/JobContext.java helix-core/src/main/java/org/apache/helix/task/JobRebalancer.java helix-core/src/main/java/org/apache/helix/task/TaskConstants.java helix-core/src/main/java/org/apache/helix/task/TaskDriver.java helix-core/src/main/java/org/apache/helix/task/TaskRebalancer.java helix-core/src/main/java/org/apache/helix/task/TaskState.java helix-core/src/main/java/org/apache/helix/task/TaskStateModel.java helix-core/src/main/java/org/apache/helix/task/TaskStateModelFactory.java helix-core/src/main/java/org/apache/helix/task/TaskUtil.java helix-core/src/main/java/org/apache/helix/task/Workflow.java helix-core/src/main/java/org/apache/helix/task/WorkflowConfig.java helix-core/src/main/java/org/apache/helix/task/WorkflowContext.java helix-core/src/main/java/org/apache/helix/task/WorkflowRebalancer.java helix-core/src/main/java/org/apache/helix/task/beans/JobBean.java helix-core/src/main/java/org/apache/helix/tools/ClusterExternalViewVerifier.java helix-core/src/main/java/org/apache/helix/tools/ClusterLiveNodesVerifier.java helix-core/src/main/java/org/apache/helix/tools/ClusterStateVerifier.java helix-core/src/main/java/org/apache/helix/tools/ClusterVerifier.java helix-core/src/main/java/org/apache/helix/tools/ClusterVerifiers/BestPossibleExternalViewVerifier.java helix-core/src/main/java/org/apache/helix/tools/ClusterVerifiers/StrictMatchExternalViewVerifier.java helix-core/src/main/java/org/apache/helix/tools/ClusterVerifiers/ZkHelixClusterVerifier.java helix-core/src/main/java/org/apache/helix/tools/IntegrationTestUtil.java helix-core/src/main/java/org/apache/helix/util/HelixUtil.java helix-core/src/test/java/org/apache/helix/Mocks.java helix-core/src/test/java/org/apache/helix/TestHelixTaskExecutor.java helix-core/src/test/java/org/apache/helix/TestPropertyPathBuilder.java helix-core/src/test/java/org/apache/helix/ZkUnitTestBase.java helix-core/src/test/java/org/apache/helix/controller/rebalancer/TestAutoRebalanceStrategy.java helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleCalcStageCompatibility.java helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleStateCalcStage.java helix-core/src/test/java/org/apache/helix/controller/stages/TestCurrentStateComputationStage.java helix-core/src/test/java/org/apache/helix/controller/stages/TestRebalancePipeline.java helix-core/src/test/java/org/apache/helix/controller/stages/TestResourceComputationStage.java helix-core/src/test/java/org/apache/helix/controller/stages/TestResourceValidationStage.java helix-core/src/test/java/org/apache/helix/controller/strategy/TestTopology.java helix-core/src/test/java/org/apache/helix/integration/SinglePartitionLeaderStandByTest.java helix-core/src/test/java/org/apache/helix/integration/TestAddNodeAfterControllerStart.java helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java helix-core/src/test/java/org/apache/helix/integration/TestCarryOverBadCurState.java helix-core/src/test/java/org/apache/helix/integration/TestClusterStartsup.java helix-core/src/test/java/org/apache/helix/integration/TestDisable.java helix-core/src/test/java/org/apache/helix/integration/TestDriver.java helix-core/src/test/java/org/apache/helix/integration/TestDrop.java helix-core/src/test/java/org/apache/helix/integration/TestEnableCompression.java helix-core/src/test/java/org/apache/helix/integration/TestEnablePartitionDuringDisable.java helix-core/src/test/java/org/apache/helix/integration/TestNullReplica.java helix-core/src/test/java/org/apache/helix/integration/TestPartitionMovementThrottle.java helix-core/src/test/java/org/apache/helix/integration/TestPersistAssignmentStage.java helix-core/src/test/java/org/apache/helix/integration/TestRebalancerPersistAssignments.java helix-core/src/test/java/org/apache/helix/integration/TestResourceGroupEndtoEnd.java helix-core/src/test/java/org/apache/helix/integration/TestStartMultipleControllersWithSameName.java helix-core/src/test/java/org/apache/helix/integration/TestStateTransitionCancellation.java helix-core/src/test/java/org/apache/helix/integration/TestSyncSessionToController.java helix-core/src/test/java/org/apache/helix/integration/ZkIntegrationTestBase.java helix-core/src/test/java/org/apache/helix/integration/manager/MockParticipantManager.java helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessage.java helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessageWrapper.java helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle.java helix-core/src/test/java/org/apache/helix/integration/messaging/TestSchedulerMessage.java helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoIsWithEmptyMap.java helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java helix-core/src/test/java/org/apache/helix/integration/task/MockTask.java helix-core/src/test/java/org/apache/helix/integration/task/TaskTestBase.java helix-core/src/test/java/org/apache/helix/integration/task/TaskTestUtil.java helix-core/src/test/java/org/apache/helix/integration/task/TestGenericTaskAssignmentCalculator.java helix-core/src/test/java/org/apache/helix/integration/task/TestIndependentTaskRebalancer.java helix-core/src/test/java/org/apache/helix/integration/task/TestJobQueueCleanUp.java helix-core/src/test/java/org/apache/helix/integration/task/TestRebalanceRunningTask.java helix-core/src/test/java/org/apache/helix/integration/task/TestRecurringJobQueue.java helix-core/src/test/java/org/apache/helix/integration/task/TestRunJobsWithMissingTarget.java helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRebalancer.java helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRebalancerParallel.java helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRebalancerStopResume.java helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRetryDelay.java helix-core/src/test/java/org/apache/helix/integration/task/TestTaskThrottling.java helix-core/src/test/java/org/apache/helix/integration/task/TestUnregisteredCommand.java helix-core/src/test/java/org/apache/helix/integration/task/TestUserContentStore.java helix-core/src/test/java/org/apache/helix/integration/task/TestWorkflowJobDependency.java helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpMultiThread.java helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpSingleThread.java helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheSyncOpSingleThread.java helix-core/src/test/java/org/apache/helix/manager/zk/TestZKUtil.java helix-core/src/test/java/org/apache/helix/manager/zk/TestZkBaseDataAccessor.java helix-core/src/test/java/org/apache/helix/manager/zk/TestZkCacheAsyncOpSingleThread.java helix-core/src/test/java/org/apache/helix/manager/zk/TestZkCacheSyncOpSingleThread.java helix-core/src/test/java/org/apache/helix/manager/zk/TestZkClient.java helix-core/src/test/java/org/apache/helix/manager/zk/TestZkHelixAdmin.java helix-core/src/test/java/org/apache/helix/messaging/TestDefaultMessagingService.java helix-core/src/test/java/org/apache/helix/messaging/handling/TestConfigThreadpoolSize.java helix-core/src/test/java/org/apache/helix/messaging/handling/TestHelixTaskExecutor.java helix-core/src/test/java/org/apache/helix/messaging/handling/TestResourceThreadpoolSize.java helix-core/src/test/java/org/apache/helix/monitoring/TestParticipantMonitor.java helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestDisableResourceMbean.java helix-core/src/test/java/org/apache/helix/participant/TestDistControllerElection.java helix-core/src/test/java/org/apache/helix/task/TaskSynchronizedTestBase.java helix-core/src/test/java/org/apache/helix/task/TestCleanExpiredJobs.java helix-core/src/test/java/org/apache/helix/task/TestScheduleDelayJobs.java helix-core/src/test/java/org/apache/helix/task/TestSemiAutoStateTransition.java helix-core/src/test/java/org/apache/helix/tools/TestClusterSetup.java helix-core/src/test/java/org/apache/helix/tools/TestClusterVerifier.java pom.xml recipes/distributed-lock-manager/pom.xml recipes/pom.xml recipes/rabbitmq-consumer-group/pom.xml recipes/rsync-replicated-file-system/pom.xml recipes/service-discovery/pom.xml recipes/task-execution/pom.xml
Project: http://git-wip-us.apache.org/repos/asf/helix/repo Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/fe0b6e80 Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/fe0b6e80 Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/fe0b6e80 Branch: refs/heads/master Commit: fe0b6e800e24c52d514c78d1fbab3d6b0800803f Parents: dd05393 d89fbb9 Author: Junkai Xue <j...@linkedin.com> Authored: Tue Nov 7 16:48:26 2017 -0800 Committer: Junkai Xue <j...@linkedin.com> Committed: Tue Nov 7 16:48:26 2017 -0800 ---------------------------------------------------------------------- .reviewboardrc | 1 + bump-up.command | 19 +- .../helix-admin-webapp-0.6.10-SNAPSHOT.ivy | 46 - .../helix-admin-webapp-0.6.9-SNAPSHOT.ivy | 46 + helix-admin-webapp/pom.xml | 2 +- .../helix/webapp/resources/JobResource.java | 1 + .../resources/SchedulerTasksResource.java | 5 +- .../webapp/TestClusterManagementWebapp.java | 2 +- helix-agent/helix-agent-0.6.10-SNAPSHOT.ivy | 96 - helix-agent/helix-agent-0.6.9-SNAPSHOT.ivy | 96 + helix-agent/pom.xml | 2 +- helix-core/helix-core-0.6.10-SNAPSHOT.ivy | 63 - helix-core/helix-core-0.6.9-SNAPSHOT.ivy | 62 + helix-core/pom.xml | 17 +- .../java/org/apache/helix/BaseDataAccessor.java | 2 +- .../java/org/apache/helix/ConfigAccessor.java | 49 +- .../org/apache/helix/ConfigChangeListener.java | 19 +- .../apache/helix/ControllerChangeListener.java | 12 +- .../helix/CurrentStateChangeListener.java | 22 +- .../helix/ExternalViewChangeListener.java | 22 +- .../main/java/org/apache/helix/GroupCommit.java | 23 +- .../main/java/org/apache/helix/HelixAdmin.java | 52 +- .../java/org/apache/helix/HelixConstants.java | 6 +- .../org/apache/helix/HelixDataAccessor.java | 17 +- .../java/org/apache/helix/HelixManager.java | 104 +- .../java/org/apache/helix/HelixProperty.java | 121 +- .../apache/helix/IdealStateChangeListener.java | 20 +- .../helix/InstanceConfigChangeListener.java | 18 +- .../java/org/apache/helix/InstanceType.java | 48 +- .../helix/LiveInstanceChangeListener.java | 20 +- .../java/org/apache/helix/MessageListener.java | 23 +- .../org/apache/helix/NotificationContext.java | 58 +- .../main/java/org/apache/helix/PropertyKey.java | 76 +- .../org/apache/helix/PropertyPathBuilder.java | 27 + .../java/org/apache/helix/PropertyType.java | 1 + .../helix/ScopedConfigChangeListener.java | 14 +- .../main/java/org/apache/helix/ZNRecord.java | 4 +- .../helix/api/config/RebalanceConfig.java | 5 +- .../config/StateTransitionThrottleConfig.java | 5 +- .../config/StateTransitionTimeoutConfig.java | 1 - .../apache/helix/api/listeners/BatchMode.java | 28 + .../listeners/ClusterConfigChangeListener.java | 36 + .../api/listeners/ConfigChangeListener.java | 38 + .../api/listeners/ControllerChangeListener.java | 33 + .../listeners/CurrentStateChangeListener.java | 40 + .../listeners/ExternalViewChangeListener.java | 39 + .../api/listeners/IdealStateChangeListener.java | 39 + .../listeners/InstanceConfigChangeListener.java | 37 + .../listeners/LiveInstanceChangeListener.java | 39 + .../helix/api/listeners/MessageListener.java | 40 + .../apache/helix/api/listeners/PreFetch.java | 29 + .../listeners/ResourceConfigChangeListener.java | 37 + .../listeners/ScopedConfigChangeListener.java | 36 + .../helix/controller/ExternalViewGenerator.java | 2 +- .../controller/GenericHelixController.java | 571 +- .../helix/controller/HelixControllerMain.java | 3 +- .../controller/common/PartitionStateMap.java | 2 +- .../controller/pipeline/AbstractBaseStage.java | 18 +- .../helix/controller/pipeline/Pipeline.java | 27 +- .../controller/pipeline/PipelineRegistry.java | 19 +- .../apache/helix/controller/pipeline/Stage.java | 2 +- .../rebalancer/AbstractRebalancer.java | 247 +- .../controller/rebalancer/AutoRebalancer.java | 15 +- .../controller/rebalancer/CustomRebalancer.java | 14 +- .../rebalancer/DelayedAutoRebalancer.java | 411 +- .../rebalancer/SemiAutoRebalancer.java | 101 +- .../strategy/AutoRebalanceStrategy.java | 37 +- .../strategy/CrushRebalanceStrategy.java | 20 +- .../MultiRoundCrushRebalanceStrategy.java | 114 +- .../crushMapping/CRUSHPlacementAlgorithm.java | 5 +- .../controller/rebalancer/topology/Node.java | 2 + .../rebalancer/topology/Topology.java | 92 +- .../rebalancer/util/RebalanceScheduler.java | 2 +- .../helix/controller/stages/AttributeName.java | 10 +- .../stages/BestPossibleStateCalcStage.java | 111 +- .../stages/BestPossibleStateOutput.java | 9 +- .../controller/stages/ClusterDataCache.java | 635 +- .../helix/controller/stages/ClusterEvent.java | 48 +- .../stages/ClusterEventBlockingQueue.java | 14 +- .../controller/stages/ClusterEventType.java | 35 + .../stages/CompatibilityCheckStage.java | 4 +- .../stages/CurrentStateComputationStage.java | 163 +- .../controller/stages/CurrentStateOutput.java | 13 + .../stages/ExternalViewComputeStage.java | 45 +- .../stages/IntermediateStateCalcStage.java | 675 +- .../stages/MessageGenerationPhase.java | 226 +- .../stages/MessageSelectionStage.java | 8 +- .../controller/stages/MessageThrottleStage.java | 2 +- .../stages/PersistAssignmentStage.java | 79 +- .../controller/stages/ReadClusterDataStage.java | 80 +- .../stages/ResourceComputationStage.java | 40 +- .../stages/ResourceValidationStage.java | 2 +- .../StateTransitionThrottleController.java | 55 +- .../stages/TargetExteralViewCalcStage.java | 116 + .../controller/stages/TaskAssignmentStage.java | 25 +- .../ParticipantHealthReportCollectorImpl.java | 25 +- .../ParticipantHealthReportTask.java | 2 +- .../helix/manager/zk/CallbackHandler.java | 416 +- .../manager/zk/ControllerManagerHelper.java | 6 +- .../manager/zk/DistributedLeaderElection.java | 4 +- .../helix/manager/zk/ParticipantManager.java | 4 +- .../apache/helix/manager/zk/ZKHelixAdmin.java | 121 +- .../helix/manager/zk/ZKHelixDataAccessor.java | 63 +- .../apache/helix/manager/zk/ZKHelixManager.java | 284 +- .../org/apache/helix/manager/zk/ZKUtil.java | 55 +- .../helix/manager/zk/ZkAsyncCallbacks.java | 35 +- .../helix/manager/zk/ZkBaseDataAccessor.java | 1 + .../manager/zk/ZkCacheBaseDataAccessor.java | 22 +- .../org/apache/helix/manager/zk/ZkClient.java | 388 +- .../messaging/DefaultMessagingService.java | 2 +- .../messaging/handling/BatchMessageHandler.java | 5 +- .../handling/HelixStateTransitionHandler.java | 39 +- .../helix/messaging/handling/HelixTask.java | 15 +- .../messaging/handling/HelixTaskExecutor.java | 304 +- .../org/apache/helix/model/ClusterConfig.java | 293 +- .../org/apache/helix/model/CurrentState.java | 86 +- .../java/org/apache/helix/model/IdealState.java | 110 +- .../org/apache/helix/model/InstanceConfig.java | 89 +- .../org/apache/helix/model/LeaderHistory.java | 13 + .../java/org/apache/helix/model/Message.java | 6 +- .../apache/helix/model/ParticipantHistory.java | 47 +- .../org/apache/helix/model/PauseSignal.java | 17 + .../org/apache/helix/model/ResourceConfig.java | 148 +- .../helix/model/StateModelDefinition.java | 62 +- .../helix/model/builder/IdealStateBuilder.java | 52 +- .../monitoring/ParticipantStatusMonitor.java | 155 - .../monitoring/mbeans/ClusterEventMonitor.java | 92 + .../monitoring/mbeans/ClusterStatusMonitor.java | 368 +- .../mbeans/ClusterStatusMonitorMBean.java | 5 + .../monitoring/mbeans/HelixCallbackMonitor.java | 99 + .../mbeans/HelixStageLatencyMonitor.java | 98 - .../mbeans/HelixStageLatencyMonitorMBean.java | 28 - .../monitoring/mbeans/InstanceMonitor.java | 22 +- .../helix/monitoring/mbeans/JobMonitor.java | 8 +- .../helix/monitoring/mbeans/MBeanRegistrar.java | 104 + .../mbeans/MessageLatencyMonitor.java | 78 + .../monitoring/mbeans/MessageQueueMonitor.java | 2 +- .../monitoring/mbeans/MonitorDomainNames.java | 31 + .../mbeans/ParticipantMessageMonitor.java | 8 +- .../mbeans/ParticipantStatusMonitor.java | 192 + .../mbeans/PerInstanceResourceMonitor.java | 8 +- .../monitoring/mbeans/ResourceMonitor.java | 320 +- .../monitoring/mbeans/ResourceMonitorMBean.java | 34 - .../mbeans/StateTransitionStatMonitor.java | 13 +- .../mbeans/StateTransitionStatMonitorMBean.java | 4 +- .../mbeans/ThreadPoolExecutorMonitor.java | 52 + .../mbeans/ThreadPoolExecutorMonitorMBean.java | 10 + .../monitoring/mbeans/ZkClientMonitor.java | 135 + .../monitoring/mbeans/ZkClientMonitorMBean.java | 27 + .../monitoring/mbeans/ZkClientPathMonitor.java | 176 + .../dynamicMBeans/DynamicMBeanProvider.java | 210 + .../mbeans/dynamicMBeans/DynamicMetric.java | 109 + .../dynamicMBeans/HistogramDynamicMetric.java | 132 + .../dynamicMBeans/SimpleDynamicMetric.java | 60 + .../statemachine/StateModelFactory.java | 21 + .../helix/store/zk/ZkHelixPropertyStore.java | 6 +- .../helix/task/DeprecatedTaskRebalancer.java | 33 +- .../FixedTargetTaskAssignmentCalculator.java | 34 +- .../task/GenericTaskAssignmentCalculator.java | 48 +- .../java/org/apache/helix/task/JobConfig.java | 12 +- .../java/org/apache/helix/task/JobContext.java | 11 +- .../org/apache/helix/task/JobRebalancer.java | 428 +- .../org/apache/helix/task/TaskConstants.java | 5 + .../java/org/apache/helix/task/TaskDriver.java | 47 +- .../org/apache/helix/task/TaskRebalancer.java | 48 +- .../java/org/apache/helix/task/TaskState.java | 12 +- .../org/apache/helix/task/TaskStateModel.java | 14 +- .../helix/task/TaskStateModelFactory.java | 37 +- .../java/org/apache/helix/task/TaskUtil.java | 31 +- .../java/org/apache/helix/task/Workflow.java | 1 + .../org/apache/helix/task/WorkflowConfig.java | 51 +- .../org/apache/helix/task/WorkflowContext.java | 44 +- .../apache/helix/task/WorkflowRebalancer.java | 108 +- .../org/apache/helix/task/beans/JobBean.java | 2 +- .../tools/ClusterExternalViewVerifier.java | 148 +- .../helix/tools/ClusterLiveNodesVerifier.java | 25 +- .../org/apache/helix/tools/ClusterSetup.java | 13 +- .../helix/tools/ClusterStateVerifier.java | 719 +- .../org/apache/helix/tools/ClusterVerifier.java | 122 +- .../BestPossibleExternalViewVerifier.java | 48 +- .../StrictMatchExternalViewVerifier.java | 90 +- .../ZkHelixClusterVerifier.java | 39 +- .../tools/DefaultIdealStateCalculator.java | 14 +- .../apache/helix/tools/IntegrationTestUtil.java | 1 - .../java/org/apache/helix/util/HelixUtil.java | 98 +- .../java/org/apache/helix/MockAccessor.java | 234 + .../src/test/java/org/apache/helix/Mocks.java | 708 -- .../org/apache/helix/TestConfigAccessor.java | 6 +- .../TestEspressoStorageClusterIdealState.java | 4 +- .../java/org/apache/helix/TestGroupCommit.java | 6 +- .../apache/helix/TestHelixConfigAccessor.java | 4 +- .../org/apache/helix/TestHelixTaskExecutor.java | 14 +- .../org/apache/helix/TestHelixTaskHandler.java | 12 +- .../test/java/org/apache/helix/TestHelper.java | 10 + .../apache/helix/TestHierarchicalDataStore.java | 4 - .../org/apache/helix/TestListenerCallback.java | 210 +- .../helix/TestListenerCallbackBatchMode.java | 214 + .../helix/TestListenerCallbackPrefetch.java | 207 + .../apache/helix/TestPropertyPathBuilder.java | 20 +- .../java/org/apache/helix/TestRoutingTable.java | 6 +- .../java/org/apache/helix/TestZKCallback.java | 21 +- .../apache/helix/TestZKRoutingInfoProvider.java | 6 +- .../java/org/apache/helix/ZkUnitTestBase.java | 13 +- .../rebalancer/TestAbstractRebalancer.java | 55 + .../rebalancer/TestAutoRebalanceStrategy.java | 17 +- .../rebalancer/TestZeroReplicaAvoidance.java | 118 + .../helix/controller/stages/BaseStageTest.java | 135 +- .../controller/stages/DummyClusterManager.java | 87 +- .../TestBestPossibleCalcStageCompatibility.java | 2 + .../stages/TestBestPossibleStateCalcStage.java | 17 +- .../controller/stages/TestClusterDataCache.java | 64 + .../controller/stages/TestClusterEvent.java | 4 +- .../stages/TestClusterEventBlockingQueue.java | 14 +- .../stages/TestCompatibilityCheckStage.java | 8 +- .../TestCurrentStateComputationStage.java | 6 +- .../stages/TestMessageThrottleStage.java | 15 +- .../stages/TestRebalancePipeline.java | 133 +- .../stages/TestResourceComputationStage.java | 10 +- .../stages/TestResourceValidationStage.java | 26 +- .../stages/TestStateTransitionPrirority.java | 329 + .../helix/controller/strategy/TestTopology.java | 12 +- ...estParticipantHealthReportCollectorImpl.java | 4 +- .../integration/DelayedTransitionBase.java | 45 + .../helix/integration/IntegrationTest.java | 38 - .../SinglePartitionLeaderStandByTest.java | 3 +- .../helix/integration/TestAddClusterV2.java | 1 + .../TestAddNodeAfterControllerStart.java | 14 +- .../TestAddStateModelFactoryAfterConnect.java | 1 + .../integration/TestAutoIsWithEmptyMap.java | 104 - .../helix/integration/TestAutoRebalance.java | 291 - .../TestAutoRebalancePartitionLimit.java | 234 - .../helix/integration/TestBasicSpectator.java | 1 + .../helix/integration/TestBatchMessage.java | 355 - .../integration/TestBatchMessageHandling.java | 5 +- .../integration/TestBatchMessageWrapper.java | 147 - .../integration/TestBucketizedResource.java | 70 +- .../integration/TestCMWithFailParticipant.java | 1 + .../integration/TestCarryOverBadCurState.java | 12 +- .../helix/integration/TestClusterStartsup.java | 1 + .../integration/TestControllerLiveLock.java | 129 - .../helix/integration/TestCustomIdealState.java | 135 - .../TestCustomizedIdealStateRebalancer.java | 206 - .../apache/helix/integration/TestDisable.java | 27 +- .../integration/TestDisableExternalView.java | 1 + .../helix/integration/TestDisableNode.java | 1 + .../helix/integration/TestDisablePartition.java | 16 +- .../helix/integration/TestDisableResource.java | 2 +- .../integration/TestDistributedCMMain.java | 1 + .../TestDistributedClusterController.java | 3 +- .../apache/helix/integration/TestDriver.java | 19 +- .../org/apache/helix/integration/TestDrop.java | 85 +- .../helix/integration/TestDropResource.java | 1 + .../integration/TestEnableCompression.java | 12 +- .../TestEnablePartitionDuringDisable.java | 6 +- .../helix/integration/TestErrorPartition.java | 1 + .../helix/integration/TestExpandCluster.java | 1 + .../integration/TestExternalViewUpdates.java | 10 +- .../integration/TestFullAutoNodeTagging.java | 480 -- .../integration/TestHelixCustomCodeRunner.java | 1 + .../helix/integration/TestHelixInstanceTag.java | 1 + .../TestHelixUsingDifferentParams.java | 1 + .../helix/integration/TestInstanceAutoJoin.java | 76 - .../TestMessagePartitionStateMismatch.java | 1 + .../helix/integration/TestMessageThrottle.java | 148 - .../helix/integration/TestMessageThrottle2.java | 458 -- .../helix/integration/TestMessagingService.java | 448 -- .../integration/TestNonOfflineInitState.java | 113 - .../helix/integration/TestNullReplica.java | 9 +- .../TestParticipantErrorMessage.java | 98 - .../TestParticipantNameCollision.java | 54 - .../TestPartitionLevelTransitionConstraint.java | 1 + .../TestPartitionMovementThrottle.java | 245 +- .../helix/integration/TestPauseSignal.java | 1 + .../integration/TestPersistAssignmentStage.java | 36 +- .../TestRebalancerPersistAssignments.java | 73 +- .../helix/integration/TestRenamePartition.java | 1 + .../helix/integration/TestResetInstance.java | 1 + .../integration/TestResetPartitionState.java | 1 + .../helix/integration/TestResetResource.java | 1 + .../integration/TestResourceGroupEndtoEnd.java | 7 +- .../integration/TestRestartParticipant.java | 117 - .../helix/integration/TestSchedulerMessage.java | 672 -- .../integration/TestSchedulerMessage2.java | 137 - .../integration/TestSchedulerMsgContraints.java | 190 - .../integration/TestSchedulerMsgUsingQueue.java | 133 - .../helix/integration/TestSchemataSM.java | 1 + .../TestSessionExpiryInTransition.java | 1 + .../helix/integration/TestStandAloneCMMain.java | 1 + .../TestStandAloneCMSessionExpiry.java | 1 + ...estStartMultipleControllersWithSameName.java | 4 +- .../TestStateTransitionCancellation.java | 7 +- .../integration/TestStateTransitionTimeout.java | 183 - .../helix/integration/TestStatusUpdate.java | 2 + .../helix/integration/TestSwapInstance.java | 1 + .../TestSyncSessionToController.java | 3 +- .../integration/TestZkCallbackHandlerLeak.java | 18 +- .../helix/integration/TestZkConnectionLost.java | 154 + .../integration/ZkIntegrationTestBase.java | 125 - .../integration/ZkStandAloneCMTestBase.java | 124 - .../integration/common/IntegrationTest.java | 38 + .../common/ZkIntegrationTestBase.java | 247 + .../common/ZkStandAloneCMTestBase.java | 131 + .../TestClusterDataCacheSelectiveUpdate.java | 179 + .../controller/TestControllerHistory.java | 60 + .../controller/TestControllerLiveLock.java | 129 + .../TestSkipBestPossibleCalculation.java | 89 + .../controller/TestTargetExternalView.java | 85 + .../manager/MockParticipantManager.java | 16 +- .../manager/TestConsecutiveZkSessionExpiry.java | 6 +- .../TestDistributedControllerManager.java | 2 +- .../manager/TestParticipantManager.java | 10 +- .../manager/TestZkCallbackHandlerLeak.java | 16 +- .../integration/manager/TestZkHelixAdmin.java | 85 + .../integration/messaging/TestBatchMessage.java | 357 + .../messaging/TestBatchMessageWrapper.java | 142 + .../messaging/TestMessageThrottle.java | 148 + .../messaging/TestMessageThrottle2.java | 459 ++ .../messaging/TestMessagingService.java | 449 ++ .../messaging/TestSchedulerMessage.java | 674 ++ .../messaging/TestSchedulerMessage2.java | 138 + .../messaging/TestSchedulerMsgContraints.java | 191 + .../messaging/TestSchedulerMsgUsingQueue.java | 134 + .../paticipant/TestInstanceAutoJoin.java | 77 + .../paticipant/TestInstanceCurrentState.java | 60 + .../paticipant/TestInstanceHistory.java | 59 + .../paticipant/TestNodeOfflineTimeStamp.java | 59 + .../paticipant/TestNonOfflineInitState.java | 114 + .../paticipant/TestParticipantErrorMessage.java | 99 + .../TestParticipantNameCollision.java | 55 + .../paticipant/TestRestartParticipant.java | 118 + .../paticipant/TestStateTransitionTimeout.java | 184 + .../TestStateTransitionTimeoutWithResource.java | 243 + .../TestCrushAutoRebalance.java | 316 + .../TestCrushAutoRebalanceNonRack.java | 278 + ...rushAutoRebalanceTopoplogyAwareDisabled.java | 93 + .../TestDelayedAutoRebalance.java | 342 + ...elayedAutoRebalanceWithDisabledInstance.java | 317 + .../TestDelayedAutoRebalanceWithRackaware.java | 124 + .../rebalancer/TestAutoIsWithEmptyMap.java | 103 + .../rebalancer/TestAutoRebalance.java | 292 + .../TestAutoRebalancePartitionLimit.java | 234 + .../TestAutoRebalanceWithDisabledInstance.java | 168 + .../rebalancer/TestCustomIdealState.java | 136 + .../TestCustomizedIdealStateRebalancer.java | 204 + .../rebalancer/TestFullAutoNodeTagging.java | 478 ++ .../rebalancer/TestMixedModeAutoRebalance.java | 284 + ...estPauseClusterWhenReachingMaxPartition.java | 139 + ...lusterWhenReachingOfflineInstancesLimit.java | 174 + .../rebalancer/TestSemiAutoRebalance.java | 228 + .../rebalancer/TestZeroReplicaAvoidance.java | 220 + .../apache/helix/integration/task/MockTask.java | 53 +- .../helix/integration/task/TaskTestBase.java | 3 +- .../helix/integration/task/TaskTestUtil.java | 54 +- .../TestGenericTaskAssignmentCalculator.java | 41 +- .../task/TestIndependentTaskRebalancer.java | 10 +- .../helix/integration/task/TestJobFailure.java | 152 + .../task/TestJobFailureHighThreshold.java | 116 + .../task/TestJobFailureTaskNotStarted.java | 202 + .../integration/task/TestJobQueueCleanUp.java | 9 +- .../helix/integration/task/TestJobTimeout.java | 164 + .../task/TestJobTimeoutTaskNotStarted.java | 178 + .../task/TestRebalanceRunningTask.java | 12 +- .../integration/task/TestRecurringJobQueue.java | 42 +- .../task/TestRunJobsWithMissingTarget.java | 6 +- .../integration/task/TestTaskRebalancer.java | 10 +- .../task/TestTaskRebalancerParallel.java | 16 +- .../task/TestTaskRebalancerStopResume.java | 18 +- .../integration/task/TestTaskRetryDelay.java | 4 +- .../integration/task/TestTaskThreadLeak.java | 82 + .../integration/task/TestTaskThrottling.java | 6 +- .../task/TestUnregisteredCommand.java | 2 +- .../integration/task/TestUserContentStore.java | 2 +- .../task/TestWorkflowJobDependency.java | 3 +- .../helix/manager/zk/TestHandleNewSession.java | 2 +- .../manager/zk/TestLiveInstanceBounce.java | 2 +- .../zk/TestWtCacheAsyncOpMultiThread.java | 18 +- .../zk/TestWtCacheAsyncOpSingleThread.java | 28 +- .../zk/TestWtCacheSyncOpSingleThread.java | 26 +- .../org/apache/helix/manager/zk/TestZKUtil.java | 15 +- .../manager/zk/TestZkBaseDataAccessor.java | 34 +- .../zk/TestZkCacheAsyncOpSingleThread.java | 29 +- .../zk/TestZkCacheSyncOpSingleThread.java | 5 +- .../apache/helix/manager/zk/TestZkClient.java | 183 +- .../helix/manager/zk/TestZkHelixAdmin.java | 105 +- .../zk/TestZkManagerFlappingDetection.java | 2 +- .../manager/zk/TestZkStateChangeListener.java | 3 +- .../helix/messaging/TestAsyncCallbackSvc.java | 5 +- .../messaging/TestDefaultMessagingService.java | 9 +- .../handling/TestBatchMessageModeConfigs.java | 83 + .../handling/TestConfigThreadpoolSize.java | 42 +- .../handling/TestHelixTaskExecutor.java | 65 +- .../handling/TestResourceThreadpoolSize.java | 112 +- .../apache/helix/mock/MockBaseDataAccessor.java | 253 + .../helix/mock/MockClusterMessagingService.java | 84 + .../org/apache/helix/mock/MockHelixAdmin.java | 372 ++ .../java/org/apache/helix/mock/MockManager.java | 338 + .../mock/participant/MockHelixTaskExecutor.java | 42 + .../statemodel/MockMasterSlaveStateModel.java | 36 + .../statemodel/MockStateModelAnnotated.java | 44 + .../mock/statemodel/MockTaskStateModel.java | 47 + .../statemodel/MockTaskStateModelFactory.java | 64 + .../TestClusterEventStatusMonitor.java | 94 + .../TestClusterStatusMonitorLifecycle.java | 30 +- .../monitoring/TestParticipantMonitor.java | 4 +- .../mbeans/TestDisableResourceMbean.java | 2 +- .../mbeans/TestDropResourceMetricsReset.java | 2 +- .../mbeans/TestHelixCallbackMonitor.java | 92 + .../mbeans/TestRebalancerMetrics.java | 164 + .../mbeans/TestResetClusterMetrics.java | 2 +- .../monitoring/mbeans/TestResourceMonitor.java | 189 +- .../mbeans/TestTopStateHandoffMetrics.java | 162 + .../monitoring/mbeans/TestZkClientMonitor.java | 124 + .../helix/participant/MockZKHelixManager.java | 87 +- .../participant/TestDistControllerElection.java | 6 +- .../store/zk/TestZkHelixPropertyStore.java | 28 +- .../helix/task/TaskSynchronizedTestBase.java | 7 +- .../apache/helix/task/TestCleanExpiredJobs.java | 5 +- .../helix/task/TestJobConfigValidation.java | 40 + .../helix/task/TestScheduleDelayJobs.java | 7 +- .../helix/task/TestSemiAutoStateTransition.java | 4 +- .../TestStrictMatchExternalViewVerifier.java | 55 + .../apache/helix/tools/TestClusterSetup.java | 4 +- .../apache/helix/tools/TestClusterVerifier.java | 77 +- .../apache/helix/tools/TestHelixAdminCli.java | 2 +- .../helix/util/TestIdealStateAssignment.java | 66 + .../org/apache/helix/util/TestInputLoader.java | 56 + ...ractRebalancer.ComputeBestPossibleState.json | 175 + .../TestDelayedAutoRebalancer.MasterSlave.json | 109 + ...TestDelayedAutoRebalancer.OnlineOffline.json | 106 + .../TestIdealStateAssignment.NoIdealState.json | 84 + .../src/test/resources/TestJobFailure.json | 24 + .../resources/TestPartitionLevelPriority.json | 165 + .../resources/TestResourceLevelPriority.json | 40 + ...xternalViewVerifier.ComputeIdealMapping.json | 32 + .../resources/TestTopStateHandoffMetrics.json | 178 + helix-front/.angular-cli.json | 58 + helix-front/.editorconfig | 13 + helix-front/.env | 1 + helix-front/.gitignore | 44 + helix-front/.vscode/launch.json | 29 + helix-front/README.md | 20 + helix-front/assemble/assembly.xml | 59 + helix-front/assemble/bin/start-helix-ui.sh | 11 + helix-front/assemble/package.json | 19 + helix-front/assemble/package.sh | 12 + helix-front/client/app/app-routing.module.ts | 143 + helix-front/client/app/app.component.html | 22 + helix-front/client/app/app.component.scss | 32 + helix-front/client/app/app.component.spec.ts | 48 + helix-front/client/app/app.component.ts | 60 + helix-front/client/app/app.module.ts | 49 + .../client/app/chooser/chooser.module.ts | 20 + .../helix-list/helix-list.component.html | 15 + .../helix-list/helix-list.component.scss | 8 + .../helix-list/helix-list.component.spec.ts | 40 + .../chooser/helix-list/helix-list.component.ts | 28 + .../app/chooser/shared/chooser.service.spec.ts | 21 + .../app/chooser/shared/chooser.service.ts | 12 + .../cluster-detail.component.html | 54 + .../cluster-detail.component.scss | 5 + .../cluster-detail.component.spec.ts | 38 + .../cluster-detail/cluster-detail.component.ts | 185 + .../cluster-list/cluster-list.component.html | 27 + .../cluster-list/cluster-list.component.scss | 22 + .../cluster-list/cluster-list.component.spec.ts | 37 + .../cluster-list/cluster-list.component.ts | 80 + .../client/app/cluster/cluster.component.html | 11 + .../client/app/cluster/cluster.component.scss | 4 + .../app/cluster/cluster.component.spec.ts | 38 + .../client/app/cluster/cluster.component.ts | 25 + .../client/app/cluster/cluster.module.ts | 35 + .../client/app/cluster/shared/cluster.model.ts | 35 + .../app/cluster/shared/cluster.resolver.ts | 17 + .../app/cluster/shared/cluster.service.spec.ts | 18 + .../app/cluster/shared/cluster.service.ts | 52 + .../config-detail/config-detail.component.html | 10 + .../config-detail/config-detail.component.scss | 19 + .../config-detail.component.spec.ts | 36 + .../config-detail/config-detail.component.ts | 115 + .../app/configuration/configuration.module.ts | 19 + .../shared/configuration.service.spec.ts | 18 + .../shared/configuration.service.ts | 46 + .../controller-detail.component.html | 23 + .../controller-detail.component.scss | 7 + .../controller-detail.component.spec.ts | 36 + .../controller-detail.component.ts | 35 + .../client/app/controller/controller.module.ts | 18 + .../app/controller/shared/controller.model.ts | 15 + .../shared/controller.service.spec.ts | 18 + .../app/controller/shared/controller.service.ts | 23 + helix-front/client/app/core/core.module.ts | 10 + .../client/app/core/helix.service.spec.ts | 18 + helix-front/client/app/core/helix.service.ts | 101 + helix-front/client/app/core/settings.ts | 5 + helix-front/client/app/core/user.service.ts | 29 + .../history-list/history-list.component.html | 33 + .../history-list/history-list.component.scss | 14 + .../history-list/history-list.component.spec.ts | 36 + .../history-list/history-list.component.ts | 65 + .../client/app/history/history.module.ts | 21 + .../client/app/history/shared/history.model.ts | 6 + .../app/history/shared/history.service.spec.ts | 18 + .../app/history/shared/history.service.ts | 53 + .../instance-detail.component.html | 44 + .../instance-detail.component.scss | 10 + .../instance-detail.component.spec.ts | 36 + .../instance-detail.component.ts | 84 + .../instance-list/instance-list.component.html | 37 + .../instance-list/instance-list.component.scss | 13 + .../instance-list.component.spec.ts | 36 + .../instance-list/instance-list.component.ts | 48 + .../client/app/instance/instance.module.ts | 29 + .../app/instance/shared/instance.model.ts | 29 + .../instance/shared/instance.service.spec.ts | 18 + .../app/instance/shared/instance.service.ts | 76 + .../partition-detail.component.html | 46 + .../partition-detail.component.scss | 5 + .../partition-detail.component.spec.ts | 30 + .../partition-detail.component.ts | 23 + .../partition-list.component.html | 63 + .../partition-list.component.scss | 13 + .../partition-list.component.spec.ts | 38 + .../partition-list/partition-list.component.ts | 69 + .../resource-detail-for-instance.component.html | 35 + .../resource-detail-for-instance.component.scss | 11 + ...source-detail-for-instance.component.spec.ts | 35 + .../resource-detail-for-instance.component.ts | 37 + .../resource-detail.component.html | 46 + .../resource-detail.component.scss | 15 + .../resource-detail.component.spec.ts | 38 + .../resource-detail.component.ts | 86 + .../resource-list/resource-list.component.html | 49 + .../resource-list/resource-list.component.scss | 0 .../resource-list.component.spec.ts | 36 + .../resource-list/resource-list.component.ts | 116 + .../resource-node-viewer.component.html | 6 + .../resource-node-viewer.component.scss | 0 .../resource-node-viewer.component.spec.ts | 34 + .../resource-node-viewer.component.ts | 56 + .../client/app/resource/resource.module.ts | 41 + .../app/resource/shared/resource.model.ts | 110 + .../app/resource/shared/resource.resolver.ts | 18 + .../resource/shared/resource.service.spec.ts | 18 + .../app/resource/shared/resource.service.ts | 98 + .../shared/data-table/data-table.component.html | 52 + .../shared/data-table/data-table.component.scss | 20 + .../data-table/data-table.component.spec.ts | 36 + .../shared/data-table/data-table.component.ts | 95 + .../detail-header/detail-header.component.html | 17 + .../detail-header/detail-header.component.scss | 40 + .../detail-header.component.spec.ts | 30 + .../detail-header/detail-header.component.ts | 38 + .../alert-dialog/alert-dialog.component.html | 2 + .../alert-dialog/alert-dialog.component.scss | 0 .../alert-dialog/alert-dialog.component.spec.ts | 26 + .../alert-dialog/alert-dialog.component.ts | 23 + .../confirm-dialog.component.html | 12 + .../confirm-dialog.component.scss | 0 .../confirm-dialog.component.spec.ts | 26 + .../confirm-dialog/confirm-dialog.component.ts | 33 + .../input-dialog/input-dialog.component.html | 29 + .../input-dialog/input-dialog.component.scss | 0 .../input-dialog/input-dialog.component.spec.ts | 26 + .../input-dialog/input-dialog.component.ts | 44 + .../disabled-label.component.html | 1 + .../disabled-label.component.scss | 12 + .../disabled-label.component.spec.ts | 25 + .../disabled-label/disabled-label.component.ts | 18 + .../client/app/shared/helper.service.spec.ts | 17 + helix-front/client/app/shared/helper.service.ts | 41 + .../input-inline/input-inline.component.html | 32 + .../input-inline/input-inline.component.scss | 20 + .../input-inline/input-inline.component.spec.ts | 30 + .../input-inline/input-inline.component.ts | 100 + .../json-viewer/json-viewer.component.html | 1 + .../json-viewer/json-viewer.component.scss | 0 .../json-viewer/json-viewer.component.spec.ts | 29 + .../shared/json-viewer/json-viewer.component.ts | 33 + .../key-value-pairs.component.html | 7 + .../key-value-pairs.component.scss | 12 + .../key-value-pairs.component.spec.ts | 25 + .../key-value-pairs.component.ts | 25 + .../client/app/shared/models/node.model.ts | 117 + .../node-viewer/node-viewer.component.html | 188 + .../node-viewer/node-viewer.component.scss | 42 + .../node-viewer/node-viewer.component.spec.ts | 38 + .../shared/node-viewer/node-viewer.component.ts | 301 + helix-front/client/app/shared/shared.module.ts | 71 + .../state-label/state-label.component.html | 7 + .../state-label/state-label.component.scss | 17 + .../state-label/state-label.component.spec.ts | 25 + .../shared/state-label/state-label.component.ts | 18 + .../app/workflow/shared/workflow.model.ts | 16 + .../workflow/shared/workflow.service.spec.ts | 18 + .../app/workflow/shared/workflow.service.ts | 20 + .../workflow-detail.component.html | 20 + .../workflow-detail.component.scss | 3 + .../workflow-detail.component.spec.ts | 38 + .../workflow-detail.component.ts | 38 + .../workflow-list/workflow-list.component.html | 15 + .../workflow-list/workflow-list.component.scss | 3 + .../workflow-list.component.spec.ts | 35 + .../workflow-list/workflow-list.component.ts | 38 + .../client/app/workflow/workflow.module.ts | 22 + helix-front/client/assets/.gitkeep | 0 .../client/environments/environment.prod.ts | 3 + helix-front/client/environments/environment.ts | 12 + helix-front/client/favicon.ico | Bin 0 -> 34868 bytes helix-front/client/index.html | 28 + helix-front/client/main.ts | 11 + helix-front/client/polyfills.ts | 69 + helix-front/client/styles.scss | 38 + helix-front/client/test.ts | 32 + helix-front/client/testing/stubs.ts | 8 + helix-front/client/testing/testing.module.ts | 27 + helix-front/client/theme.scss | 58 + helix-front/client/tsconfig.app.json | 13 + helix-front/client/tsconfig.spec.json | 20 + helix-front/client/typings.d.ts | 5 + helix-front/e2e/app.e2e-spec.ts | 14 + helix-front/e2e/app.po.ts | 11 + helix-front/e2e/tsconfig.e2e.json | 12 + helix-front/karma.conf.js | 45 + helix-front/package.json | 70 + helix-front/pom.xml | 144 + helix-front/protractor.conf.js | 30 + helix-front/proxy.conf.json | 6 + helix-front/server/app.ts | 68 + helix-front/server/config.ts | 17 + helix-front/server/controllers/helix.ts | 64 + helix-front/server/controllers/user.ts | 36 + helix-front/server/routes.ts | 20 + helix-front/server/tsconfig.json | 8 + helix-front/tsconfig.json | 20 + helix-front/tslint.json | 116 + helix-front/yarn.lock | 6315 ++++++++++++++++++ helix-rest/LICENSE | 273 + helix-rest/NOTICE | 37 + helix-rest/helix-rest-0.6.9-SNAPSHOT.ivy | 45 + helix-rest/pom.xml | 167 + helix-rest/src/assemble/assembly.xml | 60 + helix-rest/src/main/config/log4j.properties | 32 + .../helix/rest/common/ContextPropertyKeys.java | 24 + .../apache/helix/rest/server/HelixRestMain.java | 123 + .../helix/rest/server/HelixRestServer.java | 130 + .../apache/helix/rest/server/ServerContext.java | 79 + .../helix/rest/server/auditlog/AuditLog.java | 285 + .../helix/rest/server/auditlog/AuditLogger.java | 27 + .../auditloggers/FileBasedAuditLogger.java | 53 + .../rest/server/filters/AuditLogFilter.java | 117 + .../helix/rest/server/filters/CORSFilter.java | 60 + .../rest/server/resources/AbstractResource.java | 209 + .../rest/server/resources/ClusterAccessor.java | 379 ++ .../rest/server/resources/InstanceAccessor.java | 463 ++ .../rest/server/resources/JobAccessor.java | 199 + .../rest/server/resources/ResourceAccessor.java | 277 + .../server/resources/UIResourceAccessor.java | 62 + .../rest/server/resources/WorkflowAccessor.java | 324 + helix-rest/src/main/webapp/WEB-INF/web.xml | 26 + helix-rest/src/main/webapp/index.jsp | 25 + helix-rest/src/test/conf/testng.xml | 27 + .../helix/rest/server/AbstractTestClass.java | 380 ++ .../helix/rest/server/TestClusterAccessor.java | 301 + .../helix/rest/server/TestInstanceAccessor.java | 137 + .../helix/rest/server/TestJobAccessor.java | 152 + .../helix/rest/server/TestResourceAccessor.java | 143 + .../helix/rest/server/TestWorkflowAccessor.java | 150 + helix-rest/src/test/resources/log4j.properties | 41 + pom.xml | 147 +- recipes/distributed-lock-manager/pom.xml | 2 +- recipes/pom.xml | 2 +- recipes/rabbitmq-consumer-group/pom.xml | 2 +- recipes/rsync-replicated-file-system/pom.xml | 2 +- recipes/service-discovery/pom.xml | 2 +- recipes/task-execution/pom.xml | 2 +- scripts/runSingleTest.sh | 39 + 676 files changed, 44744 insertions(+), 10276 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/main/java/org/apache/helix/HelixProperty.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/main/java/org/apache/helix/PropertyKey.java ---------------------------------------------------------------------- diff --cc helix-core/src/main/java/org/apache/helix/PropertyKey.java index b95c790,20cb833..775db7a --- a/helix-core/src/main/java/org/apache/helix/PropertyKey.java +++ b/helix-core/src/main/java/org/apache/helix/PropertyKey.java @@@ -301,12 -329,36 +329,41 @@@ public class PropertyKey return new PropertyKey(ERRORS, Error.class, _clusterName, instanceName); } + public PropertyKey participantHistory(String instanceName) { + return new PropertyKey(INSTANCE_HISTORY, ParticipantHistory.class, _clusterName, + instanceName); + } + /** + * Get a property key associated with {@link Error} for an instance under a session + * @param instanceName + * @param sessionId + * @return {@link PropertyKey} + */ + public PropertyKey errors(String instanceName, String sessionId) { + return new PropertyKey(ERRORS, Error.class, _clusterName, instanceName, sessionId); + } + + + /** + * Get a property key associated with {@link Error} for an instance under a session of + * specified resource + * @param instanceName + * @param sessionId + * @param resourceName + * @return {@link PropertyKey} + */ + public PropertyKey errors(String instanceName, String sessionId, String resourceName) { + return new PropertyKey(ERRORS, Error.class, _clusterName, instanceName, sessionId, + resourceName); + } + + public PropertyKey participantHistory(String instanceName) { + return new PropertyKey(INSTANCE_HISTORY, ParticipantHistory.class, _clusterName, + instanceName); + } + + /** * Get a property key associated with a specific {@link Message} on an instance * @param instanceName * @param messageId http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java ---------------------------------------------------------------------- diff --cc helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java index e07ca90,008f623..3f4615a --- a/helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java +++ b/helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java @@@ -355,15 -368,16 +368,23 @@@ public class HelixStateTransitionHandle message.getPartitionName(), message.getFromState(), message.getToState(), - message.getTgtSessionId())); + message.getTgtSessionId(), + message.getMsgId())); + + if (_cancelled) { + throw new HelixRollbackException(String.format( + "Instance %s, partition %s state transition from %s to %s on session %s has been cancelled, message id: %s", + message.getTgtName(), message.getPartitionName(), message.getFromState(), + message.getToState(), message.getTgtSessionId(), message.getMsgId())); + } + if (_cancelled) { + throw new HelixRollbackException(String.format( + "Instance %s, partition %s state transition from %s to %s on session %s has been cancelled", + message.getTgtName(), message.getPartitionName(), message.getFromState(), + message.getToState(), message.getTgtSessionId())); + } + Object result = methodToInvoke.invoke(_stateModel, new Object[] { message, context }); taskResult.setSuccess(true); String resultStr; http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestAddClusterV2.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestAddStateModelFactoryAfterConnect.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestBasicSpectator.java ---------------------------------------------------------------------- diff --cc helix-core/src/test/java/org/apache/helix/integration/TestBasicSpectator.java index 78f0c72,a24ded4..e621350 --- a/helix-core/src/test/java/org/apache/helix/integration/TestBasicSpectator.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestBasicSpectator.java @@@ -28,8 -28,9 +28,9 @@@ import org.apache.helix.HelixManager import org.apache.helix.HelixManagerFactory; import org.apache.helix.InstanceType; import org.apache.helix.NotificationContext; + import org.apache.helix.integration.common.ZkStandAloneCMTestBase; import org.apache.helix.model.ExternalView; -import org.apache.helix.tools.ClusterStateVerifier; +import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier; import org.testng.Assert; import org.testng.annotations.Test; http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestDisableExternalView.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestDisableNode.java ---------------------------------------------------------------------- diff --cc helix-core/src/test/java/org/apache/helix/integration/TestDisableNode.java index 9171276,6b6c280..f66a1ed --- a/helix-core/src/test/java/org/apache/helix/integration/TestDisableNode.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestDisableNode.java @@@ -19,9 -19,10 +19,10 @@@ package org.apache.helix.integration * under the License. */ + import org.apache.helix.integration.common.ZkStandAloneCMTestBase; import org.apache.helix.manager.zk.ZKHelixAdmin; import org.apache.helix.tools.ClusterSetup; -import org.apache.helix.tools.ClusterStateVerifier; +import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier; import org.testng.Assert; import org.testng.annotations.Test; http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestDisablePartition.java ---------------------------------------------------------------------- diff --cc helix-core/src/test/java/org/apache/helix/integration/TestDisablePartition.java index 3b849d5,32f581f..3d363f6 --- a/helix-core/src/test/java/org/apache/helix/integration/TestDisablePartition.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestDisablePartition.java @@@ -38,9 -42,10 +42,10 @@@ import org.apache.helix.model.ExternalV import org.apache.helix.model.IdealState; import org.apache.helix.model.IdealState.RebalanceMode; import org.apache.helix.tools.ClusterSetup; -import org.apache.helix.tools.ClusterStateVerifier; +import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier; import org.apache.log4j.Logger; import org.testng.Assert; + import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.google.common.collect.Lists; http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestDisableResource.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestDistributedCMMain.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestDistributedClusterController.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestDropResource.java ---------------------------------------------------------------------- diff --cc helix-core/src/test/java/org/apache/helix/integration/TestDropResource.java index 82486a8,7f0b77c..48763db --- a/helix-core/src/test/java/org/apache/helix/integration/TestDropResource.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestDropResource.java @@@ -20,9 -20,10 +20,10 @@@ package org.apache.helix.integration */ import org.apache.helix.TestHelper; + import org.apache.helix.integration.common.ZkStandAloneCMTestBase; import org.apache.helix.integration.manager.MockParticipantManager; import org.apache.helix.tools.ClusterSetup; -import org.apache.helix.tools.ClusterStateVerifier; +import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier; import org.testng.Assert; import org.testng.annotations.Test; http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestErrorPartition.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestExternalViewUpdates.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestHelixCustomCodeRunner.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestHelixInstanceTag.java ---------------------------------------------------------------------- diff --cc helix-core/src/test/java/org/apache/helix/integration/TestHelixInstanceTag.java index 25a0b92,211cca1..34af958 --- a/helix-core/src/test/java/org/apache/helix/integration/TestHelixInstanceTag.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestHelixInstanceTag.java @@@ -24,9 -24,10 +24,10 @@@ import java.util.Set import org.apache.helix.HelixDataAccessor; import org.apache.helix.HelixManager; + import org.apache.helix.integration.common.ZkStandAloneCMTestBase; import org.apache.helix.model.ExternalView; import org.apache.helix.model.InstanceConfig; -import org.apache.helix.tools.ClusterStateVerifier; +import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier; import org.testng.Assert; import org.testng.annotations.Test; http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestPartitionLevelTransitionConstraint.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestPauseSignal.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestRenamePartition.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestResetInstance.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestResetPartitionState.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestResetResource.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestSchemataSM.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestSessionExpiryInTransition.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestStandAloneCMMain.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestStandAloneCMSessionExpiry.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestSwapInstance.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/TestZkCallbackHandlerLeak.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java ---------------------------------------------------------------------- diff --cc helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java index 0000000,e89e5b0..e00e6bb mode 000000,100644..100644 --- a/helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java +++ b/helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java @@@ -1,0 -1,131 +1,131 @@@ + package org.apache.helix.integration.common; + + /* + * 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. + */ + + import java.util.Date; + + import org.apache.helix.HelixManager; + import org.apache.helix.HelixManagerFactory; + import org.apache.helix.InstanceType; + import org.apache.helix.integration.manager.ClusterControllerManager; + import org.apache.helix.integration.manager.MockParticipantManager; + import org.apache.helix.tools.ClusterSetup; -import org.apache.helix.tools.ClusterStateVerifier; -import org.apache.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier; -import org.apache.helix.tools.ClusterStateVerifier.MasterNbInExtViewVerifier; ++import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier; ++import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier.BestPossAndExtViewZkVerifier; ++import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier.MasterNbInExtViewVerifier; + import org.apache.log4j.Logger; + import org.testng.Assert; + import org.testng.annotations.AfterClass; + import org.testng.annotations.BeforeClass; + + /** + * setup a storage cluster and start a zk-based cluster controller in stand-alone mode + * start 5 dummy participants verify the current states at end + */ + + public class ZkStandAloneCMTestBase extends ZkIntegrationTestBase { + private static Logger LOG = Logger.getLogger(ZkStandAloneCMTestBase.class); + + protected static final int NODE_NR = 5; + protected static final int START_PORT = 12918; + protected static final String STATE_MODEL = "MasterSlave"; + protected static final String TEST_DB = "TestDB"; + protected static final int _PARTITIONS = 20; + + protected ClusterSetup _setupTool; + protected HelixManager _manager; + protected final String CLASS_NAME = getShortClassName(); + protected final String CLUSTER_NAME = CLUSTER_PREFIX + "_" + CLASS_NAME; + + protected MockParticipantManager[] _participants = new MockParticipantManager[NODE_NR]; + protected ClusterControllerManager _controller; + + protected int _replica = 3; + + @BeforeClass + public void beforeClass() throws Exception { + // Logger.getRootLogger().setLevel(Level.INFO); + System.out.println("START " + CLASS_NAME + " at " + new Date(System.currentTimeMillis())); + + String namespace = "/" + CLUSTER_NAME; + if (_gZkClient.exists(namespace)) { + _gZkClient.deleteRecursive(namespace); + } + _setupTool = new ClusterSetup(ZK_ADDR); + + // setup storage cluster + _setupTool.addCluster(CLUSTER_NAME, true); + _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, STATE_MODEL); + for (int i = 0; i < NODE_NR; i++) { + String storageNodeName = PARTICIPANT_PREFIX + "_" + (START_PORT + i); + _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName); + } + _setupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, _replica); + + // start dummy participants + for (int i = 0; i < NODE_NR; i++) { + String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + i); + _participants[i] = new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, instanceName); + _participants[i].syncStart(); + } + + // start controller + String controllerName = CONTROLLER_PREFIX + "_0"; + _controller = new ClusterControllerManager(ZK_ADDR, CLUSTER_NAME, controllerName); + _controller.syncStart(); + + boolean result = + ClusterStateVerifier + .verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR, CLUSTER_NAME)); + + Assert.assertTrue(result); + + result = + ClusterStateVerifier.verifyByZkCallback(new BestPossAndExtViewZkVerifier(ZK_ADDR, + CLUSTER_NAME)); + Assert.assertTrue(result); + + // create cluster manager + _manager = HelixManagerFactory + .getZKHelixManager(CLUSTER_NAME, "Admin", InstanceType.ADMINISTRATOR, ZK_ADDR); + _manager.connect(); + } + + @AfterClass + public void afterClass() throws Exception { + /** + * shutdown order: 1) disconnect the controller 2) disconnect participants + */ + + if (_controller != null && _controller.isConnected()) { + _controller.syncStop(); + } + for (int i = 0; i < NODE_NR; i++) { + if (_participants[i] != null && _participants[i].isConnected()) { + _participants[i].syncStop(); + } + } + if (_manager != null && _manager.isConnected()) { + _manager.disconnect(); + } + + System.out.println("END " + CLASS_NAME + " at " + new Date(System.currentTimeMillis())); + } + } http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java ---------------------------------------------------------------------- diff --cc helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java index 0000000,6e2fa5d..c65b5ed mode 000000,100644..100644 --- a/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java +++ b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java @@@ -1,0 -1,129 +1,129 @@@ + package org.apache.helix.integration.controller; + + /* + * 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. + */ + + import java.util.Date; + import java.util.Map; + import java.util.Random; + + import org.apache.helix.BaseDataAccessor; + import org.apache.helix.HelixDataAccessor; + import org.apache.helix.PropertyKey; + import org.apache.helix.TestHelper; + import org.apache.helix.ZNRecord; + import org.apache.helix.ZkUnitTestBase; + import org.apache.helix.integration.manager.ClusterControllerManager; + import org.apache.helix.integration.manager.MockParticipantManager; + import org.apache.helix.manager.zk.ZKHelixDataAccessor; + import org.apache.helix.manager.zk.ZkBaseDataAccessor; + import org.apache.helix.model.ExternalView; + import org.apache.helix.model.IdealState.RebalanceMode; -import org.apache.helix.tools.ClusterStateVerifier; ++import org.apache.helix.tools.ClusterVerifiers.ClusterStateVerifier; + import org.apache.log4j.Logger; + import org.testng.Assert; + import org.testng.annotations.Test; + + /** + * This is for testing Helix controller livelock @see Helix-541 + * The test has a high probability to reproduce the problem + */ + public class TestControllerLiveLock extends ZkUnitTestBase { + private static final Logger LOG = Logger.getLogger(TestControllerLiveLock.class); + + @Test + public void test() throws Exception { + String className = TestHelper.getTestClassName(); + String methodName = TestHelper.getTestMethodName(); + String clusterName = className + "_" + methodName; + int n = 12; + final int p = 256; + BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient); + final HelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, baseAccessor); + final PropertyKey.Builder keyBuilder = accessor.keyBuilder(); + + System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis())); + + TestHelper.setupCluster(clusterName, ZK_ADDR, 12918, // participant port + "localhost", // participant name prefix + "TestDB", // resource name prefix + 1, // resources + p, // partitions per resource + n, // number of nodes + 1, // replicas + "LeaderStandby", RebalanceMode.FULL_AUTO, true); // do rebalance + + ClusterControllerManager controller = + new ClusterControllerManager(ZK_ADDR, clusterName, "controller_0"); + controller.syncStart(); + + // start participants + Random random = new Random(); + MockParticipantManager[] participants = new MockParticipantManager[n]; + for (int i = 0; i < n; i++) { + String instanceName = "localhost_" + (12918 + i); + + participants[i] = new MockParticipantManager(ZK_ADDR, clusterName, instanceName); + participants[i].syncStart(); + Thread.sleep(Math.abs(random.nextInt()) % 500 + 500); + } + + boolean result = + ClusterStateVerifier.verifyByZkCallback(new ClusterStateVerifier.BestPossAndExtViewZkVerifier(ZK_ADDR, + clusterName)); + Assert.assertTrue(result); + + // make sure all partitions are assigned and no partitions is assigned to STANDBY state + result = TestHelper.verify(new TestHelper.Verifier() { + + @Override + public boolean verify() throws Exception { + ExternalView extView = accessor.getProperty(keyBuilder.externalView("TestDB0")); + for (int i = 0; i < p; i++) { + String partition = "TestDB0_" + i; + Map<String, String> map = extView.getRecord().getMapField(partition); + if (map == null || map.size() != 1) { + return false; + } + } + return true; + } + }, 10 * 1000); + + if (!result) { + ExternalView extView = accessor.getProperty(keyBuilder.externalView("TestDB0")); + for (int i = 0; i < p; i++) { + String partition = "TestDB0_" + i; + Map<String, String> map = extView.getRecord().getMapField(partition); + if (map == null || map.size() != 1) { + LOG.error(partition + ": " + map); + } + } + } + Assert.assertTrue(result); + + // clean up + controller.syncStop(); + for (int i = 0; i < n; i++) { + participants[i].syncStop(); + } + + System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis())); + } + } http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/manager/TestConsecutiveZkSessionExpiry.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/manager/TestDistributedControllerManager.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/fe0b6e80/helix-core/src/test/java/org/apache/helix/integration/manager/TestZkCallbackHandlerLeak.java ----------------------------------------------------------------------