aboutsummaryrefslogtreecommitdiff
path: root/weed/server
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2017-08-29 23:59:53 -0700
committerChris Lu <chris.lu@gmail.com>2017-08-29 23:59:53 -0700
commit58344980e45fb3a1421fe4f2368e95c08b8b18df (patch)
tree58624f613fcd389bf40b782d2f9e4a6153187bb8 /weed/server
parentf7c22f0159b79d4f6d0a63df9597cfb1e9e6155d (diff)
downloadseaweedfs-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.go2
-rw-r--r--weed/server/master_server_handlers_admin.go2
-rw-r--r--weed/server/volume_server.go1
-rw-r--r--weed/server/volume_server_handlers_vacuum.go21
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)
+}