Skip to content
This repository has been archived by the owner on Apr 4, 2021. It is now read-only.

Commit

Permalink
Merge branch 'master' of https://github.com/apache/falcon
Browse files Browse the repository at this point in the history
  • Loading branch information
sandeepSamudrala committed Dec 27, 2016
2 parents 0cf9af6 + 3f1e047 commit 456d4ee
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 125 deletions.
14 changes: 7 additions & 7 deletions cli/src/main/java/org/apache/falcon/cli/FalconExtensionCLI.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,26 +77,26 @@ public void extensionCommand(CommandLine commandLine, FalconClient client) {
String description = commandLine.getOptionValue(FalconCLIConstants.DESCRIPTION);

if (optionsList.contains(ENUMERATE_OPT)) {
result = client.enumerateExtensions();
result = client.enumerateExtensions().getMessage();
result = prettyPrintJson(result);
} else if (optionsList.contains(DEFINITION_OPT)) {
validateRequiredParameter(extensionName, EXTENSION_NAME_OPT);
result = client.getExtensionDefinition(extensionName);
result = client.getExtensionDefinition(extensionName).getMessage();
result = prettyPrintJson(result);
} else if (optionsList.contains(DESCRIBE_OPT)) {
validateRequiredParameter(extensionName, EXTENSION_NAME_OPT);
result = client.getExtensionDescription(extensionName);
result = client.getExtensionDescription(extensionName).getMessage();
} else if (optionsList.contains(UNREGISTER_OPT)) {
validateRequiredParameter(extensionName, EXTENSION_NAME_OPT);
result = client.unregisterExtension(extensionName);
result = client.unregisterExtension(extensionName).getMessage();
} else if (optionsList.contains(DETAIL_OPT)) {
if (optionsList.contains(JOB_NAME_OPT)) {
validateRequiredParameter(jobName, JOB_NAME_OPT);
result = client.getExtensionJobDetails(jobName);
result = client.getExtensionJobDetails(jobName).getMessage();
result = prettyPrintJson(result);
} else {
validateRequiredParameter(extensionName, EXTENSION_NAME_OPT);
result = client.getExtensionDetail(extensionName);
result = client.getExtensionDetail(extensionName).getMessage();
result = prettyPrintJson(result);
}
} else if (optionsList.contains(FalconCLIConstants.SUBMIT_OPT)) {
Expand All @@ -107,7 +107,7 @@ public void extensionCommand(CommandLine commandLine, FalconClient client) {
} else if (optionsList.contains(REGISTER_OPT)) {
validateRequiredParameter(extensionName, EXTENSION_NAME_OPT);
validateRequiredParameter(path, PATH);
result = client.registerExtension(extensionName, path, description);
result = client.registerExtension(extensionName, path, description).getMessage();
} else if (optionsList.contains(FalconCLIConstants.SUBMIT_AND_SCHEDULE_OPT)) {
validateRequiredParameter(extensionName, EXTENSION_NAME_OPT);
validateRequiredParameter(filePath, FalconCLIConstants.FILE_PATH_OPT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,14 +187,14 @@ public abstract APIResult submitAndSchedule(String entityType, String filePath,
* @param description description of the extension.
* @return Result of the registerExtension command.
*/
public abstract String registerExtension(String extensionName, String packagePath, String description);
public abstract APIResult registerExtension(String extensionName, String packagePath, String description);

/**
*
* @param extensionName extensionName that needs to be unregistered
* @return Result of the unregisterExtension operation
*/
public abstract String unregisterExtension(String extensionName);
public abstract APIResult unregisterExtension(String extensionName);

/**
* Prepares set of entities the extension has implemented and stage them to a local directory and submit them too.
Expand Down Expand Up @@ -226,7 +226,20 @@ public abstract APIResult submitAndScheduleExtensionJob(String extensionName, St
* @param jobName job name of the extension job.
* @return
*/
public abstract String getExtensionJobDetails(final String jobName);
public abstract APIResult getExtensionJobDetails(final String jobName);

/**
* Returns details of an extension.
* @param extensionName name of the extension.
* @return
*/
public abstract APIResult getExtensionDetail(final String extensionName);

/**
* Returns all registered extensions.
* @return
*/
public abstract APIResult enumerateExtensions();

/**
*
Expand Down
28 changes: 14 additions & 14 deletions client/src/main/java/org/apache/falcon/client/FalconClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -1009,55 +1009,55 @@ public String getEdge(String id, String doAsUser) {
return sendMetadataLineageRequest(MetadataOperations.EDGES, id, doAsUser);
}

public String enumerateExtensions() {
public APIResult enumerateExtensions() {
ClientResponse clientResponse = new ResourceBuilder()
.path(ExtensionOperations.ENUMERATE.path)
.call(ExtensionOperations.ENUMERATE);
return getResponse(String.class, clientResponse);
return getResponse(APIResult.class, clientResponse);
}

public String unregisterExtension(final String extensionName) {
public APIResult unregisterExtension(final String extensionName) {
ClientResponse clientResponse = new ResourceBuilder()
.path(ExtensionOperations.UNREGISTER.path, extensionName)
.call(ExtensionOperations.UNREGISTER);
return getResponse(String.class, clientResponse);
return getResponse(APIResult.class, clientResponse);
}

public String getExtensionDetail(final String extensionName) {
return getResponse(String.class, getExtensionDetailResponse(extensionName));
public APIResult getExtensionDetail(final String extensionName) {
return getResponse(APIResult.class, getExtensionDetailResponse(extensionName));
}

public String getExtensionJobDetails(final String jobName) {
public APIResult getExtensionJobDetails(final String jobName) {
ClientResponse clientResponse = new ResourceBuilder().path(ExtensionOperations.JOB_DETAILS.path, jobName)
.call(ExtensionOperations.JOB_DETAILS);
return getResponse(String.class, clientResponse);
return getResponse(APIResult.class, clientResponse);
}

private ClientResponse getExtensionDetailResponse(final String extensionName) {
return new ResourceBuilder().path(ExtensionOperations.DETAIL.path, extensionName)
.call(ExtensionOperations.DETAIL);
}

public String registerExtension(final String extensionName, final String packagePath, final String description) {
public APIResult registerExtension(final String extensionName, final String packagePath, final String description) {
ClientResponse clientResponse = new ResourceBuilder()
.path(ExtensionOperations.REGISTER.path, extensionName).addQueryParam(PATH, packagePath)
.addQueryParam(FalconCLIConstants.DESCRIPTION, description)
.call(ExtensionOperations.REGISTER);
return getResponse(String.class, clientResponse);
return getResponse(APIResult.class, clientResponse);
}

public String getExtensionDefinition(final String extensionName) {
public APIResult getExtensionDefinition(final String extensionName) {
ClientResponse clientResponse = new ResourceBuilder()
.path(ExtensionOperations.DEFINITION.path, extensionName)
.call(ExtensionOperations.DEFINITION);
return getResponse(String.class, clientResponse);
return getResponse(APIResult.class, clientResponse);
}

public String getExtensionDescription(final String extensionName) {
public APIResult getExtensionDescription(final String extensionName) {
ClientResponse clientResponse = new ResourceBuilder()
.path(ExtensionOperations.DESCRIBE.path, extensionName)
.call(ExtensionOperations.DESCRIBE);
return getResponse(String.class, clientResponse);
return getResponse(APIResult.class, clientResponse);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,17 @@
import org.apache.falcon.entity.parser.ValidationException;
import org.apache.falcon.extensions.jdbc.ExtensionMetaStore;
import org.apache.falcon.extensions.store.ExtensionStore;
import org.apache.falcon.persistence.ExtensionBean;
import org.apache.falcon.persistence.ExtensionJobsBean;
import org.apache.falcon.security.CurrentUser;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.ws.rs.core.Response;
import java.util.List;

/**
* A base class for managing Extension Operations.
Expand All @@ -47,34 +50,57 @@ public class AbstractExtensionManager extends AbstractSchedulableEntityManager {
private static final String CREATION_TIME = "creationTime";
private static final String LAST_UPDATE_TIME = "lastUpdatedTime";

private static final String NAME = "name";
private static final String EXTENSION_TYPE = "type";
private static final String EXTENSION_DESC = "description";
private static final String EXTENSION_LOCATION = "location";

public static void validateExtensionName(final String extensionName) {
if (StringUtils.isBlank(extensionName)) {
throw FalconWebException.newAPIException("Extension name is mandatory and shouldn't be blank",
Response.Status.BAD_REQUEST);
}
}

public String registerExtensionMetadata(String extensionName, String path, String description, String owner) {
public APIResult registerExtensionMetadata(String extensionName, String path, String description, String owner) {
validateExtensionName(extensionName);
try {
return ExtensionStore.get().registerExtension(extensionName, path, description, owner);
return new APIResult(APIResult.Status.SUCCEEDED, ExtensionStore.get().registerExtension(extensionName, path,
description, owner));
} catch (Throwable e) {
throw FalconWebException.newAPIException(e, Response.Status.INTERNAL_SERVER_ERROR);
}
}

public String getExtensionJobDetail(String jobName) {
public APIResult getExtensionJobDetail(String jobName) {
try {
return new APIResult(APIResult.Status.SUCCEEDED, buildExtensionJobDetailResult(jobName).toString());
} catch (FalconException e) {
throw FalconWebException.newAPIException(e, Response.Status.INTERNAL_SERVER_ERROR);
}
}

public APIResult getExtensionDetail(String extensionName) {
try {
return buildExtensionJobDetailResult(jobName).toString();
return new APIResult(APIResult.Status.SUCCEEDED, buildExtensionDetailResult(extensionName).toString());
} catch (FalconException e) {
throw FalconWebException.newAPIException(e, Response.Status.INTERNAL_SERVER_ERROR);
}
}

public String deleteExtensionMetadata(String extensionName){
public APIResult getExtensions() {
try {
return new APIResult(APIResult.Status.SUCCEEDED, buildEnumerateResult().toString());
} catch (FalconException e) {
throw FalconWebException.newAPIException(e, Response.Status.INTERNAL_SERVER_ERROR);
}
}

public APIResult deleteExtensionMetadata(String extensionName){
validateExtensionName(extensionName);
try {
return ExtensionStore.get().deleteExtension(extensionName, CurrentUser.getUser());
return new APIResult(APIResult.Status.SUCCEEDED, ExtensionStore.get().deleteExtension(extensionName,
CurrentUser.getUser()));
} catch (Throwable e) {
throw FalconWebException.newAPIException(e, Response.Status.INTERNAL_SERVER_ERROR);
}
Expand Down Expand Up @@ -114,4 +140,45 @@ public static String getJobNameFromTag(String tags) {
}
return tags.substring(nameStart, nameEnd);
}

private JSONObject buildExtensionDetailResult(final String extensionName) throws FalconException {
ExtensionMetaStore metaStore = ExtensionStore.getMetaStore();

if (!metaStore.checkIfExtensionExists(extensionName)){
throw new ValidationException("No extension resources found for " + extensionName);
}

ExtensionBean bean = metaStore.getDetail(extensionName);
JSONObject resultObject = new JSONObject();
try {
resultObject.put(NAME, bean.getExtensionName());
resultObject.put(EXTENSION_TYPE, bean.getExtensionType());
resultObject.put(EXTENSION_DESC, bean.getDescription());
resultObject.put(EXTENSION_LOCATION, bean.getLocation());
} catch (JSONException e) {
LOG.error("Exception in buildDetailResults:", e);
throw new FalconException(e);
}
return resultObject;
}

private static JSONArray buildEnumerateResult() throws FalconException {
JSONArray results = new JSONArray();
ExtensionMetaStore metaStore = ExtensionStore.getMetaStore();
List<ExtensionBean> extensionBeanList = metaStore.getAllExtensions();
for (ExtensionBean extensionBean : extensionBeanList) {
JSONObject resultObject = new JSONObject();

try {
resultObject.put(NAME, extensionBean.getExtensionName().toLowerCase());
resultObject.put(EXTENSION_TYPE, extensionBean.getExtensionType());
resultObject.put(EXTENSION_DESC, extensionBean.getDescription());
resultObject.put(EXTENSION_LOCATION, extensionBean.getLocation());
} catch (JSONException e) {
throw new FalconException(e);
}
results.put(resultObject);
}
return results;
}
}
Loading

0 comments on commit 456d4ee

Please sign in to comment.