Package com.linkedin.d2.balancer.clients

Examples of com.linkedin.d2.balancer.clients.TrackerClient


    DegraderLoadBalancerStrategyV3.overrideClusterDropRate(DEFAULT_PARTITION_ID, 1d, clientUpdaters);

    for (TrackerClientUpdater clientUpdater : clientUpdaters)
    {
      TrackerClient client = clientUpdater.getTrackerClient();
      clientUpdater.update();
      assertEquals(client.getDegraderControl(DEFAULT_PARTITION_ID).getOverrideDropRate(), 1d);
      assertTrue(client.getDegrader(DEFAULT_PARTITION_ID).checkDrop());
    }

    DegraderLoadBalancerStrategyV3.overrideClusterDropRate(DEFAULT_PARTITION_ID, -1d, clientUpdaters);

    // if we don't override, the degrader isn't degraded, so should not drop
    for (TrackerClientUpdater clientUpdater : clientUpdaters)
    {
      TrackerClient client = clientUpdater.getTrackerClient();
      clientUpdater.update();
      assertEquals(client.getDegraderControl(DEFAULT_PARTITION_ID).getOverrideDropRate(), -1d);
      assertFalse(client.getDegrader(DEFAULT_PARTITION_ID).checkDrop());
    }

    DegraderLoadBalancerStrategyV3.overrideClusterDropRate(DEFAULT_PARTITION_ID, 0d, clientUpdaters);

    for (TrackerClientUpdater clientUpdater : clientUpdaters)
    {
      TrackerClient client = clientUpdater.getTrackerClient();
      clientUpdater.update();
      assertEquals(client.getDegraderControl(DEFAULT_PARTITION_ID).getOverrideDropRate(), 0d);
      assertFalse(client.getDegrader(DEFAULT_PARTITION_ID).checkDrop());
    }
  }
