I almost have this working. However I'm experiencing a potential bug in MessageThrottleStage line 205. The problem is that the throttleMap's key contains the INSTANCE=<id> in it. This effectively makes trying to throttle across the entire cluster impossible.
On Apr 24, 2013, at 2:07 PM, Zhen Zhang <[email protected]> wrote: > Hi Ming, to set the constraint so that only one transition message at a > time, you can take a look at the test example of TestMessageThrottle. You > need to add a message constraint as follows: > > // build a message constraint > ConstraintItemBuilder builder = new ConstraintItemBuilder(); > builder.addConstraintAttribute("MESSAGE_TYPE", "STATE_TRANSITION") > .addConstraintAttribute("INSTANCE", ".*") > .addConstraintAttribute("CONSTRAINT_VALUE", "1"); > > // add the constraint to the cluster > helixAdmin.setConstraint(clusterName, ConstraintType.MESSAGE_CONSTRAINT, > "constraint1", builder.build()); > > > Message constraint is separate from ideal state and is not specified in > the JSON file of the ideal state. > > Thanks, > Jason > > > > > On 4/23/13 2:40 PM, "Ming Fang" <[email protected]> wrote: > >> Kishore >> >> It sounds like the solution is to set the constraints so that only one >> transition at a time. >> Can you point me to an example of how to do this? >> Also is this something I can set in the JSON file? >> >> Sent from my iPad >> >> On Apr 1, 2013, at 11:32 AM, kishore g <[email protected]> wrote: >> >>> Hi Ming, >>> >>> Thanks for the detailed explanation. Actually 5 & 6 happen in >>> parallel, Helix tries to parallelize the transitions as much as possible. >>> >>> There is another feature in Helix that allows you to sort the >>> transitions based on some priority.See STATE_TRANSITION_PRIORITY_LIST in >>> state model definition. But after sorting Helix will send as many as >>> possible in parallel without violating constraints. >>> >>> In your case you want the priority to be S-M, O-S, M-S but that is not >>> sufficient since O-S and M-S will be sent in parallel. >>> >>> Additionally, what you need to do is set contraint on transition that >>> there should be only one transition per partition at any time. This will >>> basically make the order 6 5 7 and they will be executed sequentially >>> per partition. >>> >>> We will try this out and let you know, you dont need to change any >>> code in Helix or your app. You should be able to tweak the configuration >>> dynamically. >>> >>> We will try to think of solving this in a more elegant way. I will file >>> a jira and add more info. >>> >>> I also want to ask this question, when a node comes up if it is >>> mandatory to talk to MASTER what happens when the nodes are started for >>> the first time or when all nodes crash and come back. >>> >>> thanks, >>> Kishore G >>> >>> >>> >>> >>> >>> >>> >
