I have now fixed both getNextScaleDownPartitionContext and
getNextScaleUpPartitionContext implementation of Round-Robin.

Thanks.

On Tue, Mar 3, 2015 at 11:23 PM, Lahiru Sandaruwan <lahi...@wso2.com> wrote:

>
>
> On Tue, Mar 3, 2015 at 11:15 PM, Rajkumar Rajaratnam <rajkum...@wso2.com>
> wrote:
>
>> Problem is lowestInstanceCount is initially taking 0. Instead it should
>> take the non terminated member count of 1st partition.
>>
>> To Fix,
>>
>>         int selectedIndex = 0;
>>         int lowestInstanceCount =
>> partitionContexts[0].getNonTerminatedMemberCount();
>>
>>
> +1. I was thinking the same. We can start with first partition count.
>
> Thanks.
>
>> wdyt?
>>
>> Thanks.
>>
>> On Tue, Mar 3, 2015 at 10:57 PM, Rajkumar Rajaratnam <rajkum...@wso2.com>
>> wrote:
>>
>>> Hi Lahiru,
>>>
>>> Actually, current logic is not working as your example. This logic only
>>> uses the first partition. This will never use any other partitions. See my
>>> comments within the following code.
>>>
>>>     public PartitionContext
>>> getNextScaleUpPartitionContext(PartitionContext[] partitionContexts) {
>>>
>>>         int selectedIndex = 0;
>>>         int lowestInstanceCount = 0;
>>>
>>>         for(int partitionIndex = 0; partitionIndex <
>>> partitionContexts.length - 1; partitionIndex++) {
>>>
>>>
>>> if(partitionContexts[partitionIndex].getNonTerminatedMemberCount() <
>>> lowestInstanceCount) {
>>>
>>> *//  this if condition is always false, because non terminated count is
>>> always >=0*
>>>
>>>                 lowestInstanceCount =
>>> partitionContexts[partitionIndex].getNonTerminatedMemberCount();
>>>                 selectedIndex = partitionIndex;
>>>             }
>>>         }
>>>
>>> *//  selected index is 0 always, so round-robin will always use first
>>> partition*
>>>
>>> if(partitionContexts[selectedIndex].getNonTerminatedMemberCount() <
>>> partitionContexts[selectedIndex].getMax()) {
>>>
>>>             if(log.isDebugEnabled()){
>>>                 log.debug(String.format("[round-robin algorithm]
>>> [scale-up] [partition] %s has space to create members. " +
>>>                         "[non terminated count] %s [max] %s"
>>>                         ,
>>> partitionContexts[selectedIndex].getPartitionId(),
>>>
>>> partitionContexts[selectedIndex].getNonTerminatedMemberCount(),
>>>                         partitionContexts[selectedIndex].getMax()));
>>>             }
>>>             return partitionContexts[selectedIndex];
>>>         } else {
>>>
>>>             return null;
>>>         }
>>>     }
>>>
>>> May be I am missing something here.
>>>
>>> Thanks.
>>>
>>> On Tue, Mar 3, 2015 at 10:42 PM, Lahiru Sandaruwan <lahi...@wso2.com>
>>> wrote:
>>>
>>>> Hi Raj,
>>>>
>>>> Earlier in 4.0.0 release, we have been using the partition index. If
>>>> that to be worked correctly we should persist the index for each cluster.
>>>>
>>>> IMO there is a better way to execute the round-robin method as follows,
>>>>
>>>> The intention of round robin algorithm is to distribute the members in
>>>> the partitions equally. Current method works as per the following example.
>>>>
>>>> Say we have 3 partitions, p1, p2, and p3 and max of each partition is 2.
>>>>
>>>> So according to the algorithm, it will select the first partition who
>>>> has the lowest member count.
>>>>
>>>> Iteration1: It will select p1.
>>>> Iteration2: It will select p2.
>>>> Iteration3: It will select p3.
>>>> Iteration4: It will select p1.
>>>> Iteration5: It will select p2.
>>>> ....
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>> On Tue, Mar 3, 2015 at 10:22 PM, Rajkumar Rajaratnam <
>>>> rajkum...@wso2.com> wrote:
>>>>
>>>>> Hi Devs,
>>>>>
>>>>> It seems to me that there is a bug in round-robin implementation of
>>>>> partition algorithm.
>>>>>
>>>>>
>>>>> https://github.com/apache/stratos/blob/0b7734f4c9f1444d064fec93bf9ac59a5883faf2/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java#L43-L64
>>>>>
>>>>> Shouldn't it work based on current partition index? For example, if
>>>>> the most recent instance was spin up in partition-1, the next instance
>>>>> should be spin up in partition-2 and so on. According to current logic 
>>>>> what
>>>>> is happening is, all the instance are spin up in partition-1.
>>>>>
>>>>> Please correct me If I am wrong.
>>>>>
>>>>> Thanks.
>>>>>
>>>>> --
>>>>> Rajkumar Rajaratnam
>>>>> Committer & PMC Member, Apache Stratos
>>>>> Software Engineer, WSO2
>>>>>
>>>>> Mobile : +94777568639
>>>>> Blog : rajkumarr.com
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> --
>>>> Lahiru Sandaruwan
>>>> Committer and PMC member, Apache Stratos,
>>>> Senior Software Engineer,
>>>> WSO2 Inc., http://wso2.com
>>>> lean.enterprise.middleware
>>>>
>>>> email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/
>>>> linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146
>>>>
>>>>
>>>
>>>
>>> --
>>> Rajkumar Rajaratnam
>>> Committer & PMC Member, Apache Stratos
>>> Software Engineer, WSO2
>>>
>>> Mobile : +94777568639
>>> Blog : rajkumarr.com
>>>
>>
>>
>>
>> --
>> Rajkumar Rajaratnam
>> Committer & PMC Member, Apache Stratos
>> Software Engineer, WSO2
>>
>> Mobile : +94777568639
>> Blog : rajkumarr.com
>>
>
>
>
> --
> --
> Lahiru Sandaruwan
> Committer and PMC member, Apache Stratos,
> Senior Software Engineer,
> WSO2 Inc., http://wso2.com
> lean.enterprise.middleware
>
> email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/
> linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146
>
>


-- 
Rajkumar Rajaratnam
Committer & PMC Member, Apache Stratos
Software Engineer, WSO2

Mobile : +94777568639
Blog : rajkumarr.com

Reply via email to