observability: change the config parsing to not require logging_config (#9023)
and make Observability implement AutoCloseable
diff --git a/observability/src/main/java/io/grpc/observability/Observability.java b/observability/src/main/java/io/grpc/observability/Observability.java
index f5039ce..a22016f 100644
--- a/observability/src/main/java/io/grpc/observability/Observability.java
+++ b/observability/src/main/java/io/grpc/observability/Observability.java
@@ -29,7 +29,7 @@
/** The main class for gRPC Observability features. */
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8869")
-public final class Observability {
+public final class Observability implements AutoCloseable {
private static Observability instance = null;
private final Sink sink;
@@ -64,10 +64,11 @@
}
/** Un-initialize/shutdown grpc-observability. */
- public void grpcShutdown() {
+ @Override
+ public void close() {
synchronized (Observability.class) {
if (instance == null) {
- throw new IllegalStateException("Observability already shutdown!");
+ throw new IllegalStateException("Observability already closed!");
}
LoggingChannelProvider.shutdown();
LoggingServerProvider.shutdown();
diff --git a/observability/src/main/java/io/grpc/observability/ObservabilityConfigImpl.java b/observability/src/main/java/io/grpc/observability/ObservabilityConfigImpl.java
index 86e60ed..52dbb5b 100644
--- a/observability/src/main/java/io/grpc/observability/ObservabilityConfigImpl.java
+++ b/observability/src/main/java/io/grpc/observability/ObservabilityConfigImpl.java
@@ -43,8 +43,7 @@
@SuppressWarnings("unchecked")
void parse(String config) throws IOException {
checkArgument(config != null, CONFIG_ENV_VAR_NAME + " value is null!");
- parseLoggingConfig(
- JsonUtil.getObject((Map<String, ?>) JsonParser.parse(config), "logging_config"));
+ parseLoggingConfig((Map<String, ?>) JsonParser.parse(config));
}
private void parseLoggingConfig(Map<String,?> loggingConfig) {
diff --git a/observability/src/test/java/io/grpc/observability/ObservabilityConfigImplTest.java b/observability/src/test/java/io/grpc/observability/ObservabilityConfigImplTest.java
index ee29031..5ca24af 100644
--- a/observability/src/test/java/io/grpc/observability/ObservabilityConfigImplTest.java
+++ b/observability/src/test/java/io/grpc/observability/ObservabilityConfigImplTest.java
@@ -31,15 +31,12 @@
@RunWith(JUnit4.class)
public class ObservabilityConfigImplTest {
private static final String EVENT_TYPES = "{\n"
- + " \"logging_config\": {\n"
+ " \"enable_cloud_logging\": false,\n"
+ " \"event_types\": "
+ "[\"GRPC_CALL_REQUEST_HEADER\", \"GRPC_CALL_HALF_CLOSE\", \"GRPC_CALL_TRAILER\"]\n"
- + " }\n"
+ "}";
private static final String LOG_FILTERS = "{\n"
- + " \"logging_config\": {\n"
+ " \"enable_cloud_logging\": true,\n"
+ " \"destination_project_id\": \"grpc-testing\",\n"
+ " \"log_filters\": [{\n"
@@ -51,19 +48,15 @@
+ " \"pattern\": \"service1/Method2\"\n"
+ " }"
+ " ]\n"
- + " }\n"
+ "}";
private static final String DEST_PROJECT_ID = "{\n"
- + " \"logging_config\": {\n"
+ " \"enable_cloud_logging\": true,\n"
+ " \"destination_project_id\": \"grpc-testing\"\n"
- + " }\n"
+ "}";
private static final String DISABLE_CLOUD_LOGGING = "{\n"
- + " \"logging_config\": {\n"
- + " \"enable_cloud_logging\": false\n" + " }\n"
+ + " \"enable_cloud_logging\": false\n"
+ "}";
ObservabilityConfigImpl observabilityConfig = new ObservabilityConfigImpl();
diff --git a/observability/src/test/java/io/grpc/observability/ObservabilityTest.java b/observability/src/test/java/io/grpc/observability/ObservabilityTest.java
index 79273cd..9a72a3d 100644
--- a/observability/src/test/java/io/grpc/observability/ObservabilityTest.java
+++ b/observability/src/test/java/io/grpc/observability/ObservabilityTest.java
@@ -42,23 +42,24 @@
InternalLoggingChannelInterceptor.Factory.class);
InternalLoggingServerInterceptor.Factory serverInterceptorFactory = mock(
InternalLoggingServerInterceptor.Factory.class);
- Observability observability = Observability.grpcInit(sink, channelInterceptorFactory,
- serverInterceptorFactory);
- assertThat(ManagedChannelProvider.provider()).isInstanceOf(LoggingChannelProvider.class);
- assertThat(ServerProvider.provider()).isInstanceOf(ServerProvider.class);
- Observability observability1 = Observability.grpcInit(sink, channelInterceptorFactory,
- serverInterceptorFactory);
- assertThat(observability1).isSameInstanceAs(observability);
+ Observability observability1;
+ try (Observability observability = Observability.grpcInit(sink, channelInterceptorFactory,
+ serverInterceptorFactory)) {
+ assertThat(ManagedChannelProvider.provider()).isInstanceOf(LoggingChannelProvider.class);
+ assertThat(ServerProvider.provider()).isInstanceOf(ServerProvider.class);
+ observability1 = Observability.grpcInit(sink, channelInterceptorFactory,
+ serverInterceptorFactory);
+ assertThat(observability1).isSameInstanceAs(observability);
- observability.grpcShutdown();
+ }
verify(sink).close();
assertThat(ManagedChannelProvider.provider()).isSameInstanceAs(prevChannelProvider);
assertThat(ServerProvider.provider()).isSameInstanceAs(prevServerProvider);
try {
- observability.grpcShutdown();
- fail("should have failed for calling grpcShutdown() second time");
+ observability1.close();
+ fail("should have failed for calling close() second time");
} catch (IllegalStateException e) {
- assertThat(e).hasMessageThat().contains("Observability already shutdown!");
+ assertThat(e).hasMessageThat().contains("Observability already closed!");
}
}
}