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 <[email protected]> Reviewers: "Balu Vellanki <[email protected]>" 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 <[email protected]> Authored: Fri May 20 10:06:50 2016 -0700 Committer: Sowmya Ramesh <[email protected]> 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,\
