use of com.couchbase.client.core.deps.io.netty.handler.codec.http.DefaultFullHttpRequest in project couchbase-jvm-clients by couchbase.
the class RawManager method callManagement.
private static Mono<RawManagerResponse> callManagement(final Cluster cluster, final RawManagerRequest request, final RawManagerOptions options) {
final ClusterEnvironment environment = cluster.environment();
final RawManagerOptions.Built opts = options.build();
JsonSerializer serializer = opts.serializer() != null ? opts.serializer() : environment.jsonSerializer();
Duration timeout = opts.timeout().orElse(environment.timeoutConfig().managementTimeout());
RetryStrategy retryStrategy = opts.retryStrategy().orElse(environment.retryStrategy());
final GenericManagerRequest req = new GenericManagerRequest(timeout, cluster.core().context(), retryStrategy, () -> {
FullHttpRequest httpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, request.method(), request.uri());
for (Map.Entry<String, Object> e : opts.httpHeaders().entrySet()) {
httpRequest.headers().set(e.getKey(), e.getValue());
}
return httpRequest;
}, request.method().equals(HttpMethod.GET), null);
cluster.core().send(req);
return Reactor.wrap(req, req.response(), true).map(res -> new RawManagerResponse(request.serviceType(), serializer, res.httpStatus(), res.content()));
}
use of com.couchbase.client.core.deps.io.netty.handler.codec.http.DefaultFullHttpRequest in project couchbase-jvm-clients by couchbase.
the class ViewRequest method encode.
@Override
public FullHttpRequest encode() {
StringBuilder path = new StringBuilder();
path.append("/").append(bucket).append("/_design/");
path.append(development ? "dev_" + design : design);
path.append("/_view/");
path.append(view);
path.append("?").append(query);
ByteBuf content = keysJson.isPresent() ? Unpooled.copiedBuffer(keysJson.get()) : Unpooled.EMPTY_BUFFER;
HttpMethod method = keysJson.isPresent() ? HttpMethod.POST : HttpMethod.GET;
FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, method, path.toString(), content);
request.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON).set(HttpHeaderNames.CONTENT_LENGTH, content.readableBytes()).set(HttpHeaderNames.USER_AGENT, context().environment().userAgent().formattedLong());
authenticator.authHttpRequest(serviceType(), request);
return request;
}
use of com.couchbase.client.core.deps.io.netty.handler.codec.http.DefaultFullHttpRequest in project couchbase-jvm-clients by couchbase.
the class BucketConfigStreamingRequest method encode.
@Override
public FullHttpRequest encode() {
FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, String.format(PATH, bucketName));
authenticator.authHttpRequest(serviceType(), request);
return request;
}
use of com.couchbase.client.core.deps.io.netty.handler.codec.http.DefaultFullHttpRequest in project couchbase-jvm-clients by couchbase.
the class WaitUntilReadyHelper method waitUntilReady.
@Stability.Internal
public static CompletableFuture<Void> waitUntilReady(final Core core, final Set<ServiceType> serviceTypes, final Duration timeout, final ClusterState desiredState, final Optional<String> bucketName) {
final WaitUntilReadyState state = new WaitUntilReadyState();
state.transition(WaitUntilReadyStage.CONFIG_LOAD);
return Flux.interval(Duration.ofMillis(10), core.context().environment().scheduler()).onBackpressureDrop().filter(i -> !(core.configurationProvider().bucketConfigLoadInProgress() || core.configurationProvider().globalConfigLoadInProgress() || (bucketName.isPresent() && core.configurationProvider().collectionRefreshInProgress()) || (bucketName.isPresent() && core.clusterConfig().bucketConfig(bucketName.get()) == null))).filter(i -> {
// created.
if (bucketName.isPresent()) {
state.transition(WaitUntilReadyStage.BUCKET_CONFIG_READY);
BucketConfig bucketConfig = core.clusterConfig().bucketConfig(bucketName.get());
long extNodes = bucketConfig.portInfos().stream().filter(p -> p.ports().containsKey(ServiceType.KV)).count();
long visibleNodes = bucketConfig.nodes().stream().filter(n -> n.services().containsKey(ServiceType.KV)).count();
return extNodes > 0 && extNodes == visibleNodes;
} else {
return true;
}
}).flatMap(i -> {
if (bucketName.isPresent()) {
state.transition(WaitUntilReadyStage.BUCKET_NODES_HEALTHY);
// To avoid tmpfails on the bucket, we double check that all nodes from the nodes list are
// in a healthy status - but for this we need to actually fetch the verbose config, since
// the terse one doesn't have that status in it.
GenericManagerRequest request = new GenericManagerRequest(core.context(), () -> new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/pools/default/buckets/" + bucketName.get()), true, null);
core.send(request);
return Reactor.wrap(request, request.response(), true).filter(response -> {
if (response.status() != ResponseStatus.SUCCESS) {
return false;
}
ObjectNode root = (ObjectNode) Mapper.decodeIntoTree(response.content());
ArrayNode nodes = (ArrayNode) root.get("nodes");
long healthy = StreamSupport.stream(nodes.spliterator(), false).filter(node -> node.get("status").asText().equals("healthy")).count();
return nodes.size() == healthy;
}).map(ignored -> i);
} else {
return Flux.just(i);
}
}).take(1).flatMap(aLong -> {
// to being ready at this point. Bucket level wait until ready is the way to go there.
if (!bucketName.isPresent() && !core.clusterConfig().hasClusterOrBucketConfig()) {
state.transition(WaitUntilReadyStage.COMPLETE);
WaitUntilReadyContext waitUntilReadyContext = new WaitUntilReadyContext(servicesToCheck(core, serviceTypes, bucketName), timeout, desiredState, bucketName, core.diagnostics().collect(Collectors.groupingBy(EndpointDiagnostics::type)), state);
core.context().environment().eventBus().publish(new WaitUntilReadyCompletedEvent(waitUntilReadyContext, WaitUntilReadyCompletedEvent.Reason.CLUSTER_LEVEL_NOT_SUPPORTED));
return Flux.empty();
}
state.transition(WaitUntilReadyStage.PING);
final Flux<ClusterState> diagnostics = Flux.interval(Duration.ofMillis(10), core.context().environment().scheduler()).onBackpressureDrop().map(i -> diagnosticsCurrentState(core)).takeUntil(s -> s == desiredState);
return Flux.concat(ping(core, servicesToCheck(core, serviceTypes, bucketName), timeout, bucketName), diagnostics);
}).then().timeout(timeout, Mono.defer(() -> {
WaitUntilReadyContext waitUntilReadyContext = new WaitUntilReadyContext(servicesToCheck(core, serviceTypes, bucketName), timeout, desiredState, bucketName, core.diagnostics().collect(Collectors.groupingBy(EndpointDiagnostics::type)), state);
CancellationErrorContext errorContext = new CancellationErrorContext(waitUntilReadyContext);
return Mono.error(new UnambiguousTimeoutException("WaitUntilReady timed out", errorContext));
}), core.context().environment().scheduler()).doOnSuccess(unused -> {
state.transition(WaitUntilReadyStage.COMPLETE);
WaitUntilReadyContext waitUntilReadyContext = new WaitUntilReadyContext(servicesToCheck(core, serviceTypes, bucketName), timeout, desiredState, bucketName, core.diagnostics().collect(Collectors.groupingBy(EndpointDiagnostics::type)), state);
core.context().environment().eventBus().publish(new WaitUntilReadyCompletedEvent(waitUntilReadyContext, WaitUntilReadyCompletedEvent.Reason.SUCCESS));
}).toFuture();
}
use of com.couchbase.client.core.deps.io.netty.handler.codec.http.DefaultFullHttpRequest in project couchbase-jvm-clients by couchbase.
the class AnalyticsRequest method encode.
@Override
public FullHttpRequest encode() {
ByteBuf content = Unpooled.wrappedBuffer(query);
FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, URI, content);
request.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON);
request.headers().set(HttpHeaderNames.CONTENT_LENGTH, content.readableBytes());
request.headers().set(HttpHeaderNames.USER_AGENT, context().environment().userAgent().formattedLong());
if (priority != NO_PRIORITY) {
request.headers().set("Analytics-Priority", priority);
}
authenticator.authHttpRequest(serviceType(), request);
return request;
}
Aggregations