From 622cae425e924db4bc5abeef09d8a184ca3a54c7 Mon Sep 17 00:00:00 2001 From: Pracheer Agarwal Date: Tue, 20 Dec 2016 10:19:20 +0530 Subject: [PATCH 1/7] FALCON-2225 extension owner added for trusted extensions --- .../java/org/apache/falcon/extensions/store/ExtensionStore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/src/main/java/org/apache/falcon/extensions/store/ExtensionStore.java b/extensions/src/main/java/org/apache/falcon/extensions/store/ExtensionStore.java index df63779f6..b59741dab 100644 --- a/extensions/src/main/java/org/apache/falcon/extensions/store/ExtensionStore.java +++ b/extensions/src/main/java/org/apache/falcon/extensions/store/ExtensionStore.java @@ -104,7 +104,7 @@ private void initializeDbTable() { String description = getShortDescription(extension); String recipeName = extension; String location = storePath.toString() + '/' + extension; - String extensionOwner = CurrentUser.getUser(); + String extensionOwner = System.getProperty("user.name"); metaStore.storeExtensionBean(recipeName, location, extensionType, description, extensionOwner); } } catch (FalconException e) { From daa3ffc625e15dcc8a1243ab26f99b6c730fe9e2 Mon Sep 17 00:00:00 2001 From: Pracheer Agarwal Date: Tue, 20 Dec 2016 10:31:51 +0530 Subject: [PATCH 2/7] FALCON-2225 extension owner added for trusted extensions --- .../java/org/apache/falcon/extensions/store/ExtensionStore.java | 1 - 1 file changed, 1 deletion(-) diff --git a/extensions/src/main/java/org/apache/falcon/extensions/store/ExtensionStore.java b/extensions/src/main/java/org/apache/falcon/extensions/store/ExtensionStore.java index b59741dab..72d449339 100644 --- a/extensions/src/main/java/org/apache/falcon/extensions/store/ExtensionStore.java +++ b/extensions/src/main/java/org/apache/falcon/extensions/store/ExtensionStore.java @@ -26,7 +26,6 @@ import org.apache.falcon.extensions.ExtensionType; import org.apache.falcon.extensions.jdbc.ExtensionMetaStore; import org.apache.falcon.hadoop.HadoopClientFactory; -import org.apache.falcon.security.CurrentUser; import org.apache.falcon.util.StartupProperties; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; From 2ce8bf07b7f1a978e6f72704a505a1110becf46d Mon Sep 17 00:00:00 2001 From: Pracheer Agarwal Date: Thu, 5 Jan 2017 11:15:12 +0530 Subject: [PATCH 3/7] adding enable/disable api in server --- .../falcon/resource/ExtensionManager.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/webapp/src/main/java/org/apache/falcon/resource/ExtensionManager.java b/webapp/src/main/java/org/apache/falcon/resource/ExtensionManager.java index 3a6c9c003..05c0e2f56 100644 --- a/webapp/src/main/java/org/apache/falcon/resource/ExtensionManager.java +++ b/webapp/src/main/java/org/apache/falcon/resource/ExtensionManager.java @@ -135,8 +135,30 @@ public APIResult deleteExtensionMetadata( @Produces({MediaType.APPLICATION_JSON}) public APIResult getExtensionDefinition( @PathParam("extension-name") String extensionName) { - LOG.error("Definition is not supported on Server.Please run your operation on Prism "); + LOG.error("Definition is not supported on Server. Please run your operation on Prism "); throw FalconWebException.newAPIException("Definition is not supported on Server. Please run your operation " + "on Prism."); } + + @GET + @Path("enable/{extension-name}") + @Consumes({MediaType.TEXT_XML, MediaType.TEXT_PLAIN}) + @Produces(MediaType.TEXT_PLAIN) + public APIResult enableExtension( + @PathParam("extension-name") String extensionName) { + LOG.error("Enable extension is not supported on Server. Please run your operation on Prism "); + throw FalconWebException.newAPIException("Enable extension is not supported on Server. Please run your " + + "operation on Prism."); + } + + @GET + @Path("disable/{extension-name}") + @Consumes({MediaType.TEXT_XML, MediaType.TEXT_PLAIN}) + @Produces(MediaType.TEXT_PLAIN) + public APIResult disableExtension( + @PathParam("extension-name") String extensionName) { + LOG.error("Disable extension is not supported on Server. Please run your operation on Prism "); + throw FalconWebException.newAPIException("Disable extension is not supported on Server. Please run your " + + "operation on Prism."); + } } From 946efc01b8fb86d5fbe50f935001a79cb62d1014 Mon Sep 17 00:00:00 2001 From: Pracheer Agarwal Date: Thu, 5 Jan 2017 14:32:37 +0530 Subject: [PATCH 4/7] check for entension and its job existence --- .../resource/proxy/ExtensionManagerProxy.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java b/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java index 6f75dc776..2497c543b 100644 --- a/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java +++ b/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java @@ -362,12 +362,24 @@ private SortedMap> getEntityList(String extensionName, private ExtensionType getExtensionType(String extensionName) { ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); ExtensionBean extensionDetails = metaStore.getDetail(extensionName); + if (extensionDetails == null) { + // return failure if the extension job doesn't exist + LOG.error("Extension not found: " + extensionName); + throw FalconWebException.newAPIException("Extension not found:" + extensionName, + Response.Status.NOT_FOUND); + } return extensionDetails.getExtensionType(); } private String getExtensionName(String jobName) { ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); ExtensionJobsBean extensionJobDetails = metaStore.getExtensionJobDetails(jobName); + if (extensionJobDetails == null) { + // return failure if the extension job doesn't exist + LOG.error("Extension job not found: " + jobName); + throw FalconWebException.newAPIException("Extension Job not found:" + jobName, + Response.Status.NOT_FOUND); + } return extensionJobDetails.getExtensionName(); } @@ -586,6 +598,10 @@ public APIResult update( String extensionName = getExtensionName(jobName); try { entityMap = getEntityList(extensionName, jobName, feedForms, processForms, config); + if (entityMap.isEmpty()) { + // return failure if the extension job doesn't exist + return new APIResult(APIResult.Status.FAILED, "Extension job " + jobName + " doesn't exist."); + } updateEntities(extensionName, jobName, entityMap, config, request); } catch (FalconException | IOException | JAXBException e) { LOG.error("Error while updating extension job: " + jobName, e); @@ -619,7 +635,6 @@ public APIResult validate( return new APIResult(APIResult.Status.SUCCEEDED, "Validated successfully"); } - // Extension store related REST API's @GET @Path("enumerate") From e70843631939204f67630092de37a70599ffe6d9 Mon Sep 17 00:00:00 2001 From: Pracheer Agarwal Date: Thu, 5 Jan 2017 15:48:03 +0530 Subject: [PATCH 5/7] FALCON-2233, Changes in falcon unit to enable/disable extensions --- .../resource/AbstractExtensionManager.java | 19 +++++++++++ .../resource/proxy/ExtensionManagerProxy.java | 18 ----------- .../falcon/unit/LocalExtensionManager.java | 32 +++++++++---------- .../falcon/unit/FalconUnitTestBase.java | 8 +++++ .../apache/falcon/unit/TestFalconUnit.java | 10 ++++++ 5 files changed, 53 insertions(+), 34 deletions(-) diff --git a/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java b/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java index 63bf1b655..e4e72813d 100644 --- a/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java +++ b/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java @@ -232,4 +232,23 @@ private static JSONArray buildEnumerateResult() throws FalconException { } return results; } + + public static void checkIfExtensionIsEnabled(String extensionName) { + ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); + if (!metaStore.getDetail(extensionName).getStatus().equals(ExtensionStatus.ENABLED)) { + LOG.error("Extension: " + extensionName + " is in disabled state."); + throw FalconWebException.newAPIException("Extension: " + extensionName + " is in disabled state.", + Response.Status.INTERNAL_SERVER_ERROR); + } + } + + public static void checkIfExtensionJobExists(String jobName, String extensionName) { + ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); + ExtensionJobsBean extensionJobsBean = metaStore.getExtensionJobDetails(jobName); + if (extensionJobsBean != null && !extensionJobsBean.getExtensionName().equals(extensionName)) { + LOG.error("Extension job with name: " + extensionName + " already exists."); + throw FalconWebException.newAPIException("Extension job with name: " + extensionName + " already exists.", + Response.Status.INTERNAL_SERVER_ERROR); + } + } } diff --git a/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java b/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java index 2497c543b..ea3560c6e 100644 --- a/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java +++ b/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java @@ -30,7 +30,6 @@ import org.apache.falcon.entity.v0.feed.Feed; import org.apache.falcon.entity.v0.process.Process; import org.apache.falcon.extensions.Extension; -import org.apache.falcon.extensions.ExtensionStatus; import org.apache.falcon.extensions.ExtensionService; import org.apache.falcon.extensions.ExtensionType; import org.apache.falcon.extensions.ExtensionProperties; @@ -794,22 +793,5 @@ private static void checkIfExtensionServiceIsEnabled() { } } - private static void checkIfExtensionIsEnabled(String extensionName) { - ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); - if (!metaStore.getDetail(extensionName).getStatus().equals(ExtensionStatus.ENABLED)) { - LOG.error("Extension: " + extensionName + " is in disabled state."); - throw FalconWebException.newAPIException("Extension: " + extensionName + " is in disabled state.", - Response.Status.INTERNAL_SERVER_ERROR); - } - } - private static void checkIfExtensionJobExists(String jobName, String extensionName) { - ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); - ExtensionJobsBean extensionJobsBean = metaStore.getExtensionJobDetails(jobName); - if (extensionJobsBean != null && !extensionJobsBean.getExtensionName().equals(extensionName)) { - LOG.error("Extension job with name: " + extensionName + " already exists."); - throw FalconWebException.newAPIException("Extension job with name: " + extensionName + " already exists.", - Response.Status.INTERNAL_SERVER_ERROR); - } - } } diff --git a/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java b/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java index 20ccfcaab..07dbbecb8 100644 --- a/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java +++ b/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java @@ -40,26 +40,27 @@ * A proxy implementation of the extension operations in local mode. */ public class LocalExtensionManager extends AbstractExtensionManager { - LocalExtensionManager() {} + LocalExtensionManager() { + } APIResult submitExtensionJob(String extensionName, String jobName, InputStream configStream, - SortedMap> entityMap) - throws FalconException, IOException { + SortedMap> entityMap) throws FalconException, IOException { + checkIfExtensionIsEnabled(extensionName); + checkIfExtensionJobExists(jobName, extensionName); for (Map.Entry> entry : entityMap.entrySet()) { for (Entity entity : entry.getValue()) { submitInternal(entity, "falconUser"); } } storeExtension(extensionName, jobName, configStream, entityMap); - return new APIResult(APIResult.Status.SUCCEEDED, "Extension job submitted successfully" + jobName); } APIResult submitAndSchedulableExtensionJob(String extensionName, String jobName, InputStream configStream, - SortedMap> entityMap) - throws FalconException, IOException { - for(Map.Entry> entry : entityMap.entrySet()){ - for(Entity entity : entry.getValue()){ + SortedMap> entityMap) throws FalconException, + IOException { + for (Map.Entry> entry : entityMap.entrySet()) { + for (Entity entity : entry.getValue()) { submitInternal(entity, "falconUser"); } } @@ -95,8 +96,8 @@ private void storeExtension(String extensionName, String jobName, InputStream co ExtensionStore.getMetaStore().storeExtensionJob(jobName, extensionName, feedNames, processNames, configBytes); } - APIResult scheduleExtensionJob(String jobName, String coloExpr, String doAsUser) - throws FalconException, IOException{ + APIResult scheduleExtensionJob(String jobName, String coloExpr, String doAsUser) throws FalconException, + IOException { ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); ExtensionJobsBean extensionJobsBean = metaStore.getExtensionJobDetails(jobName); SortedMap> entityMap = getJobEntities(extensionJobsBean); @@ -122,8 +123,7 @@ APIResult deleteExtensionJob(String jobName) throws FalconException, IOException } APIResult updateExtensionJob(String extensionName, String jobName, InputStream configStream, - SortedMap> entityMap) - throws FalconException, IOException { + SortedMap> entityMap) throws FalconException, IOException { List feedNames = new ArrayList<>(); List processNames = new ArrayList<>(); for (Map.Entry> entry : entityMap.entrySet()) { @@ -156,7 +156,7 @@ APIResult unRegisterExtension(String extensionName) { return super.deleteExtensionMetadata(extensionName); } - APIResult getExtensionJobDetails(String jobName){ + APIResult getExtensionJobDetails(String jobName) { return super.getExtensionJobDetail(jobName); } @@ -165,14 +165,14 @@ APIResult disableExtension(String extensionName) { } APIResult enableExtension(String extensionName) { - return new APIResult(APIResult.Status.SUCCEEDED, super.disableExtension(extensionName, CurrentUser.getUser())); + return new APIResult(APIResult.Status.SUCCEEDED, super.enableExtension(extensionName, CurrentUser.getUser())); } - APIResult getExtensionDetails(String extensionName){ + APIResult getExtensionDetails(String extensionName) { return super.getExtensionDetail(extensionName); } - public APIResult getExtensions(){ + public APIResult getExtensions() { return super.getExtensions(); } } diff --git a/unit/src/test/java/org/apache/falcon/unit/FalconUnitTestBase.java b/unit/src/test/java/org/apache/falcon/unit/FalconUnitTestBase.java index 9e836e7b2..0dd09c190 100644 --- a/unit/src/test/java/org/apache/falcon/unit/FalconUnitTestBase.java +++ b/unit/src/test/java/org/apache/falcon/unit/FalconUnitTestBase.java @@ -224,6 +224,14 @@ public String registerExtension(String extensionName, String packagePath, String return falconUnitClient.registerExtension(extensionName, packagePath, description).getMessage(); } + public String disableExtension(String extensionName) { + return falconUnitClient.disableExtension(extensionName).getMessage(); + } + + public String enableExtension(String extensionName) { + return falconUnitClient.enableExtension(extensionName).getMessage(); + } + public String getExtensionJobDetails(String jobName) { return falconUnitClient.getExtensionJobDetails(jobName).getMessage(); } diff --git a/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java b/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java index 508a7bb02..eb2958c30 100644 --- a/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java +++ b/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java @@ -442,8 +442,18 @@ public void testExtensionJobOperations() throws Exception { String result = registerExtension(TEST_EXTENSION, STORAGE_URL + EXTENSION_PATH, TEST_EXTENSION); Assert.assertEquals(result, "Extension :testExtension registered successfully."); + disableExtension(TEST_EXTENSION); createDir(PROCESS_APP_PATH); copyExtensionJar(packageBuildLib); + + try { + submitExtensionJob(TEST_EXTENSION, TEST_JOB, null, null); + } catch (FalconWebException e) { + Assert.assertEquals(((APIResult) e.getResponse().getEntity()).getMessage(), "Extension: " + + TEST_EXTENSION + " is in disabled state."); + } + enableExtension(TEST_EXTENSION); + APIResult apiResult = submitExtensionJob(TEST_EXTENSION, TEST_JOB, null, null); assertStatus(apiResult); result = getExtensionJobDetails(TEST_JOB); From 28eff4229703bcdec78adbb1962096eef7bf8b63 Mon Sep 17 00:00:00 2001 From: Pracheer Agarwal Date: Thu, 5 Jan 2017 17:06:17 +0530 Subject: [PATCH 6/7] review comments addressed --- .../falcon/resource/AbstractExtensionManager.java | 4 ++-- .../resource/proxy/ExtensionManagerProxy.java | 6 +++--- .../apache/falcon/unit/LocalExtensionManager.java | 13 ++++++++----- .../java/org/apache/falcon/unit/TestFalconUnit.java | 1 + 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java b/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java index e4e72813d..09d339134 100644 --- a/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java +++ b/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java @@ -233,7 +233,7 @@ private static JSONArray buildEnumerateResult() throws FalconException { return results; } - public static void checkIfExtensionIsEnabled(String extensionName) { + protected static void checkIfExtensionIsEnabled(String extensionName) { ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); if (!metaStore.getDetail(extensionName).getStatus().equals(ExtensionStatus.ENABLED)) { LOG.error("Extension: " + extensionName + " is in disabled state."); @@ -242,7 +242,7 @@ public static void checkIfExtensionIsEnabled(String extensionName) { } } - public static void checkIfExtensionJobExists(String jobName, String extensionName) { + protected static void checkIfExtensionJobNameExists(String jobName, String extensionName) { ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); ExtensionJobsBean extensionJobsBean = metaStore.getExtensionJobDetails(jobName); if (extensionJobsBean != null && !extensionJobsBean.getExtensionName().equals(extensionName)) { diff --git a/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java b/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java index ea3560c6e..add87821e 100644 --- a/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java +++ b/prism/src/main/java/org/apache/falcon/resource/proxy/ExtensionManagerProxy.java @@ -314,7 +314,7 @@ public APIResult submit( @FormDataParam("config") InputStream config) { checkIfExtensionServiceIsEnabled(); checkIfExtensionIsEnabled(extensionName); - checkIfExtensionJobExists(jobName, extensionName); + checkIfExtensionJobNameExists(jobName, extensionName); SortedMap> entityMap; try { entityMap = getEntityList(extensionName, jobName, feedForms, processForms, config); @@ -397,7 +397,7 @@ public APIResult submitAndSchedule( @FormDataParam("config") InputStream config) { checkIfExtensionServiceIsEnabled(); checkIfExtensionIsEnabled(extensionName); - checkIfExtensionJobExists(jobName, extensionName); + checkIfExtensionJobNameExists(jobName, extensionName); SortedMap> entityMap; try { entityMap = getEntityList(extensionName, jobName, feedForms, processForms, config); @@ -597,7 +597,7 @@ public APIResult update( String extensionName = getExtensionName(jobName); try { entityMap = getEntityList(extensionName, jobName, feedForms, processForms, config); - if (entityMap.isEmpty()) { + if (entityMap.get(EntityType.FEED).isEmpty() && entityMap.get(EntityType.PROCESS).isEmpty()) { // return failure if the extension job doesn't exist return new APIResult(APIResult.Status.FAILED, "Extension job " + jobName + " doesn't exist."); } diff --git a/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java b/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java index 07dbbecb8..b83d62cef 100644 --- a/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java +++ b/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java @@ -46,7 +46,7 @@ public class LocalExtensionManager extends AbstractExtensionManager { APIResult submitExtensionJob(String extensionName, String jobName, InputStream configStream, SortedMap> entityMap) throws FalconException, IOException { checkIfExtensionIsEnabled(extensionName); - checkIfExtensionJobExists(jobName, extensionName); + checkIfExtensionJobNameExists(jobName, extensionName); for (Map.Entry> entry : entityMap.entrySet()) { for (Entity entity : entry.getValue()) { submitInternal(entity, "falconUser"); @@ -57,8 +57,10 @@ APIResult submitExtensionJob(String extensionName, String jobName, InputStream c } APIResult submitAndSchedulableExtensionJob(String extensionName, String jobName, InputStream configStream, - SortedMap> entityMap) throws FalconException, - IOException { + SortedMap> entityMap) + throws FalconException, IOException { + checkIfExtensionIsEnabled(extensionName); + checkIfExtensionJobNameExists(jobName, extensionName); for (Map.Entry> entry : entityMap.entrySet()) { for (Entity entity : entry.getValue()) { submitInternal(entity, "falconUser"); @@ -96,8 +98,9 @@ private void storeExtension(String extensionName, String jobName, InputStream co ExtensionStore.getMetaStore().storeExtensionJob(jobName, extensionName, feedNames, processNames, configBytes); } - APIResult scheduleExtensionJob(String jobName, String coloExpr, String doAsUser) throws FalconException, - IOException { + APIResult scheduleExtensionJob(String jobName, String coloExpr, String doAsUser) + throws FalconException, IOException { + checkIfExtensionIsEnabled(ExtensionStore.getMetaStore().getExtensionJobDetails(jobName).getExtensionName()); ExtensionMetaStore metaStore = ExtensionStore.getMetaStore(); ExtensionJobsBean extensionJobsBean = metaStore.getExtensionJobDetails(jobName); SortedMap> entityMap = getJobEntities(extensionJobsBean); diff --git a/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java b/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java index eb2958c30..65931659b 100644 --- a/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java +++ b/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java @@ -448,6 +448,7 @@ public void testExtensionJobOperations() throws Exception { try { submitExtensionJob(TEST_EXTENSION, TEST_JOB, null, null); + Assert.fail("Should have thrown a FalconWebException"); } catch (FalconWebException e) { Assert.assertEquals(((APIResult) e.getResponse().getEntity()).getMessage(), "Extension: " + TEST_EXTENSION + " is in disabled state."); From 9f4f62d485402a776aa5b0fab1af01d3c6b67259 Mon Sep 17 00:00:00 2001 From: Pracheer Agarwal Date: Fri, 6 Jan 2017 14:27:10 +0530 Subject: [PATCH 7/7] checkstyle errors checked --- .../main/java/org/apache/falcon/unit/LocalExtensionManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java b/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java index 29b2f1c61..a7303b171 100644 --- a/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java +++ b/unit/src/main/java/org/apache/falcon/unit/LocalExtensionManager.java @@ -41,7 +41,7 @@ */ public class LocalExtensionManager extends AbstractExtensionManager { LocalExtensionManager() { - } + } APIResult submitExtensionJob(String extensionName, String jobName, InputStream configStream, SortedMap> entityMap) throws FalconException, IOException {