pkuwm commented on a change in pull request #339: Implementation of
stateModelDef modification in REST 2.0
URL: https://github.com/apache/helix/pull/339#discussion_r305563733
##########
File path:
helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java
##########
@@ -431,9 +426,104 @@ public Response
getClusterStateModelDefinition(@PathParam("clusterId") String cl
StateModelDefinition stateModelDef =
dataAccessor.getProperty(dataAccessor.keyBuilder().stateModelDef(statemodel));
+ if (stateModelDef == null) {
+ return notFound();
+ }
return JSONRepresentation(stateModelDef.getRecord());
}
+ @PUT
+ @Path("{clusterId}/statemodeldefs/{statemodel}")
+ public Response createClusterStateModelDefinition(
+ @PathParam("clusterId") String clusterId,
+ @PathParam("statemodel") String statemodel,
+ String content
+ ) {
+ ZNRecord record;
+ try {
+ record = toZNRecord(content);
+ } catch (IOException e) {
+ _logger.error("Failed to deserialize user's input " + content + ",
Exception: " + e);
+ return badRequest("Input is not a valid ZNRecord!");
+ }
+ HelixZkClient zkClient = getHelixZkClient();
+ String path = PropertyPathBuilder.stateModelDef(clusterId);
+ try {
+ ZKUtil.createChildren(zkClient, path, record);
+ } catch (Exception e) {
+ _logger.error("Failed to create zk node with path " + path + ",
Exception:" + e);
+ return badRequest("Failed to create a Znode for stateModel!");
+ }
+
+ return OK();
+ }
+
+ @POST
+ @Path("{clusterId}/statemodeldefs/{statemodel}")
+ public Response setClusterStateModelDefinition(
+ @PathParam("clusterId") String clusterId,
+ @PathParam("statemodel") String statemodel,
+ String content
+ ) {
+ ZNRecord record;
+ try {
+ record = toZNRecord(content);
+ } catch (IOException e) {
+ _logger.error("Failed to deserialize user's input " + content + ",
Exception: " + e);
+ return badRequest("Input is not a valid ZNRecord!");
+ }
+
+ StateModelDefinition stateModelDefinition = new
StateModelDefinition(record);
+ HelixDataAccessor dataAccessor = getDataAccssor(clusterId);
+
+ PropertyKey key =
dataAccessor.keyBuilder().stateModelDef(stateModelDefinition.getId());
+ boolean retcode = true;
+ try {
+ retcode = dataAccessor.setProperty(key, stateModelDefinition);
+ } catch (Exception e) {
+ _logger.error("Failed to set StateModelDefinition key:" + key + ",
Exception: " + e);
+ retcode = false;
+ }
+ if (!retcode) {
Review comment:
It seems there is no need to have the retcode? If exception is caught, just
return badRequest.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services