Beispiel #1
0
 /**
  * Compute the average load across all region servers. Currently, this uses a very naive
  * computation - just uses the number of regions being served, ignoring stats about number of
  * requests.
  *
  * @return the average load
  */
 protected synchronized double getAverageLoad() {
   int numServers = 0, totalLoad = 0;
   for (Map.Entry<ServerName, Set<HRegionInfo>> e : serverHoldings.entrySet()) {
     Set<HRegionInfo> regions = e.getValue();
     ServerName serverName = e.getKey();
     int regionCount = regions.size();
     if (serverManager.isServerOnline(serverName)) {
       totalLoad += regionCount;
       numServers++;
     }
   }
   if (numServers > 1) {
     // The master region server holds only a couple regions.
     // Don't consider this server in calculating the average load
     // if there are other region servers to avoid possible confusion.
     Set<HRegionInfo> hris = serverHoldings.get(server.getServerName());
     if (hris != null) {
       totalLoad -= hris.size();
       numServers--;
     }
   }
   return numServers == 0 ? 0.0 : (double) totalLoad / (double) numServers;
 }