docs: protected void drainToLoad(long targetLoad, int time, boolean useHandoff)
      {
          final double startingLoad = myLoad();
          double currentLoad = startingLoad;
          List<String> drainList = new LinkedList<String>();
          Set<String> eligibleToDrop = new LinkedHashSet<String>(cluster.myWorkUnits);
          eligibleToDrop.removeAll(cluster.workUnitsPeggedToMe);
  
          for (String workUnit : eligibleToDrop) {
              if (currentLoad <= targetLoad) {
                  break;
              }
              double workUnitLoad = cluster.getWorkUnitLoad(workUnit);
  
              if (workUnitLoad > 0 && (currentLoad - workUnitLoad) > targetLoad) {
                  drainList.add(workUnit);
                  currentLoad -= workUnitLoad;
              }
          }
  
          int drainInterval = (int) (((double) config.drainTime / drainList.size()) * 1000);
          TimerTask drainTask = buildDrainTask(drainList, drainInterval, useHandoff, currentLoad);
  
          if (!drainList.isEmpty()) {
              LOG.info("Releasing work units over {} seconds. Current load: {}. Target: {}. Releasing: {}",
                      time, startingLoad, targetLoad, Strings.mkstring(drainList, ", "));
              cluster.schedule(drainTask, 0, TimeUnit.SECONDS);
          }
      }