You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myriad.apache.org by mo...@apache.org on 2015/09/26 00:02:32 UTC
[06/28] incubator-myriad git commit: Fixes #78 Parameter verification
in API
Fixes #78 Parameter verification in API
Project: http://git-wip-us.apache.org/repos/asf/incubator-myriad/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-myriad/commit/f497ffcb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-myriad/tree/f497ffcb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-myriad/diff/f497ffcb
Branch: refs/heads/phase1
Commit: f497ffcb34ba0eff0083f9ca5705ca3cb9f6d725
Parents: 9a8a57c
Author: klucar <kl...@gmail.com>
Authored: Fri Jun 12 15:38:26 2015 -0400
Committer: klucar <kl...@gmail.com>
Committed: Fri Jun 12 15:38:26 2015 -0400
----------------------------------------------------------------------
.../com/ebay/myriad/api/ClustersResource.java | 73 +++++++++++++++++---
.../ebay/myriad/scheduler/NMProfileManager.java | 4 ++
2 files changed, 66 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/f497ffcb/myriad-scheduler/src/main/java/com/ebay/myriad/api/ClustersResource.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/com/ebay/myriad/api/ClustersResource.java b/myriad-scheduler/src/main/java/com/ebay/myriad/api/ClustersResource.java
index fe8474f..e514bcb 100644
--- a/myriad-scheduler/src/main/java/com/ebay/myriad/api/ClustersResource.java
+++ b/myriad-scheduler/src/main/java/com/ebay/myriad/api/ClustersResource.java
@@ -60,38 +60,89 @@ public class ClustersResource {
@Timed
@PUT
@Path("/flexup")
- @Produces(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_JSON)
public Response flexUp(FlexUpClusterRequest request) {
Preconditions.checkNotNull(request,
"request object cannot be null or empty");
- // TODO(mohit): Validation
LOGGER.info("Received Flexup Cluster Request");
-
Integer instances = request.getInstances();
String profile = request.getProfile();
- LOGGER.info("Instances: ", instances);
- LOGGER.info("Profile: ", profile);
+ LOGGER.info("Instances: {}", instances);
+ LOGGER.info("Profile: {}", profile);
+
+ // Validate profile request
+ Response.ResponseBuilder response = Response.status(Response.Status.ACCEPTED);
+ if (!this.profileManager.exists(profile)) {
+ response.status(Response.Status.BAD_REQUEST)
+ .entity("Profile does not exist: " + profile);
+ LOGGER.error("Provided profile does not exist " + profile);
+ } else if (!this.isValidInstanceSize(instances)) {
+ response.status(Response.Status.BAD_REQUEST)
+ .entity("Invalid instance size: " + instances);
+ LOGGER.error("Invalid instance size request " + instances);
+ }
- this.myriadOperations.flexUpCluster(instances, profile);
- return Response.ok().build();
+ Response returnResponse = response.build();
+ if (returnResponse.getStatus() == Response.Status.ACCEPTED.getStatusCode()) {
+ this.myriadOperations.flexUpCluster(instances, profile);
+ }
+
+ return returnResponse;
}
@Timed
@PUT
@Path("/flexdown")
- @Produces(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_JSON)
public Response flexDown(FlexDownClusterRequest request) {
Preconditions.checkNotNull(request,
"request object cannot be null or empty");
- // TODO(mohit): Make safer.
- this.myriadOperations.flexDownCluster(request.getInstances());
- return Response.ok().build();
+ Integer instances = request.getInstances();
+
+ LOGGER.info("Received flexdown request");
+ LOGGER.info("Instances: " + instances);
+
+ Response.ResponseBuilder response = Response.status(Response.Status.ACCEPTED);
+
+ if (!this.isValidInstanceSize(instances)) {
+ response.status(Response.Status.BAD_REQUEST)
+ .entity("Invalid instance size: " + instances);
+ LOGGER.error("Invalid instance size request " + instances);
+ }
+
+ // warn that number of requested instances isn't available
+ // but instances will still be flexed down
+ Integer flexibleInstances = this.getFlexibleInstances();
+ if (flexibleInstances < instances) {
+ response.entity("Number of requested instances is greater than available.");
+ // just doing a simple check here. pass the requested number of instances
+ // to myriadOperations and let it sort out how many actually get flexxed down.
+ LOGGER.warn("Requested number of instances greater than available: {} < {}", flexibleInstances, instances);
+ }
+
+ Response returnResponse = response.build();
+ if (returnResponse.getStatus() == Response.Status.ACCEPTED.getStatusCode()) {
+ this.myriadOperations.flexDownCluster(instances);
+ }
+ return returnResponse;
+ }
+
+ private boolean isValidInstanceSize(Integer instances) {
+ return (instances > 0);
+ }
+
+ // TODO (mohit): put this in Myriad Operations?
+ private Integer getFlexibleInstances() {
+ // this follows the logic of myriadOperations.flexDownCluster
+ return this.schedulerState.getActiveTaskIds().size()
+ + this.schedulerState.getStagingTaskIds().size()
+ + this.schedulerState.getPendingTaskIds().size();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/f497ffcb/myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/NMProfileManager.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/NMProfileManager.java b/myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/NMProfileManager.java
index 317290b..50bc66f 100644
--- a/myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/NMProfileManager.java
+++ b/myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/NMProfileManager.java
@@ -41,6 +41,10 @@ public class NMProfileManager {
profiles.put(profile.getName(), profile);
}
+ public boolean exists(String name) {
+ return this.profiles.containsKey(name);
+ }
+
public String toString() {
Gson gson = new Gson();
return gson.toJson(this);