You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ki...@apache.org on 2020/08/30 08:02:18 UTC
[incubator-pinot] 02/02: Adding api to edit ZK path
This is an automated email from the ASF dual-hosted git repository.
kishoreg pushed a commit to branch zookeeper-put-api
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit 418b6ad24e53f5a177da5aec586e78ff99e94e33
Author: kishoreg <g....@gmail.com>
AuthorDate: Sun Aug 30 01:01:44 2020 -0700
Adding api to edit ZK path
---
.../api/resources/ZookeeperResource.java | 38 ++++++++++++++++++++++
.../helix/core/PinotHelixResourceManager.java | 4 +++
2 files changed, 42 insertions(+)
diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/ZookeeperResource.java b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/ZookeeperResource.java
index 3093052..f4c00ba 100644
--- a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/ZookeeperResource.java
+++ b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/ZookeeperResource.java
@@ -19,6 +19,7 @@
package org.apache.pinot.controller.api.resources;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.google.common.base.Charsets;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -30,11 +31,14 @@ import java.util.Map;
import javax.inject.Inject;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.apache.helix.AccessOption;
import org.apache.helix.ZNRecord;
import org.apache.helix.manager.zk.ZNRecordSerializer;
import org.apache.pinot.controller.helix.core.PinotHelixResourceManager;
@@ -75,6 +79,40 @@ public class ZookeeperResource {
return null;
}
+ @PUT
+ @Path("/zk/put")
+ @Produces(MediaType.TEXT_PLAIN)
+ @ApiOperation(value = "Get content of the znode")
+ @ApiResponses(value = { //
+ @ApiResponse(code = 200, message = "Success"), //
+ @ApiResponse(code = 404, message = "ZK Path not found"), //
+ @ApiResponse(code = 204, message = "No Content"), //
+ @ApiResponse(code = 500, message = "Internal server error")})
+ public SuccessResponse putData(
+ @ApiParam(value = "Zookeeper Path, must start with /", required = true, defaultValue = "/") @QueryParam("path") @DefaultValue("") String path,
+ @ApiParam(value = "Content", required = true) @QueryParam("data") @DefaultValue("") String content,
+ @ApiParam(value = "expectedVersion", required = true, defaultValue = "-1") @QueryParam("expectedVersion") @DefaultValue("-1") String expectedVersion,
+ @ApiParam(value = "accessOption", required = true, defaultValue = "1") @QueryParam("accessOption") @DefaultValue("1") String accessOption) {
+ path = validateAndNormalizeZKPath(path);
+ ZNRecord record = null;
+ if (content != null) {
+ record = (ZNRecord) _znRecordSerializer.deserialize(content.getBytes(Charsets.UTF_8));
+ }
+ try {
+ boolean result = pinotHelixResourceManager
+ .setZKData(path, record, Integer.parseInt(expectedVersion), Integer.parseInt(accessOption));
+ if (result) {
+ return new SuccessResponse("Successfully Updated path: " + path);
+ } else {
+ throw new ControllerApplicationException(LOGGER, "Failed to update path: " + path,
+ Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ } catch (Exception e) {
+ throw new ControllerApplicationException(LOGGER, "Failed to update path: " + path,
+ Response.Status.INTERNAL_SERVER_ERROR, e);
+ }
+ }
+
@GET
@Path("/zk/ls")
@Produces(MediaType.APPLICATION_JSON)
diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java
index 7b6c468..f07b6be 100644
--- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java
+++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java
@@ -1191,6 +1191,10 @@ public class PinotHelixResourceManager {
}
}
+ public boolean setZKData(String path, ZNRecord record, int expectedVersion, int accessOption) {
+ return _helixDataAccessor.getBaseDataAccessor().set(path, record, expectedVersion, accessOption);
+ }
+
public ZNRecord readZKData(String path) {
return _helixDataAccessor.getBaseDataAccessor().get(path, null, -1);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org