So I guess we have three algorithms :) 1. one-after-another (It will go to next partition only if the current partition is full) 2. round-robin (if we implement as Reka explained above. It will always select the next partition) 3. name-should-be-decided (this will work as Lahiru explained above. It will always distribute the members in the partitions equally)
WDYT? Thanks. On Wed, Mar 4, 2015 at 12:01 AM, Reka Thirunavukkarasu <r...@wso2.com> wrote: > I think that if the selectedIndex is initial value as -1, then RR should > traverse through all the partitions and find out who has the minimum > instances and choose that partition as the selectedIndex in the first > iteration(may be we can exc). Then from the second iteration onwards, it > can increase the selectedIndex by 1 to choose the next adjacent partition. > This will help in the stratos restart as we don't persist the > selectedIndex. WDYT? > > On Tue, Mar 3, 2015 at 10:53 AM, 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 >> >> > > > -- > Reka Thirunavukkarasu > Senior Software Engineer, > WSO2, Inc.:http://wso2.com, > Mobile: +94776442007 > > > -- Rajkumar Rajaratnam Committer & PMC Member, Apache Stratos Software Engineer, WSO2 Mobile : +94777568639 Blog : rajkumarr.com