use of com.linkedin.d2.balancer.ServiceUnavailableException in project rest.li by linkedin.
the class SimpleLoadBalancer method listenToServiceAndCluster.
private ServiceProperties listenToServiceAndCluster(URI uri) throws ServiceUnavailableException {
if (!D2_SCHEME_NAME.equalsIgnoreCase(uri.getScheme())) {
throw new IllegalArgumentException("Unsupported scheme in URI " + uri);
}
// get the service for this uri
String serviceName = LoadBalancerUtil.getServiceNameFromUri(uri);
ServiceProperties service = getLoadBalancedServiceProperties(serviceName);
String clusterName = service.getClusterName();
listenToCluster(serviceName, clusterName);
return service;
}
use of com.linkedin.d2.balancer.ServiceUnavailableException in project rest.li by linkedin.
the class SimpleLoadBalancer method getPartitionAccessor.
@Override
public PartitionAccessor getPartitionAccessor(URI serviceUri) throws ServiceUnavailableException {
ServiceProperties service = listenToServiceAndCluster(serviceUri);
String serviceName = service.getServiceName();
String clusterName = service.getClusterName();
return getPartitionAccessor(serviceName, clusterName);
}
use of com.linkedin.d2.balancer.ServiceUnavailableException in project rest.li by linkedin.
the class ConsistentHashKeyMapperTest method createRunnables.
/**
* Create tasks for the deadlock test
*/
private List<Runnable> createRunnables(int num, final ConsistentHashKeyMapper mapper, String serviceName, final CountDownLatch latch) throws URISyntaxException {
final URI serviceURI = new URI("d2://" + serviceName);
List<Runnable> runnables = new ArrayList<Runnable>();
for (int i = 0; i < num; i++) {
// since i < numPartitions, the keys will be distributed to different partitions
final List<String> keys = generateKeys(i);
Runnable runnable = new Runnable() {
@Override
public void run() {
// wait until all jobs submitted
latch.countDown();
try {
latch.await();
mapper.mapKeysV3(serviceURI, keys, 1);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ServiceUnavailableException e) {
e.printStackTrace();
}
}
};
runnables.add(runnable);
}
return runnables;
}
use of com.linkedin.d2.balancer.ServiceUnavailableException in project rest.li by linkedin.
the class TestAllPartitionsRequestBuilder method testSendAllPartitionsRequests.
@Test(dataProvider = com.linkedin.restli.internal.common.TestConstants.RESTLI_PROTOCOL_1_2_PREFIX + "restliRequestOptions")
public void testSendAllPartitionsRequests(RestliRequestOptions options, RingFactory<URI> ringFactory) throws ServiceUnavailableException, URISyntaxException, RestException, InterruptedException {
final int PARTITION_NUM = 5;
List<URI> expectedUris = new ArrayList<URI>();
ConsistentHashKeyMapper mapper = getKeyToHostMapper(PARTITION_NUM, expectedUris, ringFactory);
AllPartitionsRequestBuilder<Greeting> searchRB = new AllPartitionsRequestBuilder<Greeting>(mapper);
ActionRequestBuilder<Long, Greeting> builder = new ActionRequestBuilder<Long, Greeting>(TEST_URI, Greeting.class, _COLL_SPEC, options);
ActionRequest<Greeting> request = builder.name("updateTone").id(1L).setParam(new FieldDef<Tone>("newTone", Tone.class, DataTemplateUtil.getSchema(Tone.class)), Tone.FRIENDLY).build();
final Map<String, Greeting> results = new ConcurrentHashMap<String, Greeting>();
final CountDownLatch latch = new CountDownLatch(PARTITION_NUM);
final List<Throwable> errors = new ArrayList<Throwable>();
final List<Greeting> responses = new ArrayList<Greeting>();
Callback<Response<Greeting>> cb = new Callback<Response<Greeting>>() {
@Override
public void onError(Throwable e) {
synchronized (errors) {
errors.add(e);
}
latch.countDown();
}
@Override
public void onSuccess(Response<Greeting> response) {
results.put(response.getEntity().toString(), response.getEntity());
synchronized (responses) {
responses.add(response.getEntity());
}
latch.countDown();
}
};
HostSet hostsResult = searchRB.sendRequests(getClient(), request, new RequestContext(), cb);
List<URI> uris = hostsResult.getAllHosts();
Assert.assertTrue(uris.containsAll(expectedUris));
Assert.assertTrue(expectedUris.containsAll(uris));
latch.await();
if (!errors.isEmpty()) {
Assert.fail("I knew it: " + errors.toString());
}
Assert.assertEquals(PARTITION_NUM, responses.size());
}
use of com.linkedin.d2.balancer.ServiceUnavailableException in project rest.li by linkedin.
the class TestScatterGather method testBuildSGKVRequests.
public static void testBuildSGKVRequests(int endPointsNum, int partitionNum, RootBuilderWrapper<Long, Greeting> builders) throws URISyntaxException, RestException, ServiceUnavailableException {
final int NUM_ENDPOINTS = endPointsNum;
ConsistentHashKeyMapper mapper;
if (partitionNum > 0) {
mapper = getKeyToHostMapper(endPointsNum, partitionNum);
} else {
mapper = getKeyToHostMapper(endPointsNum);
}
ScatterGatherBuilder<Greeting> sg = new ScatterGatherBuilder<Greeting>(mapper);
final int NUM_IDS = 100;
Long[] ids = generateIds(NUM_IDS);
Map<Long, Greeting> updates = generateUpdates(ids);
testBuildSGGetKVRequests(NUM_ENDPOINTS, sg, ids);
testBuildSGDeleteRequests(NUM_ENDPOINTS, sg, ids, builders);
testBuildSGUpdateRequests(NUM_ENDPOINTS, sg, updates, builders);
}
Aggregations