aboutsummaryrefslogtreecommitdiff
path: root/weed/server/volume_server_handlers_admin.go
diff options
context:
space:
mode:
authorbrstgt <brstgt@googlemail.com>2017-01-20 13:02:37 +0100
committerbrstgt <brstgt@googlemail.com>2017-01-20 13:02:37 +0100
commite074a54a2080a13af7526c66ac60ad8a7ee9859a (patch)
tree6cd351c51248a0bce9e1b1047feb6c0f6de16320 /weed/server/volume_server_handlers_admin.go
parent492f93416d98b9d6342f10450af32185892605cf (diff)
downloadseaweedfs-e074a54a2080a13af7526c66ac60ad8a7ee9859a.tar.xz
seaweedfs-e074a54a2080a13af7526c66ac60ad8a7ee9859a.zip
Delete volumes online without restarting volume server
Diffstat (limited to 'weed/server/volume_server_handlers_admin.go')
-rw-r--r--weed/server/volume_server_handlers_admin.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/weed/server/volume_server_handlers_admin.go b/weed/server/volume_server_handlers_admin.go
index 28631dac7..79bb89756 100644
--- a/weed/server/volume_server_handlers_admin.go
+++ b/weed/server/volume_server_handlers_admin.go
@@ -1,6 +1,7 @@
package weed_server
import (
+ "fmt"
"net/http"
"path/filepath"
"strconv"
@@ -8,6 +9,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/stats"
"github.com/chrislusf/seaweedfs/weed/util"
+ "github.com/chrislusf/seaweedfs/weed/storage"
)
func (vs *VolumeServer) statusHandler(w http.ResponseWriter, r *http.Request) {
@@ -65,3 +67,45 @@ func (vs *VolumeServer) statsDiskHandler(w http.ResponseWriter, r *http.Request)
m["DiskStatuses"] = ds
writeJsonQuiet(w, r, http.StatusOK, m)
}
+
+func (vs *VolumeServer) getVolume(volumeParameterName string, r *http.Request) (*storage.Volume, error) {
+ vid, err := vs.getVolumeId(volumeParameterName, r)
+ if err != nil {
+ return nil, err
+ }
+ v := vs.store.GetVolume(vid)
+ if v == nil {
+ return nil, fmt.Errorf("Not Found Volume Id %d", vid)
+ }
+ return v, nil
+}
+
+func (vs *VolumeServer) getVolumeMountHandler(w http.ResponseWriter, r *http.Request) {
+ vid, err := vs.getVolumeId("volume", r)
+ if err != nil {
+ writeJsonError(w, r, http.StatusNotFound, err)
+ return
+ }
+ vs.store.MountVolume(vid)
+ writeJsonQuiet(w, r, http.StatusOK, "Volume mounted")
+}
+
+func (vs *VolumeServer) getVolumeUnmountHandler(w http.ResponseWriter, r *http.Request) {
+ vid, err := vs.getVolumeId("volume", r)
+ if err != nil {
+ writeJsonError(w, r, http.StatusNotFound, err)
+ return
+ }
+ vs.store.UnmountVolume(vid)
+ writeJsonQuiet(w, r, http.StatusOK, "Volume unmounted")
+}
+
+func (vs *VolumeServer) getVolumeDeleteHandler(w http.ResponseWriter, r *http.Request) {
+ vid, err := vs.getVolumeId("volume", r)
+ if err != nil {
+ writeJsonError(w, r, http.StatusNotFound, err)
+ return
+ }
+ vs.store.DeleteVolume(vid)
+ writeJsonQuiet(w, r, http.StatusOK, "Volume deleted")
+}