Skip to content

Commit 197ac76

Browse files
authored
Better null-safety for check against unsafe catalog configs (#1584)
Better null-safety for check against unsafe catalog configs
1 parent e4287a8 commit 197ac76

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfigurationStore.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,14 @@ public interface PolarisConfigurationStore {
118118
PolarisConfiguration<T> config) {
119119
if (config.hasCatalogConfig() || config.hasCatalogConfigUnsafe()) {
120120
Map<String, String> propertiesMap = catalogEntity.getPropertiesAsMap();
121-
String propertyValue = propertiesMap.get(config.catalogConfig());
121+
String propertyValue = null;
122+
if (config.hasCatalogConfig()) {
123+
propertyValue = propertiesMap.get(config.catalogConfig());
124+
}
122125
if (propertyValue == null) {
123-
propertyValue = propertiesMap.get(config.catalogConfigUnsafe());
126+
if (config.hasCatalogConfigUnsafe()) {
127+
propertyValue = propertiesMap.get(config.catalogConfigUnsafe());
128+
}
124129
if (propertyValue != null) {
125130
LOGGER.warn(
126131
String.format(

quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,16 @@
3030
import org.apache.polaris.core.PolarisCallContext;
3131
import org.apache.polaris.core.PolarisDefaultDiagServiceImpl;
3232
import org.apache.polaris.core.PolarisDiagnostics;
33+
import org.apache.polaris.core.config.FeatureConfiguration;
3334
import org.apache.polaris.core.config.PolarisConfigurationStore;
3435
import org.apache.polaris.core.context.CallContext;
3536
import org.apache.polaris.core.context.RealmContext;
37+
import org.apache.polaris.core.entity.CatalogEntity;
3638
import org.apache.polaris.core.persistence.MetaStoreManagerFactory;
3739
import org.apache.polaris.service.config.DefaultConfigurationStore;
3840
import org.apache.polaris.service.config.FeaturesConfiguration;
3941
import org.apache.polaris.service.persistence.InMemoryPolarisMetaStoreManagerFactory;
42+
import org.assertj.core.api.Assertions;
4043
import org.junit.jupiter.api.BeforeEach;
4144
import org.junit.jupiter.api.Test;
4245
import org.junit.jupiter.api.TestInfo;
@@ -230,4 +233,46 @@ public void testInjectedFeaturesConfiguration() {
230233
assertThat(featuresConfiguration.realmOverrides().get(realmOne).overrides())
231234
.containsKey(falseByDefaultKey);
232235
}
236+
237+
@Test
238+
public void testRegisterAndUseFeatureConfigurations() {
239+
String prefix = "testRegisterAndUseFeatureConfigurations";
240+
241+
FeatureConfiguration<Boolean> safeConfig =
242+
FeatureConfiguration.<Boolean>builder()
243+
.key(String.format("%s_safe", prefix))
244+
.catalogConfig(String.format("polaris.config.%s.safe", prefix))
245+
.defaultValue(true)
246+
.description(prefix)
247+
.buildFeatureConfiguration();
248+
249+
FeatureConfiguration<Boolean> unsafeConfig =
250+
FeatureConfiguration.<Boolean>builder()
251+
.key(String.format("%s_unsafe", prefix))
252+
.catalogConfigUnsafe(String.format("%s.unsafe", prefix))
253+
.defaultValue(true)
254+
.description(prefix)
255+
.buildFeatureConfiguration();
256+
257+
FeatureConfiguration<Boolean> bothConfig =
258+
FeatureConfiguration.<Boolean>builder()
259+
.key(String.format("%s_both", prefix))
260+
.catalogConfig(String.format("polaris.config.%s.both", prefix))
261+
.catalogConfigUnsafe(String.format("%s.both", prefix))
262+
.defaultValue(true)
263+
.description(prefix)
264+
.buildFeatureConfiguration();
265+
266+
CatalogEntity catalog = new CatalogEntity.Builder().build();
267+
268+
Assertions.assertThat(configurationStore.getConfiguration(polarisContext, catalog, safeConfig))
269+
.isTrue();
270+
271+
Assertions.assertThat(
272+
configurationStore.getConfiguration(polarisContext, catalog, unsafeConfig))
273+
.isTrue();
274+
275+
Assertions.assertThat(configurationStore.getConfiguration(polarisContext, catalog, bothConfig))
276+
.isTrue();
277+
}
233278
}

0 commit comments

Comments
 (0)