use of com.facebook.airlift.http.client.Request in project presto by prestodb.
the class DruidClient method getSingleSegmentInfo.
public DruidSegmentInfo getSingleSegmentInfo(String dataSource, String segmentId) {
URI uri = uriBuilderFrom(druidCoordinator).replacePath(METADATA_PATH).appendPath(format("datasources/%s/segments/%s", dataSource, segmentId)).build();
Request request = setContentTypeHeaders(prepareGet()).setUri(uri).build();
return httpClient.execute(request, createJsonResponseHandler(SEGMENT_INFO_CODEC));
}
use of com.facebook.airlift.http.client.Request in project presto by prestodb.
the class HttpRemoteNodeState method asyncRefresh.
@Override
public synchronized void asyncRefresh() {
Duration sinceUpdate = nanosSince(lastUpdateNanos.get());
if (nanosSince(lastWarningLogged.get()).toMillis() > 1_000 && sinceUpdate.toMillis() > 10_000 && future.get() != null) {
log.warn("Node state update request to %s has not returned in %s", stateInfoUri, sinceUpdate.toString(SECONDS));
lastWarningLogged.set(System.nanoTime());
}
if (sinceUpdate.toMillis() > 1_000 && future.get() == null) {
Request request = prepareGet().setUri(stateInfoUri).setHeader(CONTENT_TYPE, JSON_UTF_8.toString()).build();
HttpResponseFuture<JsonResponse<NodeState>> responseFuture = httpClient.executeAsync(request, createFullJsonResponseHandler(jsonCodec(NodeState.class)));
future.compareAndSet(null, responseFuture);
Futures.addCallback(responseFuture, new FutureCallback<JsonResponse<NodeState>>() {
@Override
public void onSuccess(@Nullable JsonResponse<NodeState> result) {
lastUpdateNanos.set(System.nanoTime());
future.compareAndSet(responseFuture, null);
if (result != null) {
if (result.hasValue()) {
nodeState.set(Optional.ofNullable(result.getValue()));
}
if (result.getStatusCode() != OK.code()) {
log.warn("Error fetching node state from %s returned status %d: %s", stateInfoUri, result.getStatusCode(), result.getStatusMessage());
return;
}
}
}
@Override
public void onFailure(Throwable t) {
log.warn("Error fetching node state from %s: %s", stateInfoUri, t.getMessage());
lastUpdateNanos.set(System.nanoTime());
future.compareAndSet(responseFuture, null);
}
}, directExecutor());
}
}
use of com.facebook.airlift.http.client.Request in project presto by prestodb.
the class ContinuousTaskStatusFetcher method scheduleNextRequest.
private synchronized void scheduleNextRequest() {
// stopped or done?
TaskStatus taskStatus = getTaskStatus();
if (!running || taskStatus.getState().isDone()) {
return;
}
// outstanding request?
if (future != null && !future.isDone()) {
// this should never happen
log.error("Can not reschedule update because an update is already running");
return;
}
// if throttled due to error, asynchronously wait for timeout and try again
ListenableFuture<?> errorRateLimit = errorTracker.acquireRequestPermit();
if (!errorRateLimit.isDone()) {
errorRateLimit.addListener(this::scheduleNextRequest, executor);
return;
}
Request.Builder requestBuilder;
ResponseHandler responseHandler;
if (thriftTransportEnabled) {
requestBuilder = ThriftRequestUtils.prepareThriftGet(thriftProtocol);
responseHandler = new ThriftResponseHandler(unwrapThriftCodec(taskStatusCodec));
} else if (binaryTransportEnabled) {
requestBuilder = getBinaryTransportBuilder(prepareGet());
responseHandler = createFullSmileResponseHandler((SmileCodec<TaskStatus>) taskStatusCodec);
} else {
requestBuilder = getJsonTransportBuilder(prepareGet());
responseHandler = createAdaptingJsonResponseHandler((JsonCodec<TaskStatus>) taskStatusCodec);
}
Request request = requestBuilder.setUri(uriBuilderFrom(taskStatus.getSelf()).appendPath("status").build()).setHeader(PRESTO_CURRENT_STATE, taskStatus.getState().toString()).setHeader(PRESTO_MAX_WAIT, refreshMaxWait.toString()).build();
errorTracker.startRequest();
future = httpClient.executeAsync(request, responseHandler);
currentRequestStartNanos.set(System.nanoTime());
FutureCallback callback;
if (thriftTransportEnabled) {
callback = new ThriftHttpResponseHandler(this, request.getUri(), stats.getHttpResponseStats(), REMOTE_TASK_ERROR);
} else {
callback = new SimpleHttpResponseHandler<>(this, request.getUri(), stats.getHttpResponseStats(), REMOTE_TASK_ERROR);
}
Futures.addCallback(future, callback, executor);
}
use of com.facebook.airlift.http.client.Request in project presto by prestodb.
the class HttpRemoteTask method removeRemoteSource.
@Override
public ListenableFuture<?> removeRemoteSource(TaskId remoteSourceTaskId) {
URI remoteSourceUri = uriBuilderFrom(taskLocation).appendPath("remote-source").appendPath(remoteSourceTaskId.toString()).build();
Request request = prepareDelete().setUri(remoteSourceUri).build();
RequestErrorTracker errorTracker = taskRequestErrorTracker(taskId, remoteSourceUri, maxErrorDuration, errorScheduledExecutor, "Remove exchange remote source");
SettableFuture<?> future = SettableFuture.create();
doRemoveRemoteSource(errorTracker, request, future);
return future;
}
use of com.facebook.airlift.http.client.Request in project presto by prestodb.
the class HttpRemoteTask method abort.
private synchronized void abort(TaskStatus status) {
checkState(status.getState().isDone(), "cannot abort task with an incomplete status");
try (SetThreadName ignored = new SetThreadName("HttpRemoteTask-%s", taskId)) {
taskStatusFetcher.updateTaskStatus(status);
// send abort to task
HttpUriBuilder uriBuilder = getHttpUriBuilder(getTaskStatus());
Request request = setContentTypeHeaders(binaryTransportEnabled, prepareDelete()).setUri(uriBuilder.build()).build();
scheduleAsyncCleanupRequest(createCleanupBackoff(), request, "abort");
}
}
Aggregations