aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/seaweedfs-mount/main.go68
-rwxr-xr-xseaweedfs-mountbin0 -> 8624834 bytes
2 files changed, 27 insertions, 41 deletions
diff --git a/cmd/seaweedfs-mount/main.go b/cmd/seaweedfs-mount/main.go
index 8d314e9..01ed49d 100644
--- a/cmd/seaweedfs-mount/main.go
+++ b/cmd/seaweedfs-mount/main.go
@@ -48,47 +48,8 @@ func main() {
manager := mountmanager.NewManager(mountmanager.Config{WeedBinary: *weedBinary})
mux := http.NewServeMux()
- mux.HandleFunc("/mount", func(w http.ResponseWriter, r *http.Request) {
- if r.Method != http.MethodPost {
- writeError(w, http.StatusMethodNotAllowed, "method not allowed")
- return
- }
-
- var req mountmanager.MountRequest
- if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
- writeError(w, http.StatusBadRequest, "invalid request: "+err.Error())
- return
- }
-
- resp, err := manager.Mount(&req)
- if err != nil {
- writeError(w, http.StatusInternalServerError, err.Error())
- return
- }
-
- writeJSON(w, http.StatusOK, resp)
- })
-
- mux.HandleFunc("/unmount", func(w http.ResponseWriter, r *http.Request) {
- if r.Method != http.MethodPost {
- writeError(w, http.StatusMethodNotAllowed, "method not allowed")
- return
- }
-
- var req mountmanager.UnmountRequest
- if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
- writeError(w, http.StatusBadRequest, "invalid request: "+err.Error())
- return
- }
-
- resp, err := manager.Unmount(&req)
- if err != nil {
- writeError(w, http.StatusInternalServerError, err.Error())
- return
- }
-
- writeJSON(w, http.StatusOK, resp)
- })
+ mux.HandleFunc("/mount", makePostHandler(manager.Mount))
+ mux.HandleFunc("/unmount", makePostHandler(manager.Unmount))
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
@@ -130,3 +91,28 @@ func writeJSON(w http.ResponseWriter, status int, data interface{}) {
func writeError(w http.ResponseWriter, status int, message string) {
writeJSON(w, status, mountmanager.ErrorResponse{Error: message})
}
+
+// makePostHandler creates a generic HTTP POST handler that decodes JSON request,
+// calls the manager function, and encodes the JSON response.
+func makePostHandler[Req any, Resp any](managerFunc func(*Req) (*Resp, error)) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ if r.Method != http.MethodPost {
+ writeError(w, http.StatusMethodNotAllowed, "method not allowed")
+ return
+ }
+
+ var req Req
+ if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
+ writeError(w, http.StatusBadRequest, "invalid request: "+err.Error())
+ return
+ }
+
+ resp, err := managerFunc(&req)
+ if err != nil {
+ writeError(w, http.StatusInternalServerError, err.Error())
+ return
+ }
+
+ writeJSON(w, http.StatusOK, resp)
+ }
+}
diff --git a/seaweedfs-mount b/seaweedfs-mount
new file mode 100755
index 0000000..914d7a2
--- /dev/null
+++ b/seaweedfs-mount
Binary files differ