diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2017-01-20 10:11:33 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-20 10:11:33 -0800 |
| commit | bfd2739fcee72d46f87de2d15455fc285dd9ecd7 (patch) | |
| tree | fa47ad7f8eace1f1d6b5bab39f074231834d1f5f /weed/server | |
| parent | c8f54aad8b5597caa77143bf12638fa1e80172a3 (diff) | |
| parent | 0656838fe57651f59fc511ce02206ad5736d4ca9 (diff) | |
| download | seaweedfs-bfd2739fcee72d46f87de2d15455fc285dd9ecd7.tar.xz seaweedfs-bfd2739fcee72d46f87de2d15455fc285dd9ecd7.zip | |
Merge pull request #443 from Jaumo/jaumo
Online mount, unmount + deletion of single volumes
Diffstat (limited to 'weed/server')
| -rw-r--r-- | weed/server/volume_server.go | 3 | ||||
| -rw-r--r-- | weed/server/volume_server_handlers_admin.go | 44 | ||||
| -rw-r--r-- | weed/server/volume_server_handlers_sync.go | 17 |
3 files changed, 55 insertions, 9 deletions
diff --git a/weed/server/volume_server.go b/weed/server/volume_server.go index e86c33bda..cc06f0092 100644 --- a/weed/server/volume_server.go +++ b/weed/server/volume_server.go @@ -58,6 +58,9 @@ func NewVolumeServer(adminMux, publicMux *http.ServeMux, ip string, adminMux.HandleFunc("/admin/sync/status", vs.guard.WhiteList(vs.getVolumeSyncStatusHandler)) adminMux.HandleFunc("/admin/sync/index", vs.guard.WhiteList(vs.getVolumeIndexContentHandler)) adminMux.HandleFunc("/admin/sync/data", vs.guard.WhiteList(vs.getVolumeDataContentHandler)) + adminMux.HandleFunc("/admin/volume/mount", vs.guard.WhiteList(vs.getVolumeMountHandler)) + adminMux.HandleFunc("/admin/volume/unmount", vs.guard.WhiteList(vs.getVolumeUnmountHandler)) + adminMux.HandleFunc("/admin/volume/delete", vs.guard.WhiteList(vs.getVolumeDeleteHandler)) adminMux.HandleFunc("/stats/counter", vs.guard.WhiteList(statsCounterHandler)) adminMux.HandleFunc("/stats/memory", vs.guard.WhiteList(statsMemoryHandler)) adminMux.HandleFunc("/stats/disk", vs.guard.WhiteList(vs.statsDiskHandler)) 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") +} diff --git a/weed/server/volume_server_handlers_sync.go b/weed/server/volume_server_handlers_sync.go index 8a2e30743..68c381e28 100644 --- a/weed/server/volume_server_handlers_sync.go +++ b/weed/server/volume_server_handlers_sync.go @@ -68,20 +68,19 @@ func (vs *VolumeServer) getVolumeDataContentHandler(w http.ResponseWriter, r *ht w.Write(content) } -func (vs *VolumeServer) getVolume(volumeParameterName string, r *http.Request) (*storage.Volume, error) { +func (vs *VolumeServer) getVolumeId(volumeParameterName string, r *http.Request) (storage.VolumeId, error) { volumeIdString := r.FormValue(volumeParameterName) + if volumeIdString == "" { err := fmt.Errorf("Empty Volume Id: Need to pass in %s=the_volume_id.", volumeParameterName) - return nil, err + return 0, err } + vid, err := storage.NewVolumeId(volumeIdString) if err != nil { err = fmt.Errorf("Volume Id %s is not a valid unsigned integer", volumeIdString) - return nil, err - } - v := vs.store.GetVolume(vid) - if v == nil { - return nil, fmt.Errorf("Not Found Volume Id %s: %d", volumeIdString, vid) + return 0, err } - return v, nil -} + + return vid, err +}
\ No newline at end of file |
