Package com.linkedin.d2.balancer.strategies.degrader

Source Code of com.linkedin.d2.balancer.strategies.degrader.TrackerClientUpdater

package com.linkedin.d2.balancer.strategies.degrader;

import com.linkedin.d2.balancer.clients.TrackerClient;
import com.linkedin.util.degrader.DegraderControl;

/**
* This is a helper class to record the changes to tracker client during the update of partition state
* without actually mutating the tracker client. The changes are applied to the tracker client only
* when update is explicitly called. This allows us to eliminate the side-effects during the update of
* the partition state.
*
* Note that because the recorded changes are not flushed to tracker client until update() is called,
* TrackerClientUpdater.getMaxDropRate() may be different from tracker client's degraderControl.getMaxDropRate().
* Hence TrackerClientUpdater.getMaxDropRate() should be used during the state update as some calculation
* depends on the new maxDropRate that has not yet written into tracker client.
*
* For overrideDropRate and overrideMinCallCount, the new values are not used in the state update.
*/
/*package private*/class TrackerClientUpdater
{
  private final TrackerClient _trackerClient;
  private final int _partitionId;
  private double _overrideDropRate;
  private double _maxDropRate;
  private int _overrideMinCallCount;

  TrackerClientUpdater(TrackerClient trackerClient, int partitionId)
  {
    _trackerClient = trackerClient;
    _partitionId = partitionId;
    DegraderControl degraderControl = _trackerClient.getDegraderControl(_partitionId);
    _overrideDropRate = degraderControl.getOverrideDropRate();
    _overrideMinCallCount = degraderControl.getOverrideMinCallCount();
    _maxDropRate = degraderControl.getMaxDropRate();
  }

  TrackerClient getTrackerClient()
  {
    return _trackerClient;
  }

  // should be used if the new max drop rate needs to be read
  double getMaxDropRate()
  {
    return _maxDropRate;
  }

  void setOverrideDropRate(double overrideDropRate)
  {
    _overrideDropRate = overrideDropRate;
  }

  void setMaxDropRate(double maxDropRate)
  {
    _maxDropRate = maxDropRate;
  }

  void setOverrideMinCallCount(int overrideMinCallCount)
  {
    _overrideMinCallCount = overrideMinCallCount;
  }

  void update()
  {
    DegraderControl degraderControl = _trackerClient.getDegraderControl(_partitionId);
    degraderControl.setOverrideDropRate(_overrideDropRate);
    degraderControl.setMaxDropRate(_maxDropRate);
    degraderControl.setOverrideMinCallCount(_overrideMinCallCount);
  }

  @Override
  public String toString()
  {
    return _trackerClient.toString();
  }
}
TOP

Related Classes of com.linkedin.d2.balancer.strategies.degrader.TrackerClientUpdater

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.