View Full Code Here


    final Map<TrackerClient,Integer> serverCounts = new HashMap<TrackerClient, Integer>();

    for (int i = 0; i < NUM_URIS; i++)
    {
      URIRequest request = new URIRequest("d2://fooService/this/is/a/test/" + i);
      TrackerClient lastClient = null;
      for (int j = 0; j < NUM_CHECKS; j++)
      {
        TrackerClient client = getTrackerClient(strategy, request, new RequestContext(), 0, clients);
        assertNotNull(client);
        if (lastClient != null)
        {
          assertEquals(client, lastClient);
        }
View Full Code Here

    Map<TrackerClient, Integer> serverCounts = new HashMap<TrackerClient, Integer>();
    RestRequestBuilder builder = new RestRequestBuilder(URI.create("d2://fooservice"));
    final int NUM_REQUESTS=100;
    for (int ii=0; ii<NUM_REQUESTS; ++ii)
    {
      TrackerClient client = getTrackerClient(strategy, builder.build(), new RequestContext(), 0, clients);
      Integer count = serverCounts.get(client);
      if (count == null)
      {
        count = 0;
      }
      serverCounts.put(client, count + 1);
    }

    //First, check that requests are normally evenly distributed.
    Assert.assertEquals(serverCounts.size(), NUM_SERVERS);

    serverCounts.clear();
    RestRequest request = builder.build();

    RequestContext context = new RequestContext();
    KeyMapper.TargetHostHints.setRequestContextTargetHost(context, clients.get(0).getUri());

    for (int ii=0; ii<NUM_REQUESTS; ++ii)
    {
      TrackerClient client = getTrackerClient(strategy, request, context, 0, clients);
      Integer count = serverCounts.get(client);
      if (count == null)
      {
        count = 0;
      }
View Full Code Here

    RestRequest request = builder.build();
    RequestContext context = new RequestContext();
    KeyMapper.TargetHostHints.setRequestContextTargetHost(context, URI.create("http://notinclientlist.testing:9876/foobar"));


    TrackerClient client = getTrackerClient(strategy, request, context, 0, clients);

    Assert.assertNull(client);

  }
View Full Code Here

    DegraderImpl.Config degraderConfig = DegraderConfigFactory.toDegraderConfig(degraderProperties);
    final List<TrackerClient> clients = new ArrayList<TrackerClient>();
    for (int i = 0; i < numberOfPartitions; i++)
    {
      URI uri = URI.create(baseUri + i);
      TrackerClient client =   new TrackerClient(uri,
                                                 getDefaultPartitionData(1, numberOfPartitions),
                                                 new TestLoadBalancerClient(uri), testClock, degraderConfig);
      clients.add(client);
    }
View Full Code Here

  }

  private List<Runnable> createRaceCondition(final URI uri, Clock clock, final DegraderLoadBalancerStrategyV3 strategy, final CountDownLatch joinLatch)
  {
    final CountDownLatch clientLatch = new CountDownLatch(1);
    TrackerClient evilClient = new EvilClient(uri, getDefaultPartitionData(1, 2), new TrackerClientTest.TestClient(),
                                              clock, null, clientLatch);
    final List<TrackerClient> clients = Collections.singletonList(evilClient);
    final Runnable update = new Runnable()
    {
      @Override
View Full Code Here

      List<TrackerClient> clients = new ArrayList<TrackerClient>();
      URI uri1 = URI.create("http://test.linkedin.com:3242/fdsaf");
      URIRequest request = new URIRequest(uri1);

      TrackerClient client1 =
              new TrackerClient(uri1, getDefaultPartitionData(1d), new TestLoadBalancerClient(uri1), clock, null);

      clients.add(client1);

      // force client1 to be disabled
      DegraderControl dcClient1Default = client1.getDegraderControl(DEFAULT_PARTITION_ID);
      dcClient1Default.setOverrideMinCallCount(5);
      dcClient1Default.setMinCallCount(5);
      dcClient1Default.setMaxDropRate(1d);
      dcClient1Default.setUpStep(1.0d);

      List<CallCompletion> ccList = new ArrayList<CallCompletion>();
      CallCompletion cc;
      for (int j = 0; j < NUM_CHECKS; j++)

      {
        cc = client1.getCallTracker().startCall();

        ccList.add(cc);
      }

      // add high latency and errors to shut off traffic to this tracker client.
      clock.addMs(3500);

      for (Iterator<CallCompletion> iter = ccList.listIterator(); iter.hasNext();)
      {
        cc = iter.next();
        cc.endCallWithError();
        iter.remove();
      }

      // go to next time interval.
      clock.addMs(TIME_INTERVAL);

      Assert.assertEquals(dcClient1Default.getCurrentComputedDropRate(), 1.0);

      // trigger a state update
      TrackerClient resultTC = getTrackerClient(strategy, request, new RequestContext(), 1, clients);

      // now we mimic the high latency and force the state to drop all calls so to make
      // the overrideClusterDropRate to 1.0
      ccList = new ArrayList<CallCompletion>();
      for (int j = 0; j < NUM_CHECKS; j++)
View Full Code Here

    List<TrackerClient> clients = new ArrayList<TrackerClient>();
    URI uri1 = URI.create("http://test.linkedin.com:3242/fdsaf");
    URIRequest request = new URIRequest(uri1);

    TrackerClient client1 =
            new TrackerClient(uri1, getDefaultPartitionData(1d), new TestLoadBalancerClient(uri1), clock, null);

    clients.add(client1);

    // force client1 to be disabled
    DegraderControl dcClient1Default = client1.getDegraderControl(DEFAULT_PARTITION_ID);
    dcClient1Default.setOverrideMinCallCount(5);
    dcClient1Default.setMinCallCount(5);
    dcClient1Default.setMaxDropRate(1d);
    dcClient1Default.setUpStep(1.0d);

    List<CallCompletion> ccList = new ArrayList<CallCompletion>();
    CallCompletion cc;
    for (int j = 0; j < NUM_CHECKS; j++)

    {
      cc = client1.getCallTracker().startCall();

      ccList.add(cc);
    }

    // add high latency and errors to shut off traffic to this tracker client.
    // note: the default values for highError and lowError in the degrader are 1.1,
    // which means we don't use errorRates when deciding when to lb/degrade.
    // In addition, because we changed to use the
    clock.addMs(3500);
    //for (int j = 0; j < NUM_CHECKS; j++)
    for (Iterator<CallCompletion> iter = ccList.listIterator(); iter.hasNext();)
    {
      cc = iter.next();
      cc.endCallWithError();
      iter.remove();
    }

    // go to next time interval.
    clock.addMs(TIME_INTERVAL);

    Assert.assertEquals(dcClient1Default.getCurrentComputedDropRate(), 1.0);

    // trigger a state update
    TrackerClient resultTC = getTrackerClient(strategy, request, new RequestContext(), 1, clients);
    if (config.getInitialRecoveryLevel() < 0.01)
    {
      //the returned TrackerClient should be null
      assertNull(resultTC,"expected null trackerclient");

      // In the next time interval, the load balancer should reintroduce the TC
      // back into the ring because there was an entire time interval where no calls went to this
      // tracker client, so it's time to try it out. We need to enter this code at least once.
      do
      {
        // go to next time interval.
        clock.addMs(TIME_INTERVAL);
        // try adjusting the hash ring on this updateState
        if (strategyV3 != null)
        {
          strategy.setStrategyV3(DEFAULT_PARTITION_ID, strategyV3);
        }
        else if (strategyV2 != null)
        {
          strategy.setStrategyV2(strategyV2);
        }
        else
        {
          fail("should set strategy (either LoadBalance or Degrader");
        }
        resultTC = getTrackerClient(strategy, request, new RequestContext(), 1, clients);
        localStepsToFullRecovery--;
      }
      while (localStepsToFullRecovery > 0);
    }
    assertNotNull(resultTC,"expected non-null trackerclient");

    // make calls to the tracker client to verify that it's on the road to healthy status.
    for (int j = 0; j < NUM_CHECKS; j++)
    {
      cc = resultTC.getCallTracker().startCall();
      ccList.add(cc);
    }

    clock.addMs(10);
View Full Code Here

    String baseUri = "http://test.linkedin.com:10010/abc";
    List<TrackerClient> result = new LinkedList<TrackerClient>();
    for (int i = 0; i < n; i++)
    {
      URI uri = URI.create(baseUri + i);
      TrackerClient client =   new TrackerClient(uri,
                                                 getDefaultPartitionData(1d),
                                                 new TestLoadBalancerClient(uri), clock, config);
      result.add(client);
    }
    return result;
View Full Code Here

    callClients(latency, qps, clients, clock, timeInterval, isCalledWithError, isCalledWithErrorForLoadBalancing);
    //create any random URIRequest because we just need a URI to be hashed to get the point in hash ring anyway
    if (clients != null && !clients.isEmpty())
    {
      URIRequest request = new URIRequest(clients.get(0).getUri());
      TrackerClient client = getTrackerClient(adapter, request, new RequestContext(), clusterGenerationId, clients);
      Map<URI, Integer> pointsMap = adapter.getPointsMap();
      for (TrackerClient trackerClient : clients)
      {
        Integer pointsInTheRing = pointsMap.get(trackerClient.getUri());
        assertEquals(pointsInTheRing, expectedPointsPerClient);
View Full Code Here

TOP

Related Classes of com.linkedin.d2.balancer.clients.TrackerClient

Copyright © 2018 www.massapicom. 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.