2 years ago[maven-release-plugin] prepare release helix-0.9.3 helix-0.9.3
Hunter Lee [Thu, 16 Jan 2020 19:19:24 +0000 (11:19 -0800)] 
[maven-release-plugin] prepare release helix-0.9.3

2 years agoRevert "[maven-release-plugin] prepare release helix-0.9.2"
Hunter Lee [Thu, 16 Jan 2020 19:05:05 +0000 (11:05 -0800)] 
Revert "[maven-release-plugin] prepare release helix-0.9.2"

This reverts commit 094757257bc51ba405d098966f0abdac0ad0943c.

2 years ago[maven-release-plugin] prepare release helix-0.9.2
Hunter Lee [Thu, 16 Jan 2020 19:00:08 +0000 (11:00 -0800)] 
[maven-release-plugin] prepare release helix-0.9.2

2 years agoSet helix style to only wrap if long for throws. (#634)
Huizhi L [Wed, 15 Jan 2020 07:07:05 +0000 (23:07 -0800)] 
Set helix style to only wrap if long for throws. (#634)

Currently key word throws is always wrapped to next line. This commit makes it only wrapped if long.

2 years agoAdd method to wait and return established session's ID (#677)
Huizhi L [Thu, 9 Jan 2020 23:30:44 +0000 (15:30 -0800)] 
Add method to wait and return established session's ID (#677)

zkClient's getSessionId() could bring in session race condition: session A is connected in waitUntilConnected, but when zkClient.getSession() is called in zkHelixManager, session A might be already expired and so zkClient.getSession() gets session B. This session ID is critical for the firs time handling new session after zkclient is created in zkHelixManager.

Solution: add a new method waitForEstablishedSession() to wait for SynCconnected state and return the session id before unlocking the eventLock.

Change list:
- Add a new method waitForEstablishedSession()
- Add a unit test to cover the new method.

2 years agoFix handleNewSession creating ephemeral node with expired session (#642)
Huizhi L [Thu, 9 Jan 2020 19:24:00 +0000 (11:24 -0800)] 
Fix handleNewSession creating ephemeral node with expired session (#642)

There is zk session race condition in zk helix manager. Zk session may expire and change during handling new session. If the expected session is expired when handling new session, the ephemeral node should NOT be created.

Change list:
- Change API create() in ZkClient to accept zk sessionId as a parameter. Add a new public API createEphemeral(final String path, final Object data, final String sessionId) to create an ephemeral node by the expected zk session.
- Fire new session events and all events(child/data change events) to right after the first SyncConnected state is received in zk client.
- Filter out stale sessions in handling new session.
- Add multiple unit tests to cover the cases.

2 years agoUse ZnRecordSerializer in ConfigAccessor (#666)
Hunter Lee [Thu, 19 Dec 2019 22:22:56 +0000 (14:22 -0800)] 
Use ZnRecordSerializer in ConfigAccessor (#666)

ConfigAccessor is a Helix API used for CRUD access of Helix's data model such as ResourceConfig, InstanceConfig, etc.. These records are represented as ZNRecord and therefore needs to be serialized and deserialized with ZnRecordSerializer. This diff fixes ConfigAccessor so that it explicitly uses ZnRecordSerializer by default.

2 years agoRevert "[maven-release-plugin] prepare release helix-0.9.2"
Hunter Lee [Thu, 19 Dec 2019 22:10:42 +0000 (14:10 -0800)] 
Revert "[maven-release-plugin] prepare release helix-0.9.2"

This reverts commit f82106cfc7770bfc81f176ab36d83fd2a6feb545.

2 years agoRevert "[maven-release-plugin] prepare for next development iteration"
Hunter Lee [Thu, 19 Dec 2019 22:10:27 +0000 (14:10 -0800)] 
Revert "[maven-release-plugin] prepare for next development iteration"

This reverts commit 7b852b05ef64190e7510d1927de89dec7fc01052.

2 years ago[maven-release-plugin] prepare for next development iteration
Hunter Lee [Wed, 18 Dec 2019 18:26:35 +0000 (10:26 -0800)] 
[maven-release-plugin] prepare for next development iteration

2 years ago[maven-release-plugin] prepare release helix-0.9.2
Hunter Lee [Wed, 18 Dec 2019 18:26:24 +0000 (10:26 -0800)] 
[maven-release-plugin] prepare release helix-0.9.2

2 years agoPatching zkClient leakage fix #656 (#657)
nealsun-linkedin [Tue, 17 Dec 2019 00:49:59 +0000 (16:49 -0800)] 
Patching zkClient leakage fix #656 (#657)

During some of the instantiations of zkClient, the closing of the clients are not guaranteed due to the possible exceptions being thrown before the closing of the clients; in those cases, zkClient leakage happens. I'm adding "try finally" clauses to guard against zkClient leakage in these cases.

2 years agoAdd new interface IZkStateListener to provide session aware handleNewSession for...
Huizhi L [Mon, 16 Dec 2019 23:21:10 +0000 (15:21 -0800)] 
Add new interface IZkStateListener to provide session aware handleNewSession for ZkHelixManager (#644)

I0Itec IZkStateListener doesn't have an API handleNewSession(sessionId) to handle session aware operation,
which is needed to fix session race condition for creating ephemeral node in ZkClient.
So this new IZkStateListener interface is introduced to provide session aware handleNewSession method for ZkHelixManager.

- Introduce new IZkStateListener to helix. The new IZkStateListener adds new method
handleNewSession(String sessionId), and removes the old method handleNewSession().
- Add default implementations I0ItecIZkStateListenerHelixImpl in IZkStateListener
and IZkStateListenerI0ItecImpl in ZkClient for backward compatibility.
- Add session id to ZkEvent as a private field to help debug ZkEvent.
- Add unit tests to test subscribe/unsubscribe state changes.

2 years agoAdd an option for using dedicated ZkConnection in ZkBaseDataAccessor (#655)
Hunter Lee [Fri, 13 Dec 2019 00:24:26 +0000 (16:24 -0800)] 
Add an option for using dedicated ZkConnection in ZkBaseDataAccessor (#655)

There are usage patterns where a user needs to create ephemeral nodes using a ZkBaseDataAccessor. We need to support this use case since we want users to avoid using ZkClient directly, so we do it in ZkBaseDataAccessor, which is Helix's wrapper API around the raw ZkClient.

The default behavior would be to use a shared ZK connection resource.

2 years agoAdd support for PathBasedZkSerializer in ZkBaseDataAccessor (#648)
Hunter Lee [Tue, 10 Dec 2019 02:53:10 +0000 (18:53 -0800)] 
Add support for PathBasedZkSerializer in ZkBaseDataAccessor (#648)

We need to add a custom serializer support for ZkSerializer in ZkBaseDataAccessor. But some users might be using PathBasedZkSerializer - we need to add support for a custom PathBasedZkSerializer as well.

2 years agoImplement the propertyStore read endpoint (#516)
Yi Wang [Mon, 2 Dec 2019 18:52:41 +0000 (10:52 -0800)] 
Implement the propertyStore read endpoint (#516)

Implement the propertyStore read endpoint
Example: http://xxxx/clusters/TestCluster/propertyStore/*<PATH>*
- The read method accepts a simple path parameter called "path" of the format "abc/abc/abc"
- The path is validated using regex
- The read operation parses the byte array content from a static bytearray zk base data accessor, if it's ZNRecord format, return ZnRecord; Otherwise, return {"content": <binary payload>}

2 years agoStabilize 5 unstable tests (#624)
Ali Reza Zamani Zadeh Najari [Tue, 26 Nov 2019 17:59:09 +0000 (09:59 -0800)] 
Stabilize 5 unstable tests (#624)

In this commit three test that were unstable for some time has been stabilized.
1- TestWorkflowControllerDataProvider:
This test were rely on thread sleep. This has been changed to TestHelper.verify.
This test were rely on thread sleep. This has been changed to TestHelper.verify.
This test were rely on thread sleep. This has been changed to TestHelper.verify.
Also a check has been added to measure the scheduled tasks and compared the
result with the expected number of tasks that should be scheduled.
Also in this test some of the hard coded strings for queue namning
has been removed and replaced with TestHelper.getTestMethodName().
4- TestStopWorkflow:
At the beggining of each test, participant have started and at the end of the
test, participants have stopped. Hence dependency between the tests added to
avoid potential conflicts between individual tests. Also one global varible
has been use among the task to stop which has been changed to local variable.
Also Thread.sleep has been eliminated.
5- TestClusterVerifier:
In this test, Thread.sleep has been removed.

2 years agoAdd close() to ClusterSetup to avoid ZkClient leak (#629)
Hunter Lee [Fri, 22 Nov 2019 17:57:35 +0000 (09:57 -0800)] 
Add close() to ClusterSetup to avoid ZkClient leak (#629)

ClusterSetup is a helper class that's used for cluster-related operations. This class is missing a close() method users could call to prevent ZkClient/ZkConnection leak. This commit adds close() method.

2 years agoFormat long lines.
Huizhi Lu [Thu, 7 Nov 2019 18:32:51 +0000 (10:32 -0800)] 
Format long lines.

2 years agoRemove println.
Huizhi Lu [Thu, 7 Nov 2019 18:31:13 +0000 (10:31 -0800)] 
Remove println.

2 years agoAdd unit test.
Huizhi Lu [Wed, 6 Nov 2019 02:35:51 +0000 (18:35 -0800)] 
Add unit test.

2 years agoRemove unnecessary boxing for boolean values.
Huizhi Lu [Thu, 19 Sep 2019 00:09:06 +0000 (17:09 -0700)] 
Remove unnecessary boxing for boolean values.

2 years agoFix RoutingDataCache always requiring full refresh for current state.
Huizhi Lu [Wed, 18 Sep 2019 23:50:39 +0000 (16:50 -0700)] 
Fix RoutingDataCache always requiring full refresh for current state.

2 years agoAdd default implementation to new interface methods (#626)
Hunter Lee [Thu, 21 Nov 2019 00:32:12 +0000 (16:32 -0800)] 
Add default implementation to new interface methods (#626)

* Add default implementation to new interface methods

Some Helix data access API interfaces have close() method added. However, for users that implement these interfaces may see build failure because their implementations won't have close() implemented. This diff fixes this by ading a default implementation to close().

1. Make new close() interface methods a default implementation (a Java 8 feature)

2 years agoModify ZkUtil methods so that they accept ZkAddress as parameter (#606)
Hunter Lee [Tue, 19 Nov 2019 23:02:07 +0000 (15:02 -0800)] 
Modify ZkUtil methods so that they accept ZkAddress as parameter (#606)

Replace methods in ZkUtil so that it does not require HelixZkClient

This is so that the users of ZkUtil do not have to create HelixZkClient to use the utility methods.

2 years agoReplace jcommander Maps and Lists with google common's. (#579)
Huizhi L [Tue, 19 Nov 2019 22:12:34 +0000 (14:12 -0800)] 
Replace jcommander Maps and Lists with google common's. (#579)

Replace jcommander Maps and Lists with google common's, so we make these classes' usage consistent from google common.

2 years agoFix NullPointerException and test failure for testDisablePartitionAndStopInstance...
Huizhi L [Tue, 19 Nov 2019 20:41:16 +0000 (12:41 -0800)] 
Fix NullPointerException and test failure for testDisablePartitionAndStopInstance. (#613)

StrictMatchExternalViewVerifier's toString() has a bug that causes NullPointerException if _resources is null. The code fails to check if _resources is null. And NullPointerException causes testDisablePartitionAndStopInstance's failure.

Fix the bug by checking if _resources is null in StrictMatchExternalViewVerifier's toString().

2 years agoOptimize imports for the whole project. (#577)
Huizhi L [Tue, 19 Nov 2019 20:39:54 +0000 (12:39 -0800)] 
Optimize imports for the whole project. (#577)

We have new helix style in Intellij. Most of the files are not following the style for imports. So this PR optimizes all imports for all files in helix project.

2 years agoFix NullPointerException in TestDisableCustomCodeRunner_test. (#617)
Huizhi L [Tue, 19 Nov 2019 20:38:57 +0000 (12:38 -0800)] 
Fix NullPointerException in TestDisableCustomCodeRunner_test. (#617)

In TestDisableCustomCodeRunner_test, a new fake live instance is created without an instance config, so when the cluster monitor is reporting metrics for this instance, its instance config is not found, thus a NullPointerException is thrown.

Fix it by adding an instance config to the cluster for the fake live instance.

2 years agoStabilize the TestAlertingRebalancerFailure test (#608)
Ali Reza Zamani Zadeh Najari [Tue, 19 Nov 2019 12:38:04 +0000 (04:38 -0800)] 
Stabilize the TestAlertingRebalancerFailure test (#608)

TestAlertingRebalancerFailure was made stable.

This test was unstable because there were some race condition between two tests (cleanup of testParticipantUnavailable and start of the testTagSetIncorrect). Due to this race condition, the listfield and mapfield in the IdealState have been missing for the testTagSetIncorrect test. Hence, rebalancer does not run as expected.

2 years agoAdd new constructors and close() to Helix API (#601)
Hunter Lee [Tue, 19 Nov 2019 02:01:31 +0000 (18:01 -0800)] 
Add new constructors and close() to Helix API (#601)

In order to allow users to avoid having to create, manage, and close a HelixZkClient instance when using Helix data access APIs, we add new constructors and close() methods. The new constructors will allow for instantiation purely based on a ZkAddress, and internally, either Shared or Dedicated HelixZkClient will be used.

Also, the close() method ensures that we only close if we generated a ZkClient internally. External ZkClients, we can't close arbitrarily because they could be used in other active Helix APIs.

2 years agoAdd a ZkAddress-based constructor for ConfigAccessor (#592)
Hunter Lee [Mon, 18 Nov 2019 22:03:02 +0000 (14:03 -0800)] 
Add a ZkAddress-based constructor for ConfigAccessor (#592)

In order to allow users to not take on the burden of creating an instance of HelixZkClient to use Helix data access APIs (like ConfigAccessor), we need to add a constructor that takes in a ZK connect string instead.

This approach has advantages such as 1) the user doesn't have to maintain the lifecycle of the ZkClient 2) add a layer of indirection between ZK and the user where Helix logic could be injected.

Also close() is added so that the user could close after use.

2 years agoFix NullPointerException for testCustomCodeRunner. (#581)
Huizhi L [Sun, 17 Nov 2019 01:34:11 +0000 (17:34 -0800)] 
Fix NullPointerException for testCustomCodeRunner. (#581)

The new live instance doesn't have its instance config. This causes NullPointerException when monitor is trying to get the instance config.
Add instance config for the new live instance.

2 years agoFix NullPointerException in TestBatchMessage. (#580)
Huizhi L [Sun, 17 Nov 2019 01:07:21 +0000 (17:07 -0800)] 
Fix NullPointerException in TestBatchMessage. (#580)

NullPointerException in TestBatchMessage when currentChildren is null and currentChildren.size() is called.
Add a null check in handleChildChange().

2 years agoSuggested fixes by iCR, OpenRefactory, Inc. (#528)
openrefactory [Sun, 17 Nov 2019 01:06:33 +0000 (07:06 +0600)] 
Suggested fixes by iCR, OpenRefactory, Inc. (#528)

Unchecked method return value fix in file: TestFullAutoNodeTagging.java, method:withinAverage

2 years agoFix unit test failure for TestTaskPerformanceMetrics. (#585)
Huizhi L [Thu, 14 Nov 2019 22:33:25 +0000 (14:33 -0800)] 
Fix unit test failure for TestTaskPerformanceMetrics. (#585)

TestTaskPerformanceMetrics fails because the thread sleeps too long and reset time window is set to 1 ms in another unit test.
The commit fixes this failure by removing the hard coded sleep time, verifying new metric values are updated and reseting time window in testCustomizedResetInterval.

2 years agoRemove the closing of ZkClient in afterClass() in TestZkBaseDataAccessor (#604)
Yi Wang [Thu, 14 Nov 2019 07:33:07 +0000 (23:33 -0800)] 
Remove the closing of ZkClient in afterClass() in TestZkBaseDataAccessor (#604)

The introduced close() of gzkClient in the afterclass method in zkBaseDataAccessor will lead to the mvn test failing cause the gzkClient is in zkTestBase. This PR removes the close() method.

2 years agoAvoid workflowContext creation without workflowConfig (#583)
Ali Reza Zamani Zadeh Najari [Wed, 13 Nov 2019 17:20:25 +0000 (09:20 -0800)] 
Avoid workflowContext creation without workflowConfig (#583)

Create workflowContext only if config exists.
An if statement is added in the getOrInitializeWorkflowContext function:
It checks whether workflowConfig is null or not.
If workflowConfig is null, this function will not initialize the context.

2 years agoUpdate ZkBaseDataAccessor with custom serializer support (#534)
Yi Wang [Tue, 12 Nov 2019 20:53:13 +0000 (12:53 -0800)] 
Update ZkBaseDataAccessor with custom serializer support (#534)

Added a new constructor with a custom serializer as the parameter
default constructor with ZnRecordSerializer
added cross-validated unit tests to verify the custom/default serializer works correctly

2 years agoMinor log optimization for easily investigating mastership handoff latency (#576)
Yi Wang [Mon, 11 Nov 2019 23:24:28 +0000 (15:24 -0800)] 
Minor log optimization for easily investigating mastership handoff latency (#576)

* Minor log optimization for easy debugging mastership handoff latency analysis

Make the log for visible and human-readable when any mastership handoff happens

2 years agoFix partitions double charged for pending message
Junkai Xue [Sat, 2 Nov 2019 00:00:25 +0000 (17:00 -0700)] 
Fix partitions double charged for pending message

Current Helix will charge the partitions with pending message twice due to not remove the partition from partitions need recovery/load balance set when they are charged for pending message.

This fix will fix the problem for recovery/load/ANY rebalance type charged for pending messages.

2 years agoRevert "Deep copy for mapFields and listFields in ZNRecord's copy constructor. (...
Huizhi Lu [Mon, 4 Nov 2019 22:12:12 +0000 (14:12 -0800)] 
Revert "Deep copy for mapFields and listFields in ZNRecord's copy constructor. (#552)"

This reverts commit 2a335cf73ac65b53fd2b06c6b1ee8c70553d30b1.

2 years agoDeep copy for mapFields and listFields in ZNRecord's copy constructor. (#552)
Huizhi L [Thu, 31 Oct 2019 18:03:27 +0000 (11:03 -0700)] 
Deep copy for mapFields and listFields in ZNRecord's copy constructor. (#552)

Deep copy for mapFields and listFields in ZNRecord's copy constructor.
Change list:
1. deep copy for mapFields and listFields in ZNRecord's copy constructor.
2. add unit test for the deep copy constructor.

2 years agoFix null response for instance stoppable check when connection refused. (#504)
Huizhi L [Wed, 23 Oct 2019 06:29:09 +0000 (23:29 -0700)] 
Fix null response for instance stoppable check when connection refused. (#504)

Issue: Instance stoppable check endpoint /clusters//instances//stoppable returns null when connection between helix rest server and storage node.
This diff fixes this by: return a StoppableCheck object when connection refused.

2 years agoAdd back the original DataPropagationLatencyGuage (with a typo) and mark it deprecate...
Huizhi L [Wed, 23 Oct 2019 02:54:05 +0000 (19:54 -0700)] 
Add back the original DataPropagationLatencyGuage (with a typo) and mark it deprecated (#517)

If we remove the name with a typo, DataPropagationLatencyGuage, current metrics graph may not see the old metric and historical DataPropagationLatencyGuage data might get lost. To support backward compatibility, adding back DataPropagationLatencyGuage and mark it as deprecated.

2 years agoAdd a null check for StateModel in Participant reset logic (#523)
Hunter Lee [Tue, 22 Oct 2019 18:29:29 +0000 (11:29 -0700)] 
Add a null check for StateModel in Participant reset logic (#523)

It was discovered that sometimes during shutdown/disconnect, this reset() gets called, and due to the partition having been dropped right around the same time, we get an NPE on the state model. Added a null check.

2 years agoFix name typo for DataPropagationLatencyGuage. (#513)
Huizhi L [Fri, 18 Oct 2019 00:15:59 +0000 (17:15 -0700)] 
Fix name typo for DataPropagationLatencyGuage. (#513)

DataPropagationLatencyGuage has a typo which makes helix clients/products confusing to use. Fix this name typo to make it clearer.

Change list:

Refactor the name DataPropagationLatencyGuage with DataPropagationLatencyGauge.
Replace hard coded names DataPropagationLatencyGuage with enum name DataPropagationLatencyGuage in unit tests.

2 years agoAdd import order for java and javax. (#499)
Huizhi L [Thu, 10 Oct 2019 21:29:34 +0000 (14:29 -0700)] 
Add import order for java and javax. (#499)

* Add import order for java and javax.
* Remve the empty line between java and javax.

2 years agoAdd unit test for setting application name.
Huizhi Lu [Mon, 30 Sep 2019 17:15:09 +0000 (10:15 -0700)] 
Add unit test for setting application name.

2 years ago#493 Set jersey servlet application name with namespace name.
Huizhi Lu [Sat, 28 Sep 2019 03:53:13 +0000 (20:53 -0700)] 
#493 Set jersey servlet application name with namespace name.

2 years agoMake the Java Doc for API more clear
Junkai Xue [Mon, 23 Sep 2019 23:57:15 +0000 (16:57 -0700)] 
Make the Java Doc for API more clear

Some users got confused with inputs based on the Java doc. Make it more clear for user usage.

2 years agoAdd Intellij code style XML file for Helix code style. (#481)
pkuwm [Tue, 24 Sep 2019 21:46:28 +0000 (14:46 -0700)] 
Add Intellij code style XML file for Helix code style. (#481)

Add Intellij code style XML file so we can import it into Intellij to configure java code style for Helix.

2 years agoChange the way Helix triggers rebalance (#472)
Ali Reza Zamani Zadeh Najari [Tue, 24 Sep 2019 17:28:24 +0000 (10:28 -0700)] 
Change the way Helix triggers rebalance (#472)

A method is added which generates OnDemandRebalance event.
This event causes the controller to run the rebalance pipeline for both of the pipelines.
"Touch" logic (as in directly reading and writing to ZNodes) has been removed and replaced by this new method.

2 years agoFilter instances of weight = 0 for any partition assignment (#369)
Yi Wang [Wed, 18 Sep 2019 21:25:46 +0000 (14:25 -0700)] 
Filter instances of weight = 0 for any partition assignment (#369)

1. Fix the available space calculation issue in card dealing algorithm
2. Remove the instances of weight 0 from AbstractEvenDistributionRebalanceStrategy.java#computePartitionAssignment's input parameters

2 years ago[helix-rest] Delete unused default namespace (api "/namespaces/default") (#449)
pkuwm [Tue, 17 Sep 2019 21:33:37 +0000 (14:33 -0700)] 
[helix-rest] Delete unused default namespace (api "/namespaces/default") (#449)

We have a namespace api: /admin/v2/namespaces/{namespace}/. However, the /namespaces/default path is not in use. We need to delete it. On the code level,
if there is not a default namespace, we won't create a DEFAULT_SERVLET.
On the app level, we can configure app not to add name "default" namespace.
With this change, endpoint /admin/v2/namespaces/ will be disable if no namespace
sets IS_DEFAULT to true.

2 years agoFix CustomRebalancer's assignment computation (#477)
Hunter Lee [Mon, 16 Sep 2019 21:40:20 +0000 (14:40 -0700)] 
Fix CustomRebalancer's assignment computation (#477)

It was observed that sometimes CustomRebalancer would leave out an instance entirely if an instance is disabled or the partition on the instance was still bootstrapping (current state is null). This would cause a cluster not to converge. This diff fixes this by 1) still including an assignment from IdealState even though the current state is null (maybe due to a pending state transition) 2) putting disabled partitions in InitialState.
1. Fix the issue
2. Add a test: TestCustomRebalancer

2 years agoFix missed callbacks in CurrentStates based RoutingTableProvider. (#458)
pkuwm [Sat, 14 Sep 2019 00:08:17 +0000 (17:08 -0700)] 
Fix missed callbacks in CurrentStates based RoutingTableProvider. (#458)

1. Update BasicClusterDataCache to do refresh with selective update. Only when a change happens, we do the cache refresh only for that change type.
2. Improve RoutingTableProvider.queueEvent() and RoutingTableProvider.handleEvent(). Return instanceConfigs snapshot to callback immediately, instead of waiting for currentStates completion.

2 years agoFix helix-front build failure by downgrading types/lodash version. (#470)
pkuwm [Fri, 13 Sep 2019 00:51:50 +0000 (17:51 -0700)] 
Fix helix-front build failure by downgrading types/lodash version. (#470)

Fix helix-front build failure by downgrading types/lodash version.

2 years agoAdd field for MIN_ACTIVE_REPLICA_NOT_SET
Junkai Xue [Tue, 10 Sep 2019 22:42:42 +0000 (15:42 -0700)] 

2 years agoMake State Transition Throttling respect MIN_ACTIVE_REPLICA
Junkai Xue [Tue, 10 Sep 2019 00:14:57 +0000 (17:14 -0700)] 
Make State Transition Throttling respect MIN_ACTIVE_REPLICA

There are two phases for improving Helix state transition throttling:
2. Throttle per replica state transitions.

This commit contains the logic of respecting MIN_ACTIVE_REPLICA in IntermediateCalStage and state transition throttling.

2 years agoFix the issue where JobContext is not updated properly (#435)
Ali Reza Zamani Zadeh Najari [Tue, 10 Sep 2019 18:47:34 +0000 (11:47 -0700)] 
Fix the issue where JobContext is not updated properly (#435)

1- A method has been added which extracts the "prevInstanceToTaskAssignments" information from the context.
2- If it is confirmed that the currentstate is null:
An "if statement" is being utilized which sets the context using the target state information.
3- An integration test is added.

2 years agoFix the order of workflow context update
Ali Reza Zamani Zadeh Najari [Wed, 4 Sep 2019 19:39:45 +0000 (12:39 -0700)] 
Fix the order of workflow context update

* Fix the order of workflow context update

In this commit:
The order that workflow dispatcher updates the workflow status has been changed.
If execution delay is set and job is inflight, the context will get updated.
An integration test has been added.

* minor fixes

2 years agoTASK: Fix forceDelete for jobs in JobQueue
Hunter Lee [Wed, 4 Sep 2019 19:26:10 +0000 (12:26 -0700)] 
TASK: Fix forceDelete for jobs in JobQueue

We observed that the force delete functionality doesn't really work when the job is running, saying that the job is currently running. Force delete should go through regardless of the current job status.
1. Change the semantics in deleteJobFromQueue
2. Add an integration test: TestDeleteJobFromJobQueue

2 years agoremove all unused imports
leesf [Thu, 8 Aug 2019 07:46:02 +0000 (15:46 +0800)] 
remove all unused imports

2 years agoAdd integration test for workflow ForceDelete
Ali Reza Zamani Zadeh Najari [Fri, 30 Aug 2019 16:56:39 +0000 (09:56 -0700)] 
Add integration test for workflow ForceDelete

This commit adds integration tests for ForceDelete.
check the functionality of ForceDelete.
Add comment to ForceDelete that discourages users from using ForceDelete.
Several workflow states have been considered and checked for ForceDelete.

2 years agoTASK: Fix incorrect counting of numAttempts for tasks (#432)
Hunter Lee [Mon, 26 Aug 2019 20:48:21 +0000 (13:48 -0700)] 
TASK: Fix incorrect counting of numAttempts for tasks (#432)

TASK: Fix incorrect counting of numAttempts for tasks

It was discovered that sometimes the tasks' NUM_ATTEMPTS field in JobContext was getting incremented even without the tasks being retried. This was because the numAttempts field was getting incremented in other (incorrect) places than at scheduling time. The logic for incrementing the number of attempts has been moved to the schedule logic in this diff.
1. Modify tests so that they test for numAttempts more tightly
2. Fix the incrementation logic
3. Add a new integration test: TestTaskNumAttempts

2 years agoMake the reservoir sliding window length used in Helix monintor metrics configurable...
chenboat [Thu, 22 Aug 2019 04:43:01 +0000 (21:43 -0700)] 
Make the reservoir sliding window length used in Helix monintor metrics configurable. #382

2 years agoMake the reservoir sliding window length used in Helix monintor metrics configurable...
chenboat [Wed, 21 Aug 2019 04:21:03 +0000 (21:21 -0700)] 
Make the reservoir sliding window length used in Helix monintor metrics configurable. #382

2 years agoMake the reservoir sliding window length used in Helix monintor metrics configurable...
chenboat [Tue, 20 Aug 2019 06:11:43 +0000 (23:11 -0700)] 
Make the reservoir sliding window length used in Helix monintor metrics configurable. #382

2 years agoMake the reservoir sliding window length used in Helix monintor metrics configurable...
chenboat [Tue, 20 Aug 2019 04:59:59 +0000 (21:59 -0700)] 
Make the reservoir sliding window length used in Helix monintor metrics configurable. #382

2 years agoFix a typo. #382
chenboat [Sun, 18 Aug 2019 02:01:40 +0000 (19:01 -0700)] 
Fix a typo. #382

2 years agoFix a typo. #382
chenboat [Wed, 14 Aug 2019 06:22:33 +0000 (23:22 -0700)] 
Fix a typo. #382

2 years agoAdd a unit test case.. #382
chenboat [Wed, 14 Aug 2019 06:20:59 +0000 (23:20 -0700)] 
Add a unit test case.. #382

2 years agoUse the system property value as the sliding window length. #382
chenboat [Tue, 13 Aug 2019 05:55:22 +0000 (22:55 -0700)] 
Use the system property value as the sliding window length. #382

2 years agoUse the system property value as the sliding window length. #382
chenboat [Tue, 13 Aug 2019 05:47:54 +0000 (22:47 -0700)] 
Use the system property value as the sliding window length. #382

2 years agoUse the system property value as the sliding window length. #382
chenboat [Fri, 9 Aug 2019 07:06:11 +0000 (00:06 -0700)] 
Use the system property value as the sliding window length. #382

2 years agoFix the execution delay for the jobs
Ali Reza Zamani Zadeh Najari [Wed, 14 Aug 2019 15:57:49 +0000 (08:57 -0700)] 
Fix the execution delay for the jobs

In the Task Framework part of helix, execution delay for the jobs is not respected.
In this commit, when the job is extracted from the inflighJobs queue, the timeline has been checked before scheduling.

2 years agoMove partition heatlh check method into dataAccessor layer
Yi Wang [Thu, 15 Aug 2019 18:53:26 +0000 (11:53 -0700)] 
Move partition heatlh check method into dataAccessor layer

3 years agoUpdate menu bar.
Jiajun Wang [Mon, 19 Aug 2019 21:00:31 +0000 (14:00 -0700)] 
Update menu bar.

3 years agoFix typo for process name
Junkai Xue [Mon, 19 Aug 2019 18:15:05 +0000 (11:15 -0700)] 
Fix typo for process name

3 years agoRevert "Add ChangeDetector interface and ResourceChangeDetector implementation (...
Hunter Lee [Thu, 15 Aug 2019 21:46:31 +0000 (14:46 -0700)] 
Revert "Add ChangeDetector interface and ResourceChangeDetector implementation (#388)"

This reverts commit e0c1c66dd6ed9a01955927ea1828fabcf59eeaad.

3 years agoAdd ChangeDetector interface and ResourceChangeDetector implementation (#388)
Hunter Lee [Thu, 15 Aug 2019 21:33:02 +0000 (14:33 -0700)] 
Add ChangeDetector interface and ResourceChangeDetector implementation (#388)

Add ChangeDetector interface and ResourceChangeDetector implementation

In order to efficiently react to changes happening to the cluster in the new WAGED rebalancer, a new component called ChangeDetector was added.

1. Add ChangeDetector interface
2. Implement ResourceChangeDetector
3. Add ResourceChangeCache, a wrapper for critical cluster metadata
4. Add an integration test, TestResourceChangeDetector

3 years agoFix issue when client only sets ANY at cluster level throttle config
Yi Wang [Fri, 9 Aug 2019 00:34:47 +0000 (17:34 -0700)] 
Fix issue when client only sets ANY at cluster level throttle config

fixes #332
Added unit test for StateTransitionThrottleController
Added integration test for verifying case when only cluster level ANY throttle set to 1# Please enter the commit message for your changes. Lines starting

3 years agoFix ZNode does not exist in HealthCheck
Junkai Xue [Wed, 14 Aug 2019 18:23:11 +0000 (11:23 -0700)] 
Fix ZNode does not exist in HealthCheck

If the ZNode of PartitionHealth does not exist, REST will return failed checks due to NPE. The fix will be adding the instance to be refreshed entirely. Then REST can check based on API refreshed result.

3 years agoRevert "Reenable helix-front module for official release." (#406)
Jiajun Wang [Wed, 14 Aug 2019 20:58:22 +0000 (13:58 -0700)] 
Revert "Reenable helix-front module for official release." (#406)

This reverts commit 3c3db0bf797cbc1e0c1aec59395c8632ed6455db.

3 years agoRelease note for 0.9.1.
jiajunwang [Tue, 13 Aug 2019 23:10:56 +0000 (16:10 -0700)] 
Release note for 0.9.1.

3 years agoBump up the snapshot version.
jiajunwang [Tue, 13 Aug 2019 23:54:12 +0000 (16:54 -0700)] 
Bump up the snapshot version.

Also fix the missing helix-agent snapshot update logic in the bump-up.comand.

3 years agoMerge with the lastest optimization on batch get zookeeper properties
Yi Wang [Thu, 8 Aug 2019 19:11:19 +0000 (12:11 -0700)] 
Merge ... the lastest optimization on batch get zookeeper properties

3 years agoAdd InstanceServieImpl#batchGetInstancesStoppableChecks to solve performance issue...
Yi Wang [Tue, 6 Aug 2019 01:33:38 +0000 (18:33 -0700)] 
Add InstanceServieImpl#batchGetInstancesStoppableChecks to solve performance issue #366

3 years ago[maven-release-plugin] prepare for next development iteration
Jiajun Wang [Tue, 13 Aug 2019 18:30:45 +0000 (11:30 -0700)] 
[maven-release-plugin] prepare for next development iteration

3 years ago[maven-release-plugin] prepare release helix-0.9.1 helix-0.9.1
Jiajun Wang [Tue, 13 Aug 2019 18:30:35 +0000 (11:30 -0700)] 
[maven-release-plugin] prepare release helix-0.9.1

3 years agoReenable helix-front module for official release.
Jiajun Wang [Mon, 12 Aug 2019 20:57:21 +0000 (13:57 -0700)] 
Reenable helix-front module for official release.

3 years agoRevert "[maven-release-plugin] prepare release helix-0.9.1"
Jiajun Wang [Mon, 12 Aug 2019 20:55:40 +0000 (13:55 -0700)] 
Revert "[maven-release-plugin] prepare release helix-0.9.1"

This reverts commit c7e8e6366f6e5360d416e2fd1867252ebdcd7242.

3 years agoRevert "[maven-release-plugin] prepare for next development iteration"
Jiajun Wang [Mon, 12 Aug 2019 20:55:35 +0000 (13:55 -0700)] 
Revert "[maven-release-plugin] prepare for next development iteration"

This reverts commit f2746c823193991a0dd6152827b7344d66226368.

3 years ago[maven-release-plugin] prepare for next development iteration
Jiajun Wang [Mon, 12 Aug 2019 20:36:09 +0000 (13:36 -0700)] 
[maven-release-plugin] prepare for next development iteration

3 years ago[maven-release-plugin] prepare release helix-0.9.1
Jiajun Wang [Mon, 12 Aug 2019 20:35:57 +0000 (13:35 -0700)] 
[maven-release-plugin] prepare release helix-0.9.1

3 years agoFix the CallbackHandler registration logic in DistributedLeaderElection (#395)
Jiajun Wang [Mon, 12 Aug 2019 17:58:21 +0000 (10:58 -0700)] 
Fix the CallbackHandler registration logic in DistributedLeaderElection (#395)

* Fix the CallbackHandler registration logic in DistributedLeaderElection that may cause a leader node has no callback registered.

Our current initialization logic assumes a strict leader acquire/relinquish events sequence. However, due to the possible carried over ZK events from the previous ZK session, the controller node change event might be triggered in the following sequence:
1. CALLBACK (from the previous session): Create new leader node and add handlers.
2. FINALIZE (Handle the previous session expire): Clean up handlers.
3. INIT (For the new session establishment): Expect to add the handlers back again.
As a result, if the INIT event processing does not recover the handlers, the leader controller won't be able to manage anything. This fix ensures all the acquireLeadership call will try to initialize the leader controller's callback handlers.

Also, add the additional test logic in TestHandleNewSession to verify the fix.

* Improve the leader history update logic so there is no duplicate entry recorded.

3 years agoTASK: Drop all tasks whose requested states are DROPPED
Hunter Lee [Fri, 9 Aug 2019 23:57:05 +0000 (16:57 -0700)] 
TASK: Drop all tasks whose requested states are DROPPED

Upon a Participant disconnect, the Participant would carry over from the last session. This would copy all previous task states to the current session and set their requested states as DROPPED (for INIT and RUNNING states).

It came to our attention that sometimes these Participants experience connection issues and the tasks happen to be in TASK_ERROR or COMPLETED states. These tasks would get stuck on the Participant and never be dropped. This issue proposes to add the logic that would get all tasks whose requested states are DROPPED to be dropped immediately.
1. Make sure all tasks whose requested state is DROPPED get added to tasksToDrop
2. Add a unit test: TestDropTerminalTasksUponReset

3 years agoImprove ZK read with batch call
Junkai Xue [Mon, 5 Aug 2019 23:33:50 +0000 (16:33 -0700)] 
Improve ZK read with batch call

Current HealthReport read is single call for each participant. Improve it will batch call to ZK to reduce the number of calls.

3 years agoAdd reviews@helix.apache.org to mailing list
Junkai Xue [Tue, 6 Aug 2019 03:53:13 +0000 (20:53 -0700)] 
Add reviews@helix.apache.org to mailing list