You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@falcon.apache.org by so...@apache.org on 2016/05/20 17:06:54 UTC

falcon git commit: FALCON-1972 Handling cases when Extension service or extension.store.uri is not set in startup properties"

Repository: falcon
Updated Branches:
  refs/heads/master fcd066a0a -> fbd9fbedb


FALCON-1972 Handling cases when Extension service or extension.store.uri is not set in startup properties"

Author: Sowmya Ramesh <sr...@hortonworks.com>

Reviewers: "Balu Vellanki <ba...@apache.org>"

Closes #152 from sowmyaramesh/FALCON-1972


Project: http://git-wip-us.apache.org/repos/asf/falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/falcon/commit/fbd9fbed
Tree: http://git-wip-us.apache.org/repos/asf/falcon/tree/fbd9fbed
Diff: http://git-wip-us.apache.org/repos/asf/falcon/diff/fbd9fbed

Branch: refs/heads/master
Commit: fbd9fbedbfbf9958b03dff47be6888fdc743ec16
Parents: fcd066a
Author: Sowmya Ramesh <so...@apache.org>
Authored: Fri May 20 10:06:50 2016 -0700
Committer: Sowmya Ramesh <sr...@hortonworks.com>
Committed: Fri May 20 10:06:50 2016 -0700

----------------------------------------------------------------------
 .../falcon/extensions/ExtensionService.java     |  2 ++
 .../resource/extensions/ExtensionManager.java   | 32 +++++++++++++++++---
 webapp/src/test/resources/startup.properties    |  3 +-
 3 files changed, 31 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/falcon/blob/fbd9fbed/extensions/src/main/java/org/apache/falcon/extensions/ExtensionService.java
