diff --git a/server/src/main/java/org/apache/druid/query/lookup/LookupReferencesManager.java b/server/src/main/java/org/apache/druid/query/lookup/LookupReferencesManager.java index 80dd522b0104..ae8a2f41acd8 100644 --- a/server/src/main/java/org/apache/druid/query/lookup/LookupReferencesManager.java +++ b/server/src/main/java/org/apache/druid/query/lookup/LookupReferencesManager.java @@ -282,6 +282,13 @@ public void stop() public void add(String lookupName, LookupExtractorFactoryContainer lookupExtractorFactoryContainer) { Preconditions.checkState(lifecycleLock.awaitStarted(1, TimeUnit.MILLISECONDS)); + final LookupLoadingSpec lookupLoadingSpec = lookupListeningAnnouncerConfig.getLookupLoadingSpec(); + if (lookupLoadingSpec.getMode() == LookupLoadingSpec.Mode.NONE || + (lookupLoadingSpec.getMode() == LookupLoadingSpec.Mode.ONLY_REQUIRED + && !lookupLoadingSpec.getLookupsToLoad().contains(lookupName))) { + LOG.info("Skipping notice to add lookup [%s] since current lookup loading mode [%s] does not allow it.", lookupName, lookupLoadingSpec.getMode()); + return; + } addNotice(new LoadNotice(lookupName, lookupExtractorFactoryContainer, lookupConfig.getLookupStartRetries())); } diff --git a/server/src/test/java/org/apache/druid/query/lookup/LookupReferencesManagerTest.java b/server/src/test/java/org/apache/druid/query/lookup/LookupReferencesManagerTest.java index 992c82022091..d5b179176c67 100644 --- a/server/src/test/java/org/apache/druid/query/lookup/LookupReferencesManagerTest.java +++ b/server/src/test/java/org/apache/druid/query/lookup/LookupReferencesManagerTest.java @@ -46,6 +46,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -849,6 +850,45 @@ public void testCoordinatorLoadSubsetOfLookups() throws Exception Assert.assertFalse(lookupReferencesManager.get("testLookup3").isPresent()); } + @Test + public void testAddWithRequiredLoadingSpec() throws Exception + { + LookupLoadingSpec loadingSpec = LookupLoadingSpec.loadOnly(ImmutableSet.of("testLookup1")); + getLookupMapForSelectiveLoadingOfLookups(loadingSpec); + + LookupExtractorFactoryContainer container2 = new LookupExtractorFactoryContainer( + "0", + new MapLookupExtractorFactory(Map.of("key2", "value2"), true + ) + ); + EasyMock.reset(config); + EasyMock.expect(config.getLookupLoadingSpec()).andReturn(loadingSpec); + EasyMock.replay(config); + lookupReferencesManager.add("testLookup2", container2); + lookupReferencesManager.handlePendingNotices(); + + Assert.assertEquals(Set.of("testLookup1"), lookupReferencesManager.getAllLookupNames()); + } + + @Test + public void testAddWithNoneLoadingSpec() throws Exception + { + getLookupMapForSelectiveLoadingOfLookups(LookupLoadingSpec.NONE); + + LookupExtractorFactoryContainer container = new LookupExtractorFactoryContainer( + "0", + new MapLookupExtractorFactory(Map.of("key2", "value2"), true + ) + ); + EasyMock.reset(config); + EasyMock.expect(config.getLookupLoadingSpec()).andReturn(LookupLoadingSpec.NONE); + EasyMock.replay(config); + lookupReferencesManager.add("testLookup", container); + lookupReferencesManager.handlePendingNotices(); + + Assert.assertTrue(lookupReferencesManager.getAllLookupNames().isEmpty()); + } + @Test public void testLoadLookupOnCoordinatorFailure() throws Exception {