diff options
| author | Chris Lu <chris.lu@gmail.com> | 2017-08-29 23:59:53 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2017-08-29 23:59:53 -0700 |
| commit | 58344980e45fb3a1421fe4f2368e95c08b8b18df (patch) | |
| tree | 58624f613fcd389bf40b782d2f9e4a6153187bb8 /weed/server | |
| parent | f7c22f0159b79d4f6d0a63df9597cfb1e9e6155d (diff) | |
| download | seaweedfs-58344980e45fb3a1421fe4f2368e95c08b8b18df.tar.xz seaweedfs-58344980e45fb3a1421fe4f2368e95c08b8b18df.zip | |
preallocate disk space during compaction also, add cleanup for failed compaction
Diffstat (limited to 'weed/server')
| -rw-r--r-- | weed/server/master_server.go | 2 | ||||
| -rw-r--r-- | weed/server/master_server_handlers_admin.go | 2 | ||||
| -rw-r--r-- | weed/server/volume_server.go | 1 | ||||
| -rw-r--r-- | weed/server/volume_server_handlers_vacuum.go | 21 |
4 files changed, 23 insertions, 3 deletions
diff --git a/weed/server/master_server.go b/weed/server/master_server.go index 360c6bb46..8c73b6019 100644 --- a/weed/server/master_server.go +++ b/weed/server/master_server.go @@ -79,7 +79,7 @@ func NewMasterServer(r *mux.Router, port int, metaFolder string, r.HandleFunc("/stats/counter", ms.guard.WhiteList(statsCounterHandler)) r.HandleFunc("/stats/memory", ms.guard.WhiteList(statsMemoryHandler)) - ms.Topo.StartRefreshWritableVolumes(garbageThreshold) + ms.Topo.StartRefreshWritableVolumes(garbageThreshold, ms.preallocate) return ms } diff --git a/weed/server/master_server_handlers_admin.go b/weed/server/master_server_handlers_admin.go index b15125576..8077a0eeb 100644 --- a/weed/server/master_server_handlers_admin.go +++ b/weed/server/master_server_handlers_admin.go @@ -42,7 +42,7 @@ func (ms *MasterServer) volumeVacuumHandler(w http.ResponseWriter, r *http.Reque gcThreshold = ms.garbageThreshold } glog.Infoln("garbageThreshold =", gcThreshold) - ms.Topo.Vacuum(gcThreshold) + ms.Topo.Vacuum(gcThreshold, ms.preallocate) ms.dirStatusHandler(w, r) } diff --git a/weed/server/volume_server.go b/weed/server/volume_server.go index cace8d181..b0620de0b 100644 --- a/weed/server/volume_server.go +++ b/weed/server/volume_server.go @@ -52,6 +52,7 @@ func NewVolumeServer(adminMux, publicMux *http.ServeMux, ip string, adminMux.HandleFunc("/admin/vacuum/check", vs.guard.WhiteList(vs.vacuumVolumeCheckHandler)) adminMux.HandleFunc("/admin/vacuum/compact", vs.guard.WhiteList(vs.vacuumVolumeCompactHandler)) adminMux.HandleFunc("/admin/vacuum/commit", vs.guard.WhiteList(vs.vacuumVolumeCommitHandler)) + adminMux.HandleFunc("/admin/vacuum/cleanup", vs.guard.WhiteList(vs.vacuumVolumeCleanupHandler)) adminMux.HandleFunc("/admin/delete_collection", vs.guard.WhiteList(vs.deleteCollectionHandler)) adminMux.HandleFunc("/admin/sync/status", vs.guard.WhiteList(vs.getVolumeSyncStatusHandler)) adminMux.HandleFunc("/admin/sync/index", vs.guard.WhiteList(vs.getVolumeIndexContentHandler)) diff --git a/weed/server/volume_server_handlers_vacuum.go b/weed/server/volume_server_handlers_vacuum.go index ef348d35c..02b8c5547 100644 --- a/weed/server/volume_server_handlers_vacuum.go +++ b/weed/server/volume_server_handlers_vacuum.go @@ -3,7 +3,9 @@ package weed_server import ( "net/http" + "fmt" "github.com/chrislusf/seaweedfs/weed/glog" + "strconv" ) func (vs *VolumeServer) vacuumVolumeCheckHandler(w http.ResponseWriter, r *http.Request) { @@ -16,7 +18,15 @@ func (vs *VolumeServer) vacuumVolumeCheckHandler(w http.ResponseWriter, r *http. glog.V(2).Infoln("checked compacting volume =", r.FormValue("volume"), "garbageThreshold =", r.FormValue("garbageThreshold"), "vacuum =", ret) } func (vs *VolumeServer) vacuumVolumeCompactHandler(w http.ResponseWriter, r *http.Request) { - err := vs.store.CompactVolume(r.FormValue("volume")) + var preallocate int64 + var err error + if r.FormValue("preallocate") != "" { + preallocate, err = strconv.ParseInt(r.FormValue("preallocate"), 10, 64) + if err != nil { + glog.V(0).Infoln("Failed to parse int64 preallocate = %s: %v", r.FormValue("preallocate"), err) + } + } + err = vs.store.CompactVolume(r.FormValue("volume"), preallocate) if err == nil { writeJsonQuiet(w, r, http.StatusOK, map[string]string{"error": ""}) } else { @@ -33,3 +43,12 @@ func (vs *VolumeServer) vacuumVolumeCommitHandler(w http.ResponseWriter, r *http } glog.V(2).Infoln("commit compact volume =", r.FormValue("volume"), ", error =", err) } +func (vs *VolumeServer) vacuumVolumeCleanupHandler(w http.ResponseWriter, r *http.Request) { + err := vs.store.CommitCleanupVolume(r.FormValue("volume")) + if err == nil { + writeJsonQuiet(w, r, http.StatusOK, map[string]string{"error": ""}) + } else { + writeJsonError(w, r, http.StatusInternalServerError, err) + } + glog.V(2).Infoln("cleanup compact volume =", r.FormValue("volume"), ", error =", err) +} |
