-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Migrate GlobalInterceptors to ConfiguratorRegistry
This should preserve all the existing behavior of GlobalInterceptors as used by grpc-gcp-observability, including it disabling the implicit OpenCensus integration. Both the old and new API are internal. I hid Configurator and ConfiguratorRegistry behind Internal-prefixed classes, like had been done with GlobalInterceptors to further discourage use until the API is ready. GlobalInterceptorsTest was modified to become ConfiguratorRegistryTest.
- Loading branch information
Showing
16 changed files
with
309 additions
and
413 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* | ||
* Copyright 2024 The gRPC Authors | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.grpc; | ||
|
||
/** | ||
* Internal access to Configurator API. | ||
*/ | ||
@Internal | ||
public interface InternalConfigurator extends Configurator {} |
51 changes: 51 additions & 0 deletions
51
api/src/main/java/io/grpc/InternalConfiguratorRegistry.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
/* | ||
* Copyright 2024 The gRPC Authors | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.grpc; | ||
|
||
import java.util.List; | ||
|
||
/** | ||
* Access internal global configurators. | ||
*/ | ||
@Internal | ||
public final class InternalConfiguratorRegistry { | ||
private InternalConfiguratorRegistry() {} | ||
|
||
public static void setConfigurators(List<InternalConfigurator> configurators) { | ||
ConfiguratorRegistry.getDefaultRegistry().setConfigurators(configurators); | ||
} | ||
|
||
public static List<?> getConfigurators() { | ||
return ConfiguratorRegistry.getDefaultRegistry().getConfigurators(); | ||
} | ||
|
||
public static void configureChannelBuilder(ManagedChannelBuilder<?> channelBuilder) { | ||
for (Configurator configurator : ConfiguratorRegistry.getDefaultRegistry().getConfigurators()) { | ||
configurator.configureChannelBuilder(channelBuilder); | ||
} | ||
} | ||
|
||
public static void configureServerBuilder(ServerBuilder<?> serverBuilder) { | ||
for (Configurator configurator : ConfiguratorRegistry.getDefaultRegistry().getConfigurators()) { | ||
configurator.configureServerBuilder(serverBuilder); | ||
} | ||
} | ||
|
||
public static boolean wasSetConfiguratorsCalled() { | ||
return ConfiguratorRegistry.getDefaultRegistry().wasSetConfiguratorsCalled(); | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
100 changes: 100 additions & 0 deletions
100
api/src/test/java/io/grpc/ConfiguratorRegistryTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
/* | ||
* Copyright 2022 The gRPC Authors | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.grpc; | ||
|
||
import static com.google.common.truth.Truth.assertThat; | ||
import static org.junit.Assert.fail; | ||
|
||
import java.util.Arrays; | ||
import java.util.List; | ||
import java.util.regex.Pattern; | ||
import org.junit.Test; | ||
import org.junit.runner.RunWith; | ||
import org.junit.runners.JUnit4; | ||
|
||
@RunWith(JUnit4.class) | ||
public class ConfiguratorRegistryTest { | ||
|
||
private final StaticTestingClassLoader classLoader = | ||
new StaticTestingClassLoader( | ||
getClass().getClassLoader(), Pattern.compile("io\\.grpc\\.[^.]+")); | ||
|
||
@Test | ||
public void setConfigurators() throws Exception { | ||
Class<?> runnable = classLoader.loadClass(StaticTestingClassLoaderSet.class.getName()); | ||
((Runnable) runnable.getDeclaredConstructor().newInstance()).run(); | ||
} | ||
|
||
@Test | ||
public void setGlobalConfigurators_twice() throws Exception { | ||
Class<?> runnable = classLoader.loadClass(StaticTestingClassLoaderSetTwice.class.getName()); | ||
((Runnable) runnable.getDeclaredConstructor().newInstance()).run(); | ||
} | ||
|
||
@Test | ||
public void getBeforeSet() throws Exception { | ||
Class<?> runnable = | ||
classLoader.loadClass( | ||
StaticTestingClassLoaderGetBeforeSet.class.getName()); | ||
((Runnable) runnable.getDeclaredConstructor().newInstance()).run(); | ||
} | ||
|
||
// UsedReflectively | ||
public static final class StaticTestingClassLoaderSet implements Runnable { | ||
@Override | ||
public void run() { | ||
List<Configurator> configurators = Arrays.asList(new NoopConfigurator()); | ||
|
||
ConfiguratorRegistry.getDefaultRegistry().setConfigurators(configurators); | ||
|
||
assertThat(ConfiguratorRegistry.getDefaultRegistry().getConfigurators()) | ||
.isEqualTo(configurators); | ||
} | ||
} | ||
|
||
public static final class StaticTestingClassLoaderSetTwice implements Runnable { | ||
@Override | ||
public void run() { | ||
ConfiguratorRegistry.getDefaultRegistry() | ||
.setConfigurators(Arrays.asList(new NoopConfigurator())); | ||
try { | ||
ConfiguratorRegistry.getDefaultRegistry() | ||
.setConfigurators(Arrays.asList(new NoopConfigurator())); | ||
fail("should have failed for calling setConfigurators() again"); | ||
} catch (IllegalStateException e) { | ||
assertThat(e).hasMessageThat().isEqualTo("Configurators are already set"); | ||
} | ||
} | ||
} | ||
|
||
public static final class StaticTestingClassLoaderGetBeforeSet implements Runnable { | ||
@Override | ||
public void run() { | ||
assertThat(ConfiguratorRegistry.getDefaultRegistry().getConfigurators()).isEmpty(); | ||
|
||
try { | ||
ConfiguratorRegistry.getDefaultRegistry() | ||
.setConfigurators(Arrays.asList(new NoopConfigurator())); | ||
fail("should have failed for invoking set call after get is already called"); | ||
} catch (IllegalStateException e) { | ||
assertThat(e).hasMessageThat().isEqualTo("Configurators are already set"); | ||
} | ||
} | ||
} | ||
|
||
private static class NoopConfigurator implements Configurator {} | ||
} |
Oops, something went wrong.