You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by fj...@apache.org on 2019/02/08 19:06:09 UTC

[incubator-druid] branch master updated: Add an api to get all lookup specs (#7025)

This is an automated email from the ASF dual-hosted git repository.

fjy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new d42de57  Add an api to get all lookup specs (#7025)
d42de57 is described below

commit d42de574d66c6188ec10a3e0acd6a3d8694b9463
Author: Jihoon Son <ji...@apache.org>
AuthorDate: Fri Feb 8 11:05:59 2019 -0800

    Add an api to get all lookup specs (#7025)
    
    * Add an api to get all lookup specs
    
    * add doc
---
 docs/content/querying/lookups.md                   |  5 +-
 .../server/http/LookupCoordinatorResource.java     | 50 +++++++++++++----
 .../server/http/LookupCoordinatorResourceTest.java | 65 ++++++++++++++++++++++
 3 files changed, 109 insertions(+), 11 deletions(-)

diff --git a/docs/content/querying/lookups.md b/docs/content/querying/lookups.md
index 7c7ad81..14d9fe2 100644
--- a/docs/content/querying/lookups.md
+++ b/docs/content/querying/lookups.md
@@ -260,8 +260,11 @@ For example, a post to `/druid/coordinator/v1/lookups/config/realtime_customer1/
 
 This will replace the `site_id_customer1` lookup in the `realtime_customer1` with the definition above.
 
+## Get All Lookups
+A `GET` to `/druid/coordinator/v1/lookups/config/all` will return all known lookup specs for all tiers.
+
 ## Get Lookup
-A `GET` to a particular lookup extractor factory is accomplished via `/druid/coordinator/v1/lookups/{tier}/{id}`
+A `GET` to a particular lookup extractor factory is accomplished via `/druid/coordinator/v1/lookups/config/{tier}/{id}`
 
 Using the prior example, a `GET` to `/druid/coordinator/v1/lookups/config/realtime_customer2/site_id_customer2` should return
 
diff --git a/server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java b/server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java
index 90e5694..b79acea 100644
--- a/server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java
+++ b/server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java
@@ -100,7 +100,8 @@ public class LookupCoordinatorResource
       if (discover) {
         return Response.ok().entity(lookupCoordinatorManager.discoverTiers()).build();
       }
-      final Map<String, Map<String, LookupExtractorFactoryMapContainer>> knownLookups = lookupCoordinatorManager.getKnownLookups();
+      final Map<String, Map<String, LookupExtractorFactoryMapContainer>> knownLookups = lookupCoordinatorManager
+          .getKnownLookups();
       if (knownLookups == null) {
         return Response.status(Response.Status.NOT_FOUND).build();
       } else {
@@ -113,6 +114,26 @@ public class LookupCoordinatorResource
     }
   }
 
+  @GET
+  @Produces({MediaType.APPLICATION_JSON})
+  @Path("/config/all")
+  public Response getAllLookupSpecs()
+  {
+    try {
+      final Map<String, Map<String, LookupExtractorFactoryMapContainer>> knownLookups = lookupCoordinatorManager
+          .getKnownLookups();
+      if (knownLookups == null) {
+        return Response.status(Response.Status.NOT_FOUND).build();
+      } else {
+        return Response.ok().entity(knownLookups).build();
+      }
+    }
+    catch (Exception ex) {
+      LOG.error(ex, "Error getting lookups status");
+      return Response.serverError().entity(ServletResourceUtils.sanitizeException(ex)).build();
+    }
+  }
+
   @POST
   @Path("/config")
   @Produces({MediaType.APPLICATION_JSON, SmileMediaTypes.APPLICATION_JACKSON_SMILE})
@@ -314,14 +335,16 @@ public class LookupCoordinatorResource
   )
   {
     try {
-      Map<String, Map<String, LookupExtractorFactoryMapContainer>> configuredLookups = lookupCoordinatorManager.getKnownLookups();
+      Map<String, Map<String, LookupExtractorFactoryMapContainer>> configuredLookups = lookupCoordinatorManager
+          .getKnownLookups();
       if (configuredLookups == null) {
         return Response.status(Response.Status.NOT_FOUND)
                        .entity(ServletResourceUtils.jsonize("No lookups found"))
                        .build();
       }
 
-      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnNodes = lookupCoordinatorManager.getLastKnownLookupsStateOnNodes();
+      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnNodes = lookupCoordinatorManager
+          .getLastKnownLookupsStateOnNodes();
 
       Map<String, Map<String, LookupStatus>> result = new HashMap<>();
 
@@ -362,7 +385,8 @@ public class LookupCoordinatorResource
   )
   {
     try {
-      Map<String, Map<String, LookupExtractorFactoryMapContainer>> configuredLookups = lookupCoordinatorManager.getKnownLookups();
+      Map<String, Map<String, LookupExtractorFactoryMapContainer>> configuredLookups = lookupCoordinatorManager
+          .getKnownLookups();
       if (configuredLookups == null) {
         return Response.status(Response.Status.NOT_FOUND)
                        .entity(ServletResourceUtils.jsonize("No lookups found"))
@@ -380,7 +404,8 @@ public class LookupCoordinatorResource
       Map<String, LookupStatus> lookupStatusMap = new HashMap<>();
       Collection<HostAndPort> hosts = lookupCoordinatorManager.discoverNodesInTier(tier);
 
-      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnNodes = lookupCoordinatorManager.getLastKnownLookupsStateOnNodes();
+      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnNodes = lookupCoordinatorManager
+          .getLastKnownLookupsStateOnNodes();
 
       for (Map.Entry<String, LookupExtractorFactoryMapContainer> lookupsEntry : tierLookups.entrySet()) {
         lookupStatusMap.put(
@@ -407,7 +432,8 @@ public class LookupCoordinatorResource
   )
   {
     try {
-      Map<String, Map<String, LookupExtractorFactoryMapContainer>> configuredLookups = lookupCoordinatorManager.getKnownLookups();
+      Map<String, Map<String, LookupExtractorFactoryMapContainer>> configuredLookups = lookupCoordinatorManager
+          .getKnownLookups();
       if (configuredLookups == null) {
         return Response.status(Response.Status.NOT_FOUND)
                        .entity(ServletResourceUtils.jsonize("No lookups found"))
@@ -486,7 +512,8 @@ public class LookupCoordinatorResource
       if (discover) {
         tiers = lookupCoordinatorManager.discoverTiers();
       } else {
-        Map<String, Map<String, LookupExtractorFactoryMapContainer>> configuredLookups = lookupCoordinatorManager.getKnownLookups();
+        Map<String, Map<String, LookupExtractorFactoryMapContainer>> configuredLookups = lookupCoordinatorManager
+            .getKnownLookups();
         if (configuredLookups == null) {
           return Response.status(Response.Status.NOT_FOUND)
                          .entity(ServletResourceUtils.jsonize("No lookups configured."))
@@ -495,7 +522,8 @@ public class LookupCoordinatorResource
         tiers = configuredLookups.keySet();
       }
 
-      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnHosts = lookupCoordinatorManager.getLastKnownLookupsStateOnNodes();
+      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnHosts = lookupCoordinatorManager
+          .getLastKnownLookupsStateOnNodes();
 
       Map<String, Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>>> result = new HashMap<>();
 
@@ -531,7 +559,8 @@ public class LookupCoordinatorResource
   )
   {
     try {
-      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnHosts = lookupCoordinatorManager.getLastKnownLookupsStateOnNodes();
+      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnHosts = lookupCoordinatorManager
+          .getLastKnownLookupsStateOnNodes();
 
       Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> tierNodesStatus = new HashMap<>();
 
@@ -563,7 +592,8 @@ public class LookupCoordinatorResource
   )
   {
     try {
-      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnHosts = lookupCoordinatorManager.getLastKnownLookupsStateOnNodes();
+      Map<HostAndPort, LookupsState<LookupExtractorFactoryMapContainer>> lookupsStateOnHosts = lookupCoordinatorManager
+          .getLastKnownLookupsStateOnNodes();
 
       LookupsState<LookupExtractorFactoryMapContainer> lookupsState = lookupsStateOnHosts.get(hostAndPort);
       if (lookupsState == null) {
diff --git a/server/src/test/java/org/apache/druid/server/http/LookupCoordinatorResourceTest.java b/server/src/test/java/org/apache/druid/server/http/LookupCoordinatorResourceTest.java
index 621479b..17f3d46 100644
--- a/server/src/test/java/org/apache/druid/server/http/LookupCoordinatorResourceTest.java
+++ b/server/src/test/java/org/apache/druid/server/http/LookupCoordinatorResourceTest.java
@@ -39,6 +39,7 @@ import org.junit.Test;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -1078,4 +1079,68 @@ public class LookupCoordinatorResourceTest
 
     EasyMock.verify(lookupCoordinatorManager);
   }
+
+  @Test
+  public void testGetAllLookupSpecs()
+  {
+    final Map<String, Map<String, LookupExtractorFactoryMapContainer>> lookups = ImmutableMap.of(
+        "tier1",
+        ImmutableMap.of(
+            "lookup1",
+            new LookupExtractorFactoryMapContainer(
+                "v0",
+                ImmutableMap.of("k1", "v2")
+            ),
+            "lookup2",
+            new LookupExtractorFactoryMapContainer(
+                "v1",
+                ImmutableMap.of("k", "v")
+            )
+        ),
+        "tier2",
+        ImmutableMap.of(
+            "lookup1",
+            new LookupExtractorFactoryMapContainer(
+                "v0",
+                ImmutableMap.of("k1", "v2")
+            )
+        )
+    );
+    final LookupCoordinatorManager lookupCoordinatorManager = EasyMock.createStrictMock(
+        LookupCoordinatorManager.class
+    );
+    EasyMock.expect(lookupCoordinatorManager.getKnownLookups())
+            .andReturn(lookups)
+            .once();
+    EasyMock.replay(lookupCoordinatorManager);
+    final LookupCoordinatorResource lookupCoordinatorResource = new LookupCoordinatorResource(
+        lookupCoordinatorManager,
+        mapper,
+        mapper
+    );
+    final Response response = lookupCoordinatorResource.getAllLookupSpecs();
+    Assert.assertEquals(Status.OK.getStatusCode(), response.getStatus());
+    Assert.assertEquals(lookups, response.getEntity());
+    EasyMock.verify(lookupCoordinatorManager);
+  }
+
+  @Test
+  public void testGetEmptyAllLookupSpecs()
+  {
+    final LookupCoordinatorManager lookupCoordinatorManager = EasyMock.createStrictMock(
+        LookupCoordinatorManager.class
+    );
+    EasyMock.expect(lookupCoordinatorManager.getKnownLookups())
+            .andReturn(null)
+            .once();
+    EasyMock.replay(lookupCoordinatorManager);
+    final LookupCoordinatorResource lookupCoordinatorResource = new LookupCoordinatorResource(
+        lookupCoordinatorManager,
+        mapper,
+        mapper
+    );
+    final Response response = lookupCoordinatorResource.getAllLookupSpecs();
+    Assert.assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+    EasyMock.verify(lookupCoordinatorManager);
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org