Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-26872

Load rate calculator for cost functions should be more precise

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.4.11
    • 2.5.0, 3.0.0-alpha-3, 2.4.12
    • Balancer
    • None

    Description

      The rate calculator should avoid negative values, e.g. if a region is moved from RS1 to RS2, the request count loads in the balancer cache maybe [100,200,0,100,200], then the region load cost calculated by CostFromRegionLoadAsRateFunction#getRegionLoadCost will be (100-200+100+100)/4=25, while the real cost is (100+0+100+200)/4=100. 

      protected double getRegionLoadCost(Collection<BalancerRegionLoad> regionLoadList) {
        Iterator<BalancerRegionLoad> iter = regionLoadList.iterator();
        if (!iter.hasNext()) {
          return 0;
        }
        double previous = getCostFromRl(iter.next());
        if (!iter.hasNext()) {
          return 0;
        }
        double cost = 0;
        do {
          double current = getCostFromRl(iter.next());
          cost += current - previous;
          previous = current;
        } while (iter.hasNext());
        return Math.max(0, cost / (regionLoadList.size() - 1));
      } 

      We should change the cost accumulate codes to,

      cost += current >= previous ? current - previous : current; 

      Attachments

        Activity

          People

            Xiaolin Ha Xiaolin Ha
            Xiaolin Ha Xiaolin Ha
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: