@Override public ProxyResponse handle(Request request, Response response) { if (response.getStatusCode() == NO_CONTENT.code()) { return new ProxyResponse(response.getHeaders(), new byte[0]); } if (response.getStatusCode() != OK.code()) { throw new ProxyException(format("Bad status code from remote Presto server: %s: %s", response.getStatusCode(), readBody(response))); } String contentType = response.getHeader(CONTENT_TYPE); if (contentType == null) { throw new ProxyException("No Content-Type set in response from remote Presto server"); } if (!MediaType.parse(contentType).is(MEDIA_TYPE_JSON)) { throw new ProxyException("Bad Content-Type from remote Presto server:" + contentType); } try { return new ProxyResponse(response.getHeaders(), toByteArray(response.getInputStream())); } catch (IOException e) { throw new ProxyException("Failed reading response from remote Presto server", e); } }
@Override public Optional<QueryStats> handle(Request request, Response response) { if (response.getStatusCode() == HttpStatus.GONE.code()) { return Optional.empty(); } else if (response.getStatusCode() != HttpStatus.OK.code()) { throw new RuntimeException("unexpected error code " + response.getStatusCode() + "; reason=" + response.getStatusMessage()); } try { JsonNode rootNode = objectMapper.readTree(response.getInputStream()); JsonNode queryStatsNode = rootNode.get("queryStats"); if (queryStatsNode == null) { return Optional.empty(); } QueryStats queryStats = objectMapper.treeToValue(queryStatsNode, QueryStats.class); return Optional.of(queryStats); } catch (IOException e) { throw new UncheckedIOException(e); } } }
@Override public InputStream handle(Request request, io.airlift.http.client.Response response) { try { if (APPLICATION_JSON.equals(response.getHeader(CONTENT_TYPE))) { return response.getInputStream(); } throw new RuntimeException("Response received was not of type " + APPLICATION_JSON); } catch (IOException e) { throw new RuntimeException("Unable to read response from worker", e); } } }
@Override public T handle(Request request, Response response) { if (!successfulResponseCodes.contains(response.getStatusCode())) { return defaultValue; } String contentType = response.getHeader(CONTENT_TYPE); if (contentType != null && !MediaType.parse(contentType).is(MEDIA_TYPE_JSON)) { return defaultValue; } try { return jsonCodec.fromJson(ByteStreams.toByteArray(response.getInputStream())); } catch (Exception e) { return defaultValue; } } }
public UnexpectedResponseException(Request request, Response response) { this(String.format("%d: %s", response.getStatusCode(), response.getStatusMessage()), request, response.getStatusCode(), response.getStatusMessage(), ImmutableListMultimap.copyOf(response.getHeaders())); }
private void cancelQuery(String sql) throws InterruptedException { Stopwatch stopwatch = Stopwatch.createStarted(); while (stopwatch.elapsed(SECONDS) < 30) { String findQuerySql = "SELECT query_id from system.runtime.queries WHERE query = '%s' and state = 'RUNNING' LIMIT 2"; QueryResult queryResult = query(format(findQuerySql, sql)); checkState(queryResult.getRowsCount() < 2, "Query is executed multiple times"); if (queryResult.getRowsCount() == 1) { String queryId = (String) queryResult.row(0).get(0); Response response = queryCanceller.cancel(queryId); Assertions.assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT.code()); return; } MILLISECONDS.sleep(100L); } throw new IllegalStateException("Query did not reach running state or maybe it was too quick."); }
private static String readBody(Response response) { try { return new String(toByteArray(response.getInputStream()), US_ASCII); } catch (IOException e) { return ""; } }
@Override public Void handle(Request request, Response response) throws Exception { // TODO: read server date (to use to calibrate entry dates) if (response.getStatusCode() == 200) { try { List<Entry> entries = mapper.readValue(response.getInputStream(), new TypeReference<List<Entry>>() {}); for (Entry entry : entries) { localStore.put(entry); } } catch (EOFException e) { // ignore } } return null; } });
private static long getToken(Response response) { String tokenHeader = response.getHeader(PRESTO_PAGE_TOKEN); if (tokenHeader == null) { throw new PageTransportErrorException(format("Expected %s header", PRESTO_PAGE_TOKEN)); } return Long.parseLong(tokenHeader); }
@Test public void testResponseHeadersCaseInsensitive() throws Exception { URI uri = baseURI.resolve("/road/to/nowhere"); Request request = prepareGet() .setUri(uri) .build(); Response response = executeRequest(request, new PassThroughResponseHandler()); assertNotNull(response.getHeader("date")); assertNotNull(response.getHeader("DATE")); assertEquals(response.getHeaders("date").size(), 1); assertEquals(response.getHeaders("DATE").size(), 1); }
state.set("DONE"); stats.recordResponseReceived(request.getMethod(), response.getStatusCode(), response.getBytesRead(), response.getBytesRead(), requestProcessingTime, Duration.nanosSince(responseStart));
@Override public String handle(Request request, Response response) throws Exception { return response.getStatusMessage(); } });
@Nullable default String getHeader(String name) { List<String> values = getHeaders(name); return values.isEmpty() ? null : values.get(0); }
@Override public ServiceDescriptors handle(Request request, Response response) { Duration maxAge = extractMaxAge(response); String eTag = response.getHeader(HttpHeaders.ETAG); if (NOT_MODIFIED.code() == response.getStatusCode() && serviceDescriptors != null) { return new ServiceDescriptors(serviceDescriptors, maxAge, eTag); } if (OK.code() != response.getStatusCode()) { throw new DiscoveryException(format("Lookup of %s failed with status code %s", type, response.getStatusCode())); } String json; try { json = CharStreams.toString(new InputStreamReader(response.getInputStream(), Charsets.UTF_8)); } catch (IOException e) { throw new DiscoveryException(format("Lookup of %s failed", type), e); } ServiceDescriptorsRepresentation serviceDescriptorsRepresentation = serviceDescriptorsCodec.fromJson(json); if (!environment.equals(serviceDescriptorsRepresentation.getEnvironment())) { throw new DiscoveryException(format("Expected environment to be %s, but was %s", environment, serviceDescriptorsRepresentation.getEnvironment())); } return new ServiceDescriptors( type, pool, serviceDescriptorsRepresentation.getServiceDescriptors(), maxAge, eTag); } });
@Override public StatusResponse handle(Request request, Response response) { return new StatusResponse(response.getStatusCode(), response.getStatusMessage(), response.getHeaders()); }
@Override public Duration handle(Request request, Response response) throws DiscoveryException { int statusCode = response.getStatusCode(); if (!isSuccess(statusCode)) { throw new DiscoveryException(String.format("Announcement failed with status code %s: %s", statusCode, getBodyForError(response))); } Duration maxAge = extractMaxAge(response); return maxAge; } });
private static String getBodyForError(Response response) { try { return CharStreams.toString(new InputStreamReader(response.getInputStream(), UTF_8)); } catch (IOException e) { return "(error getting body)"; } }
@Override public ClickHouseQueryResult handle(Request request, Response response) throws RuntimeException { if (response.getStatusCode() != 200) { try { String message = CharStreams.toString(new InputStreamReader(response.getInputStream())); message = message.split(", Stack trace:\n", 2)[0]; throw new RakamException(message, BAD_GATEWAY); } catch (IOException e) { throw new RakamException("An error occurred", BAD_GATEWAY); } } try { return JsonHelper.read(response.getInputStream(), ClickHouseQueryResult.class); } catch (IOException e) { LOGGER.error(e, "An error occurred while reading query results"); throw new RakamException("An error occurred while reading query results: " + e.getMessage(), INTERNAL_SERVER_ERROR); } } }
private static boolean getComplete(Response response) { String bufferComplete = response.getHeader(PRESTO_BUFFER_COMPLETE); if (bufferComplete == null) { throw new PageTransportErrorException(format("Expected %s header", PRESTO_BUFFER_COMPLETE)); } return Boolean.parseBoolean(bufferComplete); }
@Override public InputStream handle(Request request, io.airlift.http.client.Response response) { try { if (APPLICATION_JSON.equals(response.getHeader(CONTENT_TYPE))) { return response.getInputStream(); } throw new RuntimeException("Response received was not of type " + APPLICATION_JSON); } catch (IOException e) { throw new RuntimeException("Unable to read response from worker", e); } } }