This is an automated email from the ASF dual-hosted git repository.
cwylie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 747d9737528 Skip waiting for first lookup version to get initialized
(#15598)
747d9737528 is described below
commit 747d973752843b4f55e2498ecd0034dd5567c953
Author: Pranav <[email protected]>
AuthorDate: Tue Jan 9 13:18:39 2024 -0800
Skip waiting for first lookup version to get initialized (#15598)
---
.../query/lookup/LookupReferencesManager.java | 6 ++++-
.../query/lookup/LookupReferencesManagerTest.java | 30 ++++++++++++++++++++++
2 files changed, 35 insertions(+), 1 deletion(-)
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 03879b0eaea..75ee6caf275 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
@@ -668,7 +668,11 @@ public class LookupReferencesManager implements
LookupExtractorFactoryContainerP
e -> true,
startRetries
);
- if
(lookupExtractorFactoryContainer.getLookupExtractorFactory().isInitialized()) {
+ /*
+ if new container is initailized then add it to manager to start serving
immediately.
+ if old container is null then it is fresh load, we can skip waiting for
initialization and add the container to registry first. Esp for MSQ workers.
+ */
+ if (old == null ||
lookupExtractorFactoryContainer.getLookupExtractorFactory().isInitialized()) {
old = lookupMap.put(lookupName, lookupExtractorFactoryContainer);
LOG.debug("Loaded lookup [%s] with spec [%s].", lookupName,
lookupExtractorFactoryContainer);
manager.dropContainer(old, lookupName);
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 855b761ec16..d004b7780d7 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
@@ -416,6 +416,7 @@ public class LookupReferencesManagerTest
EasyMock.expect(lookupExtractorFactory1.destroy()).andReturn(true).once();
LookupExtractorFactory lookupExtractorFactory2 =
EasyMock.createNiceMock(LookupExtractorFactory.class);
+
EasyMock.expect(lookupExtractorFactory2.isInitialized()).andReturn(true).once();
EasyMock.expect(lookupExtractorFactory2.start()).andReturn(true).once();
EasyMock.replay(lookupExtractorFactory1, lookupExtractorFactory2);
@@ -482,6 +483,35 @@ public class LookupReferencesManagerTest
EasyMock.verify(lookupExtractorFactory1, lookupExtractorFactory2);
}
+ @Test
+ public void testAddingNewContainerImmediatelyWithoutWaiting() throws
Exception
+ {
+ LookupExtractorFactory lookupExtractorFactory1 =
EasyMock.createNiceMock(LookupExtractorFactory.class);
+ EasyMock.expect(lookupExtractorFactory1.start()).andReturn(true).once();
+
EasyMock.expect(lookupExtractorFactory1.isInitialized()).andReturn(false).anyTimes();
+ EasyMock.replay(lookupExtractorFactory1);
+ Map<String, Object> lookupMap = new HashMap<>();
+ String strResult = mapper.writeValueAsString(lookupMap);
+ Request request = new Request(HttpMethod.GET, new
URL("http://localhost:1234/xx"));
+ EasyMock.expect(config.getLookupTier()).andReturn(LOOKUP_TIER).anyTimes();
+ EasyMock.replay(config);
+ EasyMock.expect(druidLeaderClient.makeRequest(
+ HttpMethod.GET,
+ "/druid/coordinator/v1/lookups/config/lookupTier?detailed=true"
+ ))
+ .andReturn(request);
+ StringFullResponseHolder responseHolder = new StringFullResponseHolder(
+ newEmptyResponse(HttpResponseStatus.OK),
+ StandardCharsets.UTF_8
+ ).addChunk(strResult);
+ EasyMock.expect(druidLeaderClient.go(request)).andReturn(responseHolder);
+ EasyMock.replay(druidLeaderClient);
+ lookupReferencesManager.start();
+ lookupReferencesManager.add("testName", new
LookupExtractorFactoryContainer("1", lookupExtractorFactory1));
+ lookupReferencesManager.handlePendingNotices();
+ Assert.assertTrue(lookupReferencesManager.get("testName").isPresent());
+ EasyMock.verify(lookupExtractorFactory1);
+ }
@Test
public void testRemoveNonExisting() throws Exception
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]