List of usage examples for io.vertx.core.http HttpClientResponse resume
@Override HttpClientResponse resume();
From source file:org.sfs.nodes.RemoteNode.java
License:Apache License
@Override public Observable<NodeWriteStreamBlob> createWriteStream(final String volumeId, final long length, final MessageDigestFactory... messageDigestFactories) { final XNode _this = this; return Defer.aVoid().flatMap(aVoid -> nodes.connectFirstAvailable(vertx, hostAndPorts, hostAndPort -> { Escaper escaper = urlFragmentEscaper(); StringBuilder urlBuilder = new StringBuilder("http://").append(hostAndPort.toString()); urlBuilder = urlBuilder.append("/_internal_node_data/blob?"); urlBuilder = urlBuilder.append(KEEP_ALIVE_TIMEOUT); urlBuilder = urlBuilder.append('='); urlBuilder = urlBuilder.append(responseTimeout / 2); urlBuilder = urlBuilder.append('&'); urlBuilder = urlBuilder.append(VOLUME); urlBuilder = urlBuilder.append('='); urlBuilder = urlBuilder.append(escaper.escape(volumeId)); if (messageDigestFactories.length > 0) { for (MessageDigestFactory instance : messageDigestFactories) { urlBuilder = urlBuilder.append('&'); urlBuilder = urlBuilder/* w w w . j a va 2 s .c om*/ .append(escaper .escape(format("%s%s", X_CONTENT_COMPUTED_DIGEST_PREFIX, instance.getValue()))) .append('=').append("true"); } } final String url = urlBuilder.toString(); if (LOGGER.isDebugEnabled()) { LOGGER.debug("createWriteStream " + url); } ObservableFuture<HttpClientResponse> handler = RxHelper.observableFuture(); HttpClientRequest httpClientRequest = httpClient.putAbs(url, httpClientResponse -> { httpClientResponse.pause(); handler.complete(httpClientResponse); }).exceptionHandler(handler::fail).putHeader(X_SFS_REMOTE_NODE_TOKEN, remoteNodeSecret) .putHeader(CONTENT_LENGTH, valueOf(length)).setTimeout(responseTimeout); httpClientRequest.sendHead(); return handler.map( httpClientResponse -> new HttpClientRequestAndResponse(httpClientRequest, httpClientResponse)); })).map(httpClientRequestAndResponse -> { HttpClientRequest httpClientRequest = httpClientRequestAndResponse.getRequest(); HttpClientResponse httpClientResponse = httpClientRequestAndResponse.getResponse(); if (HTTP_OK != httpClientResponse.statusCode()) { httpClientResponse.resume(); throw new HttpClientResponseException(httpClientResponse, Buffer.buffer()); } Observable<DigestBlob> oResponse = Defer.just(httpClientResponse) .flatMap(new HttpClientKeepAliveResponseBodyBuffer()).map(new BufferToJsonObject()) .map(jsonObject -> { Integer code = jsonObject.getInteger("code"); if (code == null || HTTP_OK != code) { throw new HttpClientResponseException(httpClientResponse, jsonObject); } return jsonObject; }).map(jsonObject -> { JsonObject blob = jsonObject.getJsonObject("blob"); return new DigestBlob(blob); }); NodeWriteStreamBlob writeStreamBlob = new NodeWriteStreamBlob(_this) { @Override public Observable<DigestBlob> consume(ReadStream<Buffer> src) { return combineSinglesDelayError( pump(src, new HttpClientRequestEndableWriteStream(httpClientRequest)), oResponse, (aVoid1, digestBlob) -> digestBlob); } }; return writeStreamBlob; }); }