// for unit testing, this allows the strategy to be forced for the next time updateState
  // is called. This is not to be used in prod code.
  void setStrategy(DegraderLoadBalancerState.Strategy strategy) {
    DegraderLoadBalancerState newState;
    newState =
        new DegraderLoadBalancerState(
            _state.getUpdateIntervalMs(),
            _state.getClusterGenerationId(),
            _state.getPointsMap(),
            _state.getLastUpdated(),
            strategy,
            _state.getCurrentOverrideDropRate(),
            _state.getCurrentAvgClusterLatency(),
            _state.isInitialized(),
            _state.getRecoveryMap(),
            _state.getServiceName(),
            _state.getDegraderProperties(),
            _state.getCurrentClusterCallCount());

    _state = newState;
  }
 static boolean isNewStateHealthy(
     DegraderLoadBalancerState newState,
     DegraderLoadBalancerStrategyConfig config,
     List<TrackerClientUpdater> trackerClientUpdaters) {
   if (newState.getCurrentAvgClusterLatency() > config.getLowWaterMark()) {
     return false;
   }
   Map<URI, Integer> pointsMap = newState.getPointsMap();
   for (TrackerClientUpdater clientUpdater : trackerClientUpdaters) {
     TrackerClient client = clientUpdater.getTrackerClient();
     int perfectHealth =
         (int) (client.getPartitionWeight(DEFAULT_PARTITION_ID) * config.getPointsPerWeight());
     Integer point = pointsMap.get(client.getUri());
     if (point < perfectHealth) {
       return false;
     }
   }
   return true;
 }