FALCON-2214 Falcon extension registered without fully qualified hdfs …
…path
Author: Praveen Adlakha <adlakha.praveen@gmail.com>
Reviewers: @pallavi-rao
Closes #319 from PraveenAdlakha/2214 and squashes the following commits:
135ca8e [Praveen Adlakha] test cases fixed and merge conflict resolved
98e202d [Praveen Adlakha] FALCON-2214 Falcon extension registered without fully qualified hdfs path
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 72d4493..8e4acbe 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
@@ -268,10 +268,22 @@
}
}
+ private void assertURI(String part, String value) throws ValidationException {
+ if (value == null) {
+ String msg = "Invalid Path supplied. " + part + " is missing. "
+ + " Path must contain scheme, authority and path.";
+ LOG.error(msg);
+ throw new ValidationException(msg);
+ }
+ }
+
public String registerExtension(final String extensionName, final String path, final String description,
String extensionOwner) throws URISyntaxException, FalconException {
Configuration conf = new Configuration();
URI uri = new URI(path);
+ assertURI("Scheme", uri.getScheme());
+ assertURI("Authority", uri.getAuthority());
+ assertURI("Path", uri.getPath());
conf.set("fs.defaultFS", uri.getScheme() + "://" + uri.getAuthority());
FileSystem fileSystem = HadoopClientFactory.get().createFalconFileSystem(uri);
try {
@@ -313,6 +325,7 @@
} else {
throw new ValidationException(extensionName + " already exists.");
}
+ LOG.info("Extension :" + extensionName + " registered successfully.");
return "Extension :" + extensionName + " registered successfully.";
}
diff --git a/extensions/src/test/java/org/apache/falcon/extensions/store/ExtensionStoreTest.java b/extensions/src/test/java/org/apache/falcon/extensions/store/ExtensionStoreTest.java
index 773fea2..0835f38 100644
--- a/extensions/src/test/java/org/apache/falcon/extensions/store/ExtensionStoreTest.java
+++ b/extensions/src/test/java/org/apache/falcon/extensions/store/ExtensionStoreTest.java
@@ -104,6 +104,13 @@
}
}
+ @Test(expectedExceptions=ValidationException.class)
+ public void testFailureCaseRegisterExtensionForURL() throws IOException, URISyntaxException, FalconException{
+ store = ExtensionStore.get();
+ createLibs(EXTENSION_PATH);
+ store.registerExtension("test", EXTENSION_PATH, "test desc", "falconUser");
+ }
+
@Test
public void testRegisterExtension() throws IOException, URISyntaxException, FalconException {
String extensionPath = EXTENSION_PATH + "testRegister";
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 b7a6e39..293bb23 100644
--- a/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java
+++ b/unit/src/test/java/org/apache/falcon/unit/TestFalconUnit.java
@@ -30,10 +30,14 @@
import org.apache.falcon.resource.InstancesResult;
import org.apache.falcon.resource.InstancesSummaryResult;
import org.apache.falcon.service.FalconJPAService;
+import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;
import org.codehaus.jettison.json.JSONObject;
import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import javax.persistence.EntityManager;
@@ -67,6 +71,16 @@
private static final String SLEEP_WORKFLOW = "sleepWorkflow.xml";
private static final String EXTENSION_PATH = "/projects/falcon/extension/testExtension";
public static final String JARS_DIR = "file:///" + System.getProperty("user.dir") + "/src/test/resources";
+ private FileSystem fileSystem;
+
+ private static final String STORAGE_URL = "jail://global:00";
+
+ @BeforeClass
+ public void init() throws IOException{
+ Configuration conf = new Configuration();
+ conf.set("fs.defaultFS", STORAGE_URL);
+ fs.initialize(LocalFileSystem.getDefaultUri(conf), conf);
+ }
@Test
public void testProcessInstanceExecution() throws Exception {
@@ -407,7 +421,8 @@
submitCluster();
createExtensionPackage();
- String result = registerExtension("testExtension", new Path(EXTENSION_PATH).toString(), "testExtension");
+ String result = registerExtension("testExtension", new Path(STORAGE_URL + EXTENSION_PATH).toString()
+ , "testExtension");
Assert.assertEquals(result, "Extension :testExtension registered successfully.");
result = unregisterExtension("testExtension");
@@ -420,7 +435,7 @@
submitCluster();
createExtensionPackage();
String packageBuildLib = new Path(EXTENSION_PATH, "libs/build/").toString();
- String result = registerExtension("testExtension", EXTENSION_PATH, "testExtension");
+ String result = registerExtension("testExtension", STORAGE_URL + EXTENSION_PATH, "testExtension");
Assert.assertEquals(result, "Extension :testExtension registered successfully.");
createDir(PROCESS_APP_PATH);