diff options
Diffstat (limited to 'go/weed/volume.go')
| -rw-r--r-- | go/weed/volume.go | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/go/weed/volume.go b/go/weed/volume.go index 33121388e..6cbbceaef 100644 --- a/go/weed/volume.go +++ b/go/weed/volume.go @@ -2,7 +2,7 @@ package main import ( "code.google.com/p/weed-fs/go/operation" - "code.google.com/p/weed-fs/go/replication" + "code.google.com/p/weed-fs/go/replication" "code.google.com/p/weed-fs/go/storage" "log" "math/rand" @@ -38,6 +38,8 @@ var ( maxVolumeCount = cmdVolume.Flag.Int("max", 5, "maximum number of volumes") vReadTimeout = cmdVolume.Flag.Int("readTimeout", 3, "connection read timeout in seconds") vMaxCpu = cmdVolume.Flag.Int("maxCpu", 0, "maximum number of CPUs. 0 means all available CPUs") + dataCenter = cmdVolume.Flag.String("dataCenter", "", "current volume server's data center name") + rack = cmdVolume.Flag.String("rack", "", "current volume server's rack name") store *storage.Store ) @@ -86,6 +88,16 @@ func vacuumVolumeCommitHandler(w http.ResponseWriter, r *http.Request) { } debug("commit compact volume =", r.FormValue("volume"), ", error =", err) } +func freezeVolumeHandler(w http.ResponseWriter, r *http.Request) { + //TODO: notify master that this volume will be read-only + err := store.FreezeVolume(r.FormValue("volume")) + if err == nil { + writeJsonQuiet(w, r, map[string]interface{}{"error": ""}) + } else { + writeJsonQuiet(w, r, map[string]string{"error": err.Error()}) + } + debug("freeze volume =", r.FormValue("volume"), ", error =", err) +} func storeHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": @@ -289,10 +301,13 @@ func runVolume(cmd *Command, args []string) bool { http.HandleFunc("/admin/vacuum_volume_check", vacuumVolumeCheckHandler) http.HandleFunc("/admin/vacuum_volume_compact", vacuumVolumeCompactHandler) http.HandleFunc("/admin/vacuum_volume_commit", vacuumVolumeCommitHandler) + http.HandleFunc("/admin/freeze_volume", freezeVolumeHandler) go func() { connected := true store.SetMaster(*masterNode) + store.SetDataCenter(*dataCenter) + store.SetRack(*rack) for { err := store.Join() if err == nil { |
