diff --git a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcClientInterceptorContainer.java b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcClientInterceptorContainer.java index 04292fb062e68..36ba69c293f5a 100644 --- a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcClientInterceptorContainer.java +++ b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcClientInterceptorContainer.java @@ -14,9 +14,9 @@ @ApplicationScoped public class GrpcClientInterceptorContainer { - // Cannot be empty, as we have the IO Thread client interceptor - @Any + @Inject + @Any Instance interceptors; public List getSortedInterceptors() { diff --git a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcContainer.java b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcContainer.java index 13b8646c64c28..84d46904ce483 100644 --- a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcContainer.java +++ b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcContainer.java @@ -6,6 +6,7 @@ import java.util.stream.Collectors; import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.enterprise.inject.spi.Prioritized; import javax.inject.Inject; @@ -13,7 +14,6 @@ import io.grpc.BindableService; import io.grpc.ServerInterceptor; import io.quarkus.grpc.GrpcService; -import io.quarkus.grpc.runtime.health.GrpcHealthStorage; @ApplicationScoped public class GrpcContainer { @@ -23,11 +23,9 @@ public class GrpcContainer { Instance services; @Inject + @Any Instance interceptors; - @Inject - Instance healthStorage; - List getSortedInterceptors() { if (interceptors.isUnsatisfied()) { return Collections.emptyList(); @@ -52,10 +50,6 @@ public int compare(ServerInterceptor si1, ServerInterceptor si2) { }).collect(Collectors.toList()); } - public Instance getHealthStorage() { - return healthStorage; - } - public Instance getServices() { return services; } diff --git a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcServerRecorder.java b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcServerRecorder.java index 954ee6fea7252..287eb3a0593d0 100644 --- a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcServerRecorder.java +++ b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/GrpcServerRecorder.java @@ -123,7 +123,7 @@ public void handle(AsyncResult result) { if (result.failed()) { startResult.completeExceptionally(result.cause()); } else { - GrpcServerRecorder.this.postStartup(grpcContainer, configuration, launchMode == LaunchMode.TEST); + GrpcServerRecorder.this.postStartup(configuration, launchMode == LaunchMode.TEST); startResult.complete(null); } @@ -142,27 +142,22 @@ public void handle(AsyncResult result) { } } - private void postStartup(GrpcContainer grpcContainer, GrpcServerConfiguration configuration, boolean test) { - grpcContainer.getHealthStorage().stream().forEach(new Consumer() { //NOSONAR - @Override - public void accept(GrpcHealthStorage storage) { - storage.setStatus(GrpcHealthStorage.DEFAULT_SERVICE_NAME, - HealthOuterClass.HealthCheckResponse.ServingStatus.SERVING); - grpcContainer.getServices().forEach( - new Consumer() { // NOSONAR - @Override - public void accept(BindableService service) { - ServerServiceDefinition definition = service.bindService(); - storage.setStatus(definition.getServiceDescriptor().getName(), - HealthOuterClass.HealthCheckResponse.ServingStatus.SERVING); - } - }); - } - }); + private void postStartup(GrpcServerConfiguration configuration, boolean test) { + initHealthStorage(); LOGGER.infof("gRPC Server started on %s:%d [SSL enabled: %s]", configuration.host, test ? configuration.testPort : configuration.port, !configuration.plainText); } + private void initHealthStorage() { + GrpcHealthStorage storage = Arc.container().instance(GrpcHealthStorage.class).get(); + storage.setStatus(GrpcHealthStorage.DEFAULT_SERVICE_NAME, + HealthOuterClass.HealthCheckResponse.ServingStatus.SERVING); + for (GrpcServiceDefinition service : services) { + storage.setStatus(service.definition.getServiceDescriptor().getName(), + HealthOuterClass.HealthCheckResponse.ServingStatus.SERVING); + } + } + private void devModeStart(GrpcContainer grpcContainer, Vertx vertx, GrpcServerConfiguration configuration, ShutdownContext shutdown, LaunchMode launchMode) { CompletableFuture future = new CompletableFuture<>(); @@ -177,7 +172,7 @@ public void handle(AsyncResult ar) { LOGGER.error("Unable to start the gRPC server", ar.cause()); future.completeExceptionally(ar.cause()); } else { - postStartup(grpcContainer, configuration, false); + postStartup(configuration, false); future.complete(true); grpcVerticleCount.incrementAndGet(); } @@ -301,6 +296,8 @@ private void devModeReload(GrpcContainer grpcContainer, Vertx vertx, GrpcServerC } devModeWrapper = new DevModeWrapper(Thread.currentThread().getContextClassLoader()); + initHealthStorage(); + GrpcServerReloader.reinitialize(servicesWithInterceptors, methods, grpcContainer.getSortedInterceptors()); } diff --git a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/devmode/GrpcServices.java b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/devmode/GrpcServices.java index a6bfc5b2fe6fa..9227e86e6aa21 100644 --- a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/devmode/GrpcServices.java +++ b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/devmode/GrpcServices.java @@ -32,12 +32,13 @@ public class GrpcServices extends AbstractMap getInfos() { - List services = new ArrayList<>(GrpcServerRecorder.getServices().size()); - for (GrpcServiceDefinition definition : GrpcServerRecorder.getServices()) { - services.add(new ServiceDefinitionAndStatus(definition, healthStorage.getStatuses() - .getOrDefault(definition.definition.getServiceDescriptor().getName(), ServingStatus.UNKNOWN))); + List services = GrpcServerRecorder.getServices(); + List infos = new ArrayList<>(services.size()); + for (GrpcServiceDefinition service : services) { + infos.add(new ServiceDefinitionAndStatus(service, healthStorage.getStatuses() + .getOrDefault(service.definition.getServiceDescriptor().getName(), ServingStatus.UNKNOWN))); } - return services; + return infos; } @Override