@POST @Path("/v1/statement") @Produces(APPLICATION_JSON) public void postStatement( String statement, @Context HttpServletRequest servletRequest, @Context UriInfo uriInfo, @Suspended AsyncResponse asyncResponse) { Request.Builder request = preparePost() .setUri(uriBuilderFrom(remoteUri).replacePath("/v1/statement").build()) .setBodyGenerator(createStaticBodyGenerator(statement, UTF_8)); performRequest(servletRequest, asyncResponse, request, response -> buildResponse(uriInfo, response)); }
Request request = preparePost() .setUri(uriBuilder.build()) .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.JSON_UTF_8.toString())
Request request = preparePost() .setUri(uriFor("/v1/statement")) .setBodyGenerator(createStaticBodyGenerator("show catalogs", UTF_8))
@Override public <T> ListenableFuture<Void> post(EventGenerator<T> eventGenerator) { requireNonNull(eventGenerator, "eventGenerator is null"); List<URI> uris = serviceSelector.selectHttpService(); if (uris.isEmpty()) { return immediateFailedFuture(new ServiceUnavailableException(serviceSelector.getType(), serviceSelector.getPool())); } // todo this doesn't really work due to returning the future which can fail without being retried Request request = preparePost() .setUri(uris.get(0).resolve("/v2/event")) .setHeader("User-Agent", nodeInfo.getNodeId()) .setHeader("Content-Type", MEDIA_TYPE_JSON.toString()) .setBodyGenerator(new JsonEntityWriter<>(eventWriter, eventGenerator)) .build(); return httpClient.executeAsync(request, new EventResponseHandler(serviceSelector.getType(), serviceSelector.getPool())); }
@Test public void testNoTransactionSupport() { Request request = preparePost() .setUri(uriFor("/v1/statement")) .setBodyGenerator(createStaticBodyGenerator("start transaction", UTF_8)) .setHeader(PRESTO_USER, "user") .setHeader(PRESTO_SOURCE, "source") .build(); QueryResults queryResults = client.execute(request, createJsonResponseHandler(QUERY_RESULTS_CODEC)); while (queryResults.getNextUri() != null) { queryResults = client.execute(prepareGet().setUri(queryResults.getNextUri()).build(), createJsonResponseHandler(QUERY_RESULTS_CODEC)); } assertNotNull(queryResults.getError()); assertEquals(queryResults.getError().getErrorCode(), INCOMPATIBLE_CLIENT.toErrorCode().getCode()); }
@Override public List<SlotStatusRepresentation> upgrade(SlotFilter slotFilter, UpgradeVersions upgradeVersions, String expectedVersion, boolean force) { URI uri = slotFilter.toUri(uriBuilderFrom(coordinatorUri).replacePath("/v1/slot/assignment")); Request.Builder requestBuilder = Request.Builder.preparePost() .setUri(uri) .setHeader("Content-Type", "application/json") .setBodyGenerator(jsonBodyGenerator(UPGRADE_VERSIONS_CODEC, upgradeVersions)); if (expectedVersion != null) { requestBuilder.setHeader(AIRSHIP_SLOTS_VERSION_HEADER, expectedVersion); } if (force) { requestBuilder.setHeader(AIRSHIP_FORCE_HEADER, "true"); } List<SlotStatusRepresentation> slots = client.execute(requestBuilder.build(), createJsonResponseHandler(SLOTS_CODEC)); return slots; }
@Override public <T> ListenableFuture<Void> post(EventGenerator<T> eventGenerator) { checkNotNull(eventGenerator, "eventGenerator is null"); List<URI> uris = serviceSelector.selectHttpService(); if (uris.isEmpty()) { return Futures.<Void, RuntimeException>immediateFailedCheckedFuture(new ServiceUnavailableException(serviceSelector.getType(), serviceSelector.getPool())); } // todo this doesn't really work due to returning the future which can fail without being retried Request request = preparePost() .setUri(uris.get(0).resolve("/v2/event")) .setHeader("User-Agent", nodeInfo.getNodeId()) .setHeader("Content-Type", MEDIA_TYPE_JSON.toString()) .setBodyGenerator(new JsonEntityWriter<>(eventWriter, eventGenerator)) .build(); return httpClient.executeAsync(request, new EventResponseHandler(serviceSelector.getType(), serviceSelector.getPool())); }
@Override public <T> CheckedFuture<Void, RuntimeException> post(EventGenerator<T> eventGenerator) { checkNotNull(eventGenerator, "eventGenerator is null"); List<URI> uris = serviceSelector.selectHttpService(); if (uris.isEmpty()) { return Futures.<Void, RuntimeException>immediateFailedCheckedFuture(new ServiceUnavailableException(serviceSelector.getType(), serviceSelector.getPool())); } // todo this doesn't really work due to returning the future which can fail without being retried Request request = preparePost() .setUri(uris.get(0).resolve("/v2/event")) .setHeader("User-Agent", nodeInfo.getNodeId()) .setHeader("Content-Type", MEDIA_TYPE_JSON.toString()) .setBodyGenerator(new JsonEntityWriter<T>(eventWriter, eventGenerator)) .build(); return httpClient.executeAsync(request, new EventResponseHandler(serviceSelector.getType(), serviceSelector.getPool())); }
@Test public void testNoTransactionSupport() { Request request = preparePost() .setUri(uriFor("/v1/statement")) .setBodyGenerator(createStaticBodyGenerator("start transaction", UTF_8)) .setHeader(PRESTO_USER, "user") .setHeader(PRESTO_SOURCE, "source") .build(); QueryResults queryResults = client.execute(request, createJsonResponseHandler(QUERY_RESULTS_CODEC)); while (queryResults.getNextUri() != null) { queryResults = client.execute(prepareGet().setUri(queryResults.getNextUri()).build(), createJsonResponseHandler(QUERY_RESULTS_CODEC)); } assertNotNull(queryResults.getError()); assertEquals(queryResults.getError().getErrorCode(), INCOMPATIBLE_CLIENT.toErrorCode().getCode()); }
@Override public List<SlotStatusRepresentation> install(AgentFilter agentFilter, int count, Assignment assignment, String expectedVersion) { URI uri = agentFilter.toUri(uriBuilderFrom(coordinatorUri).replacePath("/v1/slot").addParameter("limit", String.valueOf(count))); Request.Builder requestBuilder = Request.Builder.preparePost() .setUri(uri) .setHeader("Content-Type", "application/json") .setBodyGenerator(jsonBodyGenerator(ASSIGNMENT_CODEC, AssignmentRepresentation.from(assignment))); if (expectedVersion != null) { requestBuilder.setHeader(AIRSHIP_SLOTS_VERSION_HEADER, expectedVersion); } List<SlotStatusRepresentation> slots = client.execute(requestBuilder.build(), createJsonResponseHandler(SLOTS_CODEC)); return slots; }
@Override public List<SlotStatusRepresentation> install(AgentFilter agentFilter, int count, Assignment assignment, String expectedVersion) { URI uri = agentFilter.toUri(uriBuilderFrom(coordinatorUri).replacePath("/v1/slot").addParameter("limit", String.valueOf(count))); Request.Builder requestBuilder = Request.Builder.preparePost() .setUri(uri) .setHeader("Content-Type", "application/json") .setBodyGenerator(jsonBodyGenerator(ASSIGNMENT_CODEC, AssignmentRepresentation.from(assignment))); if (expectedVersion != null) { requestBuilder.setHeader(AIRSHIP_SLOTS_VERSION_HEADER, expectedVersion); } List<SlotStatusRepresentation> slots = client.execute(requestBuilder.build(), createJsonResponseHandler(SLOTS_CODEC)); return slots; }
@Test public void testPostNotAllowed() throws IOException, ExecutionException, InterruptedException { String json = Resources.toString(Resources.getResource("single.json"), UTF_8); StatusResponse response = client.execute( preparePost() .setUri(uriFor("/v1/person/foo")) .addHeader(CONTENT_TYPE, APPLICATION_JSON) .setBodyGenerator(createStaticBodyGenerator(json, UTF_8)) .build(), createStatusResponseHandler()); assertEquals(response.getStatusCode(), NOT_ALLOWED); assertNull(store.get("foo")); }
@POST @Path("/v1/statement") @Produces(APPLICATION_JSON) public void postStatement( String statement, @Context HttpServletRequest servletRequest, @Context UriInfo uriInfo, @Suspended AsyncResponse asyncResponse) { Request.Builder request = preparePost() .setUri(uriBuilderFrom(remoteUri).replacePath("/v1/statement").build()) .setBodyGenerator(createStaticBodyGenerator(statement, UTF_8)); performRequest(servletRequest, asyncResponse, request, response -> buildResponse(uriInfo, response)); }
private StringResponse executeQuery(String query) { Request request = preparePost() .setUri(server.resolve("/v1/execute")) .setHeader(PrestoHeaders.PRESTO_USER, "test") .setHeader(PrestoHeaders.PRESTO_CATALOG, "catalog") .setHeader(PrestoHeaders.PRESTO_SCHEMA, "schema") .setHeader(PrestoHeaders.PRESTO_TIME_ZONE, "UTC") .setBodyGenerator(createStaticBodyGenerator(query, UTF_8)) .build(); return client.execute(request, createStringResponseHandler()); } }
.build(); Request request = preparePost() .setUri(uri) .setHeader(CONTENT_TYPE, JSON_UTF_8.toString())
@BeforeClass public void setup() { Request request1 = preparePost() .setUri(uriBuilderFrom(server.getBaseUrl()).replacePath("/v1/statement").build()) .setBodyGenerator(createStaticBodyGenerator(LONG_LASTING_QUERY, UTF_8)) .setHeader(PRESTO_USER, "user1") .build(); queryResults = client.execute(request1, createJsonResponseHandler(QUERY_RESULTS_JSON_CODEC)); client.execute(prepareGet().setUri(queryResults.getNextUri()).build(), createJsonResponseHandler(QUERY_RESULTS_JSON_CODEC)); Request request2 = preparePost() .setUri(uriBuilderFrom(server.getBaseUrl()).replacePath("/v1/statement").build()) .setBodyGenerator(createStaticBodyGenerator(LONG_LASTING_QUERY, UTF_8)) .setHeader(PRESTO_USER, "user2") .build(); QueryResults queryResults2 = client.execute(request2, createJsonResponseHandler(jsonCodec(QueryResults.class))); client.execute(prepareGet().setUri(queryResults2.getNextUri()).build(), createJsonResponseHandler(QUERY_RESULTS_JSON_CODEC)); // queries are started in the background, so they may not all be immediately visible while (true) { List<BasicQueryInfo> queryInfos = client.execute( prepareGet().setUri(uriBuilderFrom(server.getBaseUrl()).replacePath("/v1/query").build()).build(), createJsonResponseHandler(listJsonCodec(BasicQueryInfo.class))); if ((queryInfos.size() == 2) && queryInfos.stream().allMatch(info -> info.getState() == RUNNING)) { break; } } }
@Test public void testInvalidSessionError() { String invalidTimeZone = "this_is_an_invalid_time_zone"; Request request = preparePost().setHeader(PRESTO_USER, "user") .setUri(uriFor("/v1/statement")) .setBodyGenerator(createStaticBodyGenerator("show catalogs", UTF_8)) .setHeader(PRESTO_SOURCE, "source") .setHeader(PRESTO_CATALOG, "catalog") .setHeader(PRESTO_SCHEMA, "schema") .setHeader(PRESTO_PATH, "path") .setHeader(PRESTO_TIME_ZONE, invalidTimeZone) .build(); QueryResults queryResults = client.execute(request, createJsonResponseHandler(QUERY_RESULTS_CODEC)); while (queryResults.getNextUri() != null) { queryResults = client.execute(prepareGet().setUri(queryResults.getNextUri()).build(), createJsonResponseHandler(QUERY_RESULTS_CODEC)); } QueryError queryError = queryResults.getError(); assertNotNull(queryError); TimeZoneNotSupportedException expected = new TimeZoneNotSupportedException(invalidTimeZone); assertEquals(queryError.getErrorCode(), expected.getErrorCode().getCode()); assertEquals(queryError.getErrorName(), expected.getErrorCode().getName()); assertEquals(queryError.getErrorType(), expected.getErrorCode().getType().name()); assertEquals(queryError.getMessage(), expected.getMessage()); }
@Test public void testTransactionSupport() { Request request = preparePost() .setUri(uriFor("/v1/statement")) .setBodyGenerator(createStaticBodyGenerator("start transaction", UTF_8)) .setHeader(PRESTO_USER, "user") .setHeader(PRESTO_SOURCE, "source") .setHeader(PRESTO_TRANSACTION_ID, "none") .build(); JsonResponse<QueryResults> queryResults = client.execute(request, createFullJsonResponseHandler(QUERY_RESULTS_CODEC)); ImmutableList.Builder<List<Object>> data = ImmutableList.builder(); while (true) { if (queryResults.getValue().getData() != null) { data.addAll(queryResults.getValue().getData()); } if (queryResults.getValue().getNextUri() == null) { break; } queryResults = client.execute(prepareGet().setUri(queryResults.getValue().getNextUri()).build(), createFullJsonResponseHandler(QUERY_RESULTS_CODEC)); } assertNull(queryResults.getValue().getError()); assertNotNull(queryResults.getHeader(PRESTO_STARTED_TRANSACTION_ID)); }
private void runToCompletion(String sql) { URI uri = uriBuilderFrom(server.getBaseUrl().resolve("/v1/statement")).build(); Request request = preparePost() .setHeader(PRESTO_USER, "user") .setUri(uri) .setBodyGenerator(createStaticBodyGenerator(sql, UTF_8)) .build(); QueryResults queryResults = client.execute(request, createJsonResponseHandler(jsonCodec(QueryResults.class))); while (queryResults.getNextUri() != null) { request = prepareGet() .setHeader(PRESTO_USER, "user") .setUri(queryResults.getNextUri()) .build(); queryResults = client.execute(request, createJsonResponseHandler(jsonCodec(QueryResults.class))); } }
@Test public void testNoTransactionSupport() { Request request = preparePost() .setUri(uriFor("/v1/statement")) .setBodyGenerator(createStaticBodyGenerator("start transaction", UTF_8)) .setHeader(PRESTO_USER, "user") .setHeader(PRESTO_SOURCE, "source") .build(); QueryResults queryResults = client.execute(request, createJsonResponseHandler(QUERY_RESULTS_CODEC)); while (queryResults.getNextUri() != null) { queryResults = client.execute(prepareGet().setUri(queryResults.getNextUri()).build(), createJsonResponseHandler(QUERY_RESULTS_CODEC)); } assertNotNull(queryResults.getError()); assertEquals(queryResults.getError().getErrorCode(), INCOMPATIBLE_CLIENT.toErrorCode().getCode()); }