-
Notifications
You must be signed in to change notification settings - Fork 580
fix: fix inconsistent naming pattern #2945
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
b105e2c
bda5d52
339117d
5e5063d
a4abb37
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -23,6 +23,8 @@ | |||||
| import java.util.List; | ||||||
| import java.util.Map; | ||||||
|
|
||||||
| import javax.servlet.http.HttpServletRequest; | ||||||
|
|
||||||
| import org.apache.hugegraph.pd.common.PDException; | ||||||
| import org.apache.hugegraph.pd.grpc.Metapb; | ||||||
| import org.apache.hugegraph.rocksdb.access.RocksDBSession; | ||||||
|
|
@@ -37,7 +39,9 @@ | |||||
| import org.apache.hugegraph.store.node.grpc.HgStoreNodeService; | ||||||
| import org.apache.hugegraph.util.Bytes; | ||||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||||
| import org.springframework.http.HttpStatus; | ||||||
| import org.springframework.http.MediaType; | ||||||
| import org.springframework.http.ResponseEntity; | ||||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||||
| import org.springframework.web.bind.annotation.PathVariable; | ||||||
| import org.springframework.web.bind.annotation.PostMapping; | ||||||
|
|
@@ -64,7 +68,7 @@ public class PartitionAPI { | |||||
| AppConfig appConfig; | ||||||
|
|
||||||
| @GetMapping(value = "/partitions", produces = "application/json") | ||||||
| public Map<String, Object> getPartitions( | ||||||
| public ResponseEntity<Map<String, Object>> getPartitions( | ||||||
| @RequestParam(required = false, defaultValue = "") String flags) { | ||||||
|
|
||||||
| boolean accurate = false; | ||||||
|
|
@@ -109,11 +113,11 @@ public Map<String, Object> getPartitions( | |||||
| rafts.add(raft); | ||||||
| } | ||||||
|
|
||||||
| return okMap("partitions", rafts); | ||||||
| return ok("partitions", rafts); | ||||||
| } | ||||||
|
|
||||||
| @GetMapping(value = "/partition/{id}", produces = "application/json") | ||||||
| public Raft getPartition(@PathVariable(value = "id") int id) { | ||||||
| public ResponseEntity<Map<String, Object>> getPartition(@PathVariable(value = "id") int id) { | ||||||
|
|
||||||
| HgStoreEngine storeEngine = nodeService.getStoreEngine(); | ||||||
|
|
||||||
|
|
@@ -138,16 +142,15 @@ public Raft getPartition(@PathVariable(value = "id") int id) { | |||||
| raft.getPartitions().add(partition); | ||||||
| } | ||||||
|
|
||||||
| return raft; | ||||||
| //return okMap("partition", rafts); | ||||||
| return ok("raft", raft); | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Before this PR, this endpoint serialized the If the goal here is only to return a proper HTTP status for |
||||||
| } | ||||||
|
|
||||||
| /** | ||||||
| * Print all keys in the partition | ||||||
| */ | ||||||
| @GetMapping(value = "/partition/dump/{id}", produces = MediaType.APPLICATION_JSON_VALUE) | ||||||
| public Map<String, Object> dumpPartition(@PathVariable(value = "id") int id) throws | ||||||
| PDException { | ||||||
| public ResponseEntity<Map<String, Object>> dumpPartition( | ||||||
| @PathVariable(value = "id") int id) throws PDException { | ||||||
| HgStoreEngine storeEngine = nodeService.getStoreEngine(); | ||||||
| BusinessHandler handler = storeEngine.getBusinessHandler(); | ||||||
| InnerKeyCreator innerKeyCreator = new InnerKeyCreator(handler); | ||||||
|
|
@@ -168,27 +171,40 @@ public Map<String, Object> dumpPartition(@PathVariable(value = "id") int id) thr | |||||
| } | ||||||
| cfIterator.close(); | ||||||
| }); | ||||||
| return okMap("ok", null); | ||||||
| return ok("ok", null); | ||||||
| } | ||||||
|
|
||||||
| /** | ||||||
| * Print all keys in the partition | ||||||
| */ | ||||||
| @GetMapping(value = "/partition/clean/{id}", produces = MediaType.APPLICATION_JSON_VALUE) | ||||||
| public Map<String, Object> cleanPartition(@PathVariable(value = "id") int id) throws | ||||||
| PDException { | ||||||
| public ResponseEntity<Map<String, Object>> cleanPartition( | ||||||
| @PathVariable(value = "id") int id) throws PDException { | ||||||
| HgStoreEngine storeEngine = nodeService.getStoreEngine(); | ||||||
JisoLya marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
| BusinessHandler handler = storeEngine.getBusinessHandler(); | ||||||
|
|
||||||
| storeEngine.getPartitionEngine(id).getPartitions().forEach((graph, partition) -> { | ||||||
| handler.cleanPartition(graph, id); | ||||||
| }); | ||||||
| return okMap("ok", null); | ||||||
| return ok("ok", null); | ||||||
| } | ||||||
|
|
||||||
| @GetMapping(value = "/arthasstart", produces = "application/json") | ||||||
JisoLya marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
| public Map<String, Object> arthasstart( | ||||||
| @RequestParam(required = false, defaultValue = "") String flags) { | ||||||
| public ResponseEntity<Map<String, Object>> arthasstart( | ||||||
JisoLya marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
| @RequestParam(required = false, defaultValue = "") String flags, | ||||||
| HttpServletRequest request) { | ||||||
| // Ignore proxy headers to prevent IP spoofing. | ||||||
| // NOTE: If behind a reverse proxy (e.g., Nginx), getRemoteAddr() returns the proxy's IP. | ||||||
| // Ensure the proxy is configured to block untrusted external access. | ||||||
| String remoteAddr = getCleanIp(request.getRemoteAddr()); | ||||||
| boolean isLocalRequest = | ||||||
| "127.0.0.1".equals(remoteAddr) || "0:0:0:0:0:0:0:1".equals(remoteAddr) || | ||||||
| "::1".equals(remoteAddr); | ||||||
| if (!isLocalRequest) { | ||||||
| List<String> ret = new ArrayList<>(); | ||||||
| ret.add("Arthas start is ONLY allowed from localhost."); | ||||||
| return forbidden("arthasstart", ret); | ||||||
| } | ||||||
| HashMap<String, String> configMap = new HashMap<>(); | ||||||
| configMap.put("arthas.telnetPort", appConfig.getArthasConfig().getTelnetPort()); | ||||||
| configMap.put("arthas.httpPort", appConfig.getArthasConfig().getHttpPort()); | ||||||
|
|
@@ -198,11 +214,11 @@ public Map<String, Object> arthasstart( | |||||
| // DashResponse retPose = new DashResponse(); | ||||||
| List<String> ret = new ArrayList<>(); | ||||||
| ret.add("Arthas started successfully"); | ||||||
| return okMap("arthasstart", ret); | ||||||
| return ok("arthasstart", ret); | ||||||
| } | ||||||
|
|
||||||
| @PostMapping("/compat") | ||||||
| public Map<String, Object> compact(@RequestParam(value = "id") int id) { | ||||||
| public ResponseEntity<Map<String, Object>> compact(@RequestParam(value = "id") int id) { | ||||||
| boolean submitted = | ||||||
| nodeService.getStoreEngine().getBusinessHandler().blockingCompact("", id); | ||||||
| Map<String, Object> map = new HashMap<>(); | ||||||
|
|
@@ -215,14 +231,28 @@ public Map<String, Object> compact(@RequestParam(value = "id") int id) { | |||||
| map.put("msg", | ||||||
| "compaction task fail to submit, and there could be another task in progress"); | ||||||
| } | ||||||
| return map; | ||||||
| return ok("body", map); | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Previously the response was the compaction result itself: If we only need an HTTP 200 transport status here, we can keep the original JSON contract:
Suggested change
|
||||||
| } | ||||||
|
|
||||||
| public Map<String, Object> okMap(String k, Object v) { | ||||||
| Map<String, Object> map = new HashMap<>(); | ||||||
| map.put("status", 0); | ||||||
| map.put(k, v); | ||||||
| return map; | ||||||
| public ResponseEntity<Map<String, Object>> ok(String k, Object v) { | ||||||
| return ResponseEntity.ok(Map.of("status", 200, k, v)); | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
To keep the transport semantics improvement without breaking body-level consumers, the helper should preserve the old success code:
Suggested change
|
||||||
| } | ||||||
|
|
||||||
| public ResponseEntity<Map<String, Object>> forbidden(String k, Object v) { | ||||||
| return ResponseEntity.status(HttpStatus.FORBIDDEN) | ||||||
| .body(Map.of("status", 403, k, v)); | ||||||
| } | ||||||
|
|
||||||
| private String getCleanIp(String remoteAddr) { | ||||||
| if (remoteAddr != null) { | ||||||
| if (remoteAddr.startsWith("[")) { | ||||||
| remoteAddr = remoteAddr.substring(1); | ||||||
| } | ||||||
| if (remoteAddr.endsWith("]")) { | ||||||
| remoteAddr = remoteAddr.substring(0, remoteAddr.length() - 1); | ||||||
| } | ||||||
| } | ||||||
| return remoteAddr; | ||||||
| } | ||||||
|
|
||||||
| @Data | ||||||
|
|
||||||
Uh oh!
There was an error while loading. Please reload this page.