use of com.linkedin.restli.common.BatchResponse in project rest.li by linkedin.
the class TestScatterGather method testBuildSGGetRequests.
private static void testBuildSGGetRequests(int numEndpoints, ScatterGatherBuilder<Greeting> sg, Long[] ids) throws ServiceUnavailableException {
Collection<ScatterGatherBuilder.RequestInfo<Greeting>> requests = buildScatterGatherGetRequests(sg, ids);
Assert.assertEquals(requests.size(), numEndpoints);
Set<Set<String>> requestIdSets = new HashSet<>();
Set<Long> requestIds = new HashSet<>();
for (ScatterGatherBuilder.RequestInfo<Greeting> requestInfo : requests) {
// URI will be something like "greetings/?ids=21&ids=4&ids=53&ids=60&ids=66&ids=88&ids=93&foo=bar"
BatchRequest<BatchResponse<Greeting>> request = requestInfo.getBatchRequest();
Set<String> expectedParams = new HashSet<>();
expectedParams.add(RestConstants.QUERY_BATCH_IDS_PARAM);
expectedParams.add("foo");
expectedParams.add(RestConstants.FIELDS_PARAM);
Set<PathSpec> expectedFields = Collections.singleton(new PathSpec("message"));
testRequest(request, expectedParams, expectedFields, null, requestIdSets, requestIds);
}
Assert.assertTrue(requestIds.containsAll(Arrays.asList(ids)));
Assert.assertEquals(requestIds.size(), ids.length);
}
use of com.linkedin.restli.common.BatchResponse in project parseq by linkedin.
the class GetRequestGroup method doExecuteBatchGet.
@SuppressWarnings({ "rawtypes", "unchecked" })
private <K, RT extends RecordTemplate> void doExecuteBatchGet(final Client client, final Batch<RestRequestBatchKey, Response<Object>> batch, final Set<Object> ids, final Set<PathSpec> fields, Function<Request<?>, RequestContext> requestContextProvider) {
final BatchGetEntityRequestBuilder<K, RT> builder = new BatchGetEntityRequestBuilder<>(_baseUriTemplate, _resourceSpec, _requestOptions);
builder.setHeaders(_headers);
builder.setCookies(_cookies);
_queryParams.forEach((key, value) -> builder.setParam(key, value));
_pathKeys.forEach((key, value) -> builder.pathKey(key, value));
builder.ids((Set<K>) ids);
if (fields != null && !fields.isEmpty()) {
builder.fields(fields.toArray(new PathSpec[fields.size()]));
}
final BatchGetEntityRequest<K, RT> batchGet = builder.build();
client.sendRequest(batchGet, requestContextProvider.apply(batchGet), new Callback<Response<BatchKVResponse<K, EntityResponse<RT>>>>() {
@Override
public void onSuccess(Response<BatchKVResponse<K, EntityResponse<RT>>> responseToBatch) {
final ProtocolVersion version = ProtocolVersionUtil.extractProtocolVersion(responseToBatch.getHeaders());
batch.entries().stream().forEach(entry -> {
try {
RestRequestBatchKey rrbk = entry.getKey();
Request request = rrbk.getRequest();
if (request instanceof GetRequest) {
successGet((GetRequest) request, responseToBatch, batchGet, entry, version);
} else if (request instanceof BatchGetKVRequest) {
successBatchGetKV((BatchGetKVRequest) request, responseToBatch, entry, version);
} else if (request instanceof BatchGetRequest) {
successBatchGet((BatchGetRequest) request, responseToBatch, entry, version);
} else if (request instanceof BatchGetEntityRequest) {
successBatchGetEntity((BatchGetEntityRequest) request, responseToBatch, entry, version);
} else {
entry.getValue().getPromise().fail(unsupportedGetRequestType(request));
}
} catch (RemoteInvocationException e) {
entry.getValue().getPromise().fail(e);
}
});
}
@SuppressWarnings({ "deprecation" })
private void successBatchGetEntity(BatchGetEntityRequest request, Response<BatchKVResponse<K, EntityResponse<RT>>> responseToBatch, Entry<RestRequestBatchKey, BatchEntry<Response<Object>>> entry, final ProtocolVersion version) {
Set<String> ids = (Set<String>) request.getObjectIds().stream().map(o -> BatchResponse.keyToString(o, version)).collect(Collectors.toSet());
DataMap dm = filterIdsInBatchResult(responseToBatch.getEntity().data(), ids);
BatchKVResponse br = new BatchEntityResponse<>(dm, request.getResourceSpec().getKeyType(), request.getResourceSpec().getValueType(), request.getResourceSpec().getKeyParts(), request.getResourceSpec().getComplexKeyType(), version);
Response rsp = new ResponseImpl(responseToBatch, br);
entry.getValue().getPromise().done(rsp);
}
private void successBatchGet(BatchGetRequest request, Response<BatchKVResponse<K, EntityResponse<RT>>> responseToBatch, Entry<RestRequestBatchKey, BatchEntry<Response<Object>>> entry, final ProtocolVersion version) {
Set<String> ids = (Set<String>) request.getObjectIds().stream().map(o -> BatchResponse.keyToString(o, version)).collect(Collectors.toSet());
DataMap dm = filterIdsInBatchResult(responseToBatch.getEntity().data(), ids);
BatchResponse br = new BatchResponse<>(dm, request.getResponseDecoder().getEntityClass());
Response rsp = new ResponseImpl(responseToBatch, br);
entry.getValue().getPromise().done(rsp);
}
@SuppressWarnings({ "deprecation" })
private void successBatchGetKV(BatchGetKVRequest request, Response<BatchKVResponse<K, EntityResponse<RT>>> responseToBatch, Entry<RestRequestBatchKey, BatchEntry<Response<Object>>> entry, final ProtocolVersion version) {
Set<String> ids = (Set<String>) request.getObjectIds().stream().map(o -> BatchResponse.keyToString(o, version)).collect(Collectors.toSet());
DataMap dm = filterIdsInBatchResult(responseToBatch.getEntity().data(), ids);
BatchKVResponse br = new BatchKVResponse(dm, request.getResourceSpec().getKeyType(), request.getResourceSpec().getValueType(), request.getResourceSpec().getKeyParts(), request.getResourceSpec().getComplexKeyType(), version);
Response rsp = new ResponseImpl(responseToBatch, br);
entry.getValue().getPromise().done(rsp);
}
@SuppressWarnings({ "deprecation" })
private void successGet(GetRequest request, Response<BatchKVResponse<K, EntityResponse<RT>>> responseToBatch, final BatchGetEntityRequest<K, RT> batchGet, Entry<RestRequestBatchKey, BatchEntry<Response<Object>>> entry, final ProtocolVersion version) throws RemoteInvocationException {
String idString = BatchResponse.keyToString(request.getObjectId(), version);
Object id = ResponseUtils.convertKey(idString, request.getResourceSpec().getKeyType(), request.getResourceSpec().getKeyParts(), request.getResourceSpec().getComplexKeyType(), version);
Response rsp = unbatchResponse(batchGet, responseToBatch, id);
entry.getValue().getPromise().done(rsp);
}
@Override
public void onError(Throwable e) {
batch.failAll(e);
}
});
}
Aggregations