[ 
https://issues.apache.org/jira/browse/HELIX-596?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14554866#comment-14554866
 ] 

ASF GitHub Bot commented on HELIX-596:
--------------------------------------

Github user asfgit closed the pull request at:

    https://github.com/apache/helix/pull/28


> Message throttling of controller behavior unexpectedly, throttled messages 
> still take the constraint quota
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: HELIX-596
>                 URL: https://issues.apache.org/jira/browse/HELIX-596
>             Project: Apache Helix
>          Issue Type: Bug
>          Components: helix-core
>    Affects Versions: 0.6.4
>            Reporter: Hang Qi
>             Fix For: master
>
>
> We found a very strange behavior on message throttling of controller when 
> there is multiple constraints. Here is our setup ( we are using helix-0.6.4, 
> only one resource )
>   - constraint 1: per node constraint, we only allow 3 state transitions 
> happens on one node concurrently.
>   - constraint 2: per partition constraint, we define the state transition 
> priorities in the state model, and only allow one state transition happens on 
> one single partition concurrently.
> We are using MasterSlave state model, suppose we have two nodes A, B, each 
> has 8 partitions (p0-p7) respectively, and initially both A and B are 
> shutdown, and now we start them at the same time (say A is slightly earlier 
> than B).
> The expected behavior might be
>   - p0, p1, p2 on A starts from Offline -> Slave; p3, p4, p5 on B starts from 
> Offline -> Slave
> But the real result is:
>   - p0, p1, p2 on A starts from Offline -> Slave, nothing happens on B
>   - until p0, p1, p2 all transited to Master state, p3, p4, p5 on A starts 
> from Offline -> Slave; p0, p1, p2 on B starts from Offline -> Slave
> As step Offline -> Slave might take long time, this behavior result in very 
> long time to bring up these two nodes (long down time result in long catch up 
> time as well), though ideally we should not let both nodes down at the same 
> time.
> Looked at the controller code, I like the stage and pipeline based 
> implementation, it is well design, very easy to understand and to reason 
> about.
> The logic of MessageThrottleStage#throttle, 
>   - it goes through each messages selected by MessageSelectionStage, 
>   - for each message, it goes through all selected matched constraints, and 
> decrease the quota of each constraints
>      - if any constraint's quota is less than 0, this message will be marked 
> as throttled.
>  
> I think there is something wrong here, the message will take the quota of 
> constraints even it is not going to be sent out (throttled). That explains 
> our case, 
>   - all the messages have been generated by the beginning, (p0, A, 
> Offline->Slave), ... (p7, A, Offline->Slave), (p0, B, Offline->Slave), ..., 
> (p7, B, Offline->Slave)
>   - in the messageThrottleStage#throttle
>     - (p0, A, Offline->Slave), (p1, A, Offline->Slave), (p2, A, 
> Offline->Slave) are good, and constraint 1 on A reaches 0, constraint 2 on 
> p0, p1, p2 reaches 0 as well
>     - (p3, A, Offline->Slave), ... (p7, A, Offline->Slave) throttled by 
> constraint 1 on A, also takes the quota of constraint 2 on those partitions 
> as well.
>     - (p0, B, Offline->Slave), ... (p7, B, Offline->Slave) throttled by 
> constraint 2
>     - thus only (p0, A, Offline->Slave), (p1, A, Oflline->Slave), (p2, A, 
> Offline->Slave) has been sent out by controller.
> Does that make sense, or is there anything else you can think of to result in 
> this unexpected behavior? And is there any work around for it? One thing 
> comes into my mind is update constraint 2 to be only one state transition is 
> allowed of single partition on certain state transitions.
> Thanks very much.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to