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