----------------------------------------------------------------------
diff --git a/extensions/src/main/java/org/apache/falcon/extensions/ExtensionService.java b/extensions/src/main/java/org/apache/falcon/extensions/ExtensionService.java
index 3b15598..d153aca 100644
--- a/extensions/src/main/java/org/apache/falcon/extensions/ExtensionService.java
+++ b/extensions/src/main/java/org/apache/falcon/extensions/ExtensionService.java
@@ -35,6 +35,8 @@ public class ExtensionService implements FalconService {
 
     @Override
     public void init() throws FalconException {
+        // Validate if extension store is setup
+        getExtensionStore();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/falcon/blob/fbd9fbed/prism/src/main/java/org/apache/falcon/resource/extensions/ExtensionManager.java
----------------------------------------------------------------------
diff --git a/prism/src/main/java/org/apache/falcon/resource/extensions/ExtensionManager.java b/prism/src/main/java/org/apache/falcon/resource/extensions/ExtensionManager.java
index eda8697..92b5531 100644
--- a/prism/src/main/java/org/apache/falcon/resource/extensions/ExtensionManager.java
+++ b/prism/src/main/java/org/apache/falcon/resource/extensions/ExtensionManager.java
@@ -29,6 +29,7 @@ import org.apache.falcon.entity.v0.process.Process;
 import org.apache.falcon.extensions.AbstractExtension;
 import org.apache.falcon.extensions.Extension;
 import org.apache.falcon.extensions.ExtensionProperties;
+import org.apache.falcon.extensions.ExtensionService;
 import org.apache.falcon.extensions.store.ExtensionStore;
 import org.apache.falcon.resource.APIResult;
 import org.apache.falcon.resource.AbstractSchedulableEntityManager;
@@ -36,6 +37,7 @@ import org.apache.falcon.resource.EntityList;
 import org.apache.falcon.resource.ExtensionInstanceList;
 import org.apache.falcon.resource.ExtensionJobList;
 import org.apache.falcon.resource.InstancesResult;
+import org.apache.falcon.service.Services;
 import org.apache.falcon.util.DeploymentUtil;
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
@@ -79,7 +81,6 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     public static final String DESCENDING_SORT_ORDER = "desc";
 
     private Extension extension = new Extension();
-    private static final ExtensionStore STORE = ExtensionStore.get();
     private static final String EXTENSION_RESULTS = "extensions";
     private static final String TOTAL_RESULTS = "totalResults";
     private static final String README = "README";
@@ -103,6 +104,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
             @DefaultValue("0") @QueryParam("offset") Integer offset,
             @QueryParam("numResults") Integer resultsPerPage,
             @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         resultsPerPage = resultsPerPage == null ? getDefaultResultsPerPage() : resultsPerPage;
         try {
             // get filtered entities
@@ -155,6 +157,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
             @DefaultValue("0") @QueryParam("offset") final Integer offset,
             @QueryParam("numResults") Integer resultsPerPage,
             @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         resultsPerPage = resultsPerPage == null ? getDefaultResultsPerPage() : resultsPerPage;
         try {
             List<Entity> entities = getEntityList("", "", "", TAG_PREFIX_EXTENSION_JOB + jobName, "", doAsUser);
@@ -184,6 +187,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     @Produces({MediaType.TEXT_XML, MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON})
     public APIResult schedule(@PathParam("job-name") String jobName,
                               @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         try {
             List<Entity> entities = getEntityList("", "", "", TAG_PREFIX_EXTENSION_JOB + jobName, "", doAsUser);
             if (entities.isEmpty()) {
@@ -207,6 +211,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     @Produces({MediaType.TEXT_XML, MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON})
     public APIResult suspend(@PathParam("job-name") String jobName,
                              @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         try {
             List<Entity> entities = getEntityList("", "", "", TAG_PREFIX_EXTENSION_JOB + jobName, "", doAsUser);
             if (entities.isEmpty()) {
@@ -234,6 +239,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     @Produces({MediaType.TEXT_XML, MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON})
     public APIResult resume(@PathParam("job-name") String jobName,
                             @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         try {
             List<Entity> entities = getEntityList("", "", "", TAG_PREFIX_EXTENSION_JOB + jobName, "", doAsUser);
             if (entities.isEmpty()) {
@@ -261,6 +267,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     @Produces({MediaType.TEXT_XML, MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON})
     public APIResult delete(@PathParam("job-name") String jobName,
                             @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         try {
             List<Entity> entities = getEntityList("", "", "", TAG_PREFIX_EXTENSION_JOB + jobName, "", doAsUser);
             if (entities.isEmpty()) {
@@ -292,6 +299,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
             @PathParam("extension-name") String extensionName,
             @Context HttpServletRequest request,
             @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         try {
             List<Entity> entities = generateEntities(extensionName, request);
             for (Entity entity : entities) {
@@ -312,6 +320,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
             @PathParam("extension-name") String extensionName,
             @Context HttpServletRequest request,
             @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         try {
             List<Entity> entities = generateEntities(extensionName, request);
             for (Entity entity : entities) {
@@ -335,6 +344,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
             @PathParam("extension-name") String extensionName,
             @Context HttpServletRequest request,
             @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         try {
             List<Entity> entities = generateEntities(extensionName, request);
             for (Entity entity : entities) {
@@ -355,6 +365,7 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
             @PathParam("extension-name") String extensionName,
             @Context HttpServletRequest request,
             @DefaultValue("") @QueryParam("doAs") String doAsUser) {
+        checkIfExtensionServiceIsEnabled();
         try {
             List<Entity> entities = generateEntities(extensionName, request);
             for (Entity entity : entities) {
@@ -373,10 +384,11 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     @Path("enumerate")
     @Produces({MediaType.APPLICATION_JSON})
     public Response getExtensions() {
+        checkIfExtensionServiceIsEnabled();
         JSONArray results;
 
         try {
-            List<String> extensions = STORE.getExtensions();
+            List<String> extensions = ExtensionStore.get().getExtensions();
             results = buildEnumerateResult(extensions);
         } catch (StoreAccessException e) {
             LOG.error("Failed when accessing extension store.", e);
@@ -401,9 +413,10 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     @Produces(MediaType.TEXT_PLAIN)
     public String getExtensionDescription(
             @PathParam("extension-name") String extensionName) {
+        checkIfExtensionServiceIsEnabled();
         validateExtensionName(extensionName);
         try {
-            return STORE.getResource(extensionName, README);
+            return ExtensionStore.get().getResource(extensionName, README);
         } catch (Throwable e) {
             throw FalconWebException.newAPIException(e, Response.Status.INTERNAL_SERVER_ERROR);
         }
@@ -414,9 +427,10 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     @Produces({MediaType.APPLICATION_JSON})
     public String getExtensionDefinition(
             @PathParam("extension-name") String extensionName) {
+        checkIfExtensionServiceIsEnabled();
         validateExtensionName(extensionName);
         try {
-            return STORE.getResource(extensionName,
+            return ExtensionStore.get().getResource(extensionName,
                     extensionName.toLowerCase() + EXTENSION_PROPERTY_JSON_SUFFIX);
         } catch (Throwable e) {
             throw FalconWebException.newAPIException(e, Response.Status.INTERNAL_SERVER_ERROR);
@@ -453,7 +467,8 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
     }
 
     private static String getShortDescription(final String extensionName) throws FalconException {
-        String content = STORE.getResource(extensionName, extensionName.toLowerCase() + EXTENSION_PROPERTY_JSON_SUFFIX);
+        String content = ExtensionStore.get().getResource(extensionName, extensionName.toLowerCase()
+                + EXTENSION_PROPERTY_JSON_SUFFIX);
         String description;
         try {
             JSONObject jsonObject = new JSONObject(content);
@@ -535,4 +550,11 @@ public class ExtensionManager extends AbstractSchedulableEntityManager {
         }
         return tags.substring(nameStart, nameEnd);
     }
+
+    private static void checkIfExtensionServiceIsEnabled() {
+        if (!Services.get().isRegistered(ExtensionService.SERVICE_NAME)) {
+            throw FalconWebException.newAPIException(
+                    ExtensionService.SERVICE_NAME + " is not enabled.", Response.Status.NOT_FOUND);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/falcon/blob/fbd9fbed/webapp/src/test/resources/startup.properties
----------------------------------------------------------------------
diff --git a/webapp/src/test/resources/startup.properties b/webapp/src/test/resources/startup.properties
index c7d7c87..fd62bc4 100644
--- a/webapp/src/test/resources/startup.properties
+++ b/webapp/src/test/resources/startup.properties
@@ -42,7 +42,8 @@
                         org.apache.falcon.notification.service.impl.SchedulerService,\
                         org.apache.falcon.notification.service.impl.AlarmService,\
                         org.apache.falcon.notification.service.impl.DataAvailabilityService,\
-                        org.apache.falcon.execution.FalconExecutionService
+                        org.apache.falcon.execution.FalconExecutionService,\
+                        org.apache.falcon.extensions.ExtensionService
 
 ##### Falcon Configuration Store Change listeners #####
 *.configstore.listeners=org.apache.falcon.entity.v0.EntityGraph,\