aboutsummaryrefslogtreecommitdiff
path: root/weed/server
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server')
-rw-r--r--weed/server/master_server.go8
-rw-r--r--weed/server/master_server_handlers_admin.go8
-rw-r--r--weed/server/volume_server_handlers_admin.go23
3 files changed, 36 insertions, 3 deletions
diff --git a/weed/server/master_server.go b/weed/server/master_server.go
index 61bda6988..9f59c2400 100644
--- a/weed/server/master_server.go
+++ b/weed/server/master_server.go
@@ -20,6 +20,7 @@ type MasterServer struct {
port int
metaFolder string
volumeSizeLimitMB uint
+ preallocate int64
pulseSeconds int
defaultReplicaPlacement string
garbageThreshold string
@@ -34,6 +35,7 @@ type MasterServer struct {
func NewMasterServer(r *mux.Router, port int, metaFolder string,
volumeSizeLimitMB uint,
+ preallocate bool,
pulseSeconds int,
confFile string,
defaultReplicaPlacement string,
@@ -41,9 +43,15 @@ func NewMasterServer(r *mux.Router, port int, metaFolder string,
whiteList []string,
secureKey string,
) *MasterServer {
+
+ var preallocateSize int64
+ if preallocate {
+ preallocateSize = int64(volumeSizeLimitMB) * (1 << 20)
+ }
ms := &MasterServer{
port: port,
volumeSizeLimitMB: volumeSizeLimitMB,
+ preallocate: preallocateSize,
pulseSeconds: pulseSeconds,
defaultReplicaPlacement: defaultReplicaPlacement,
garbageThreshold: garbageThreshold,
diff --git a/weed/server/master_server_handlers_admin.go b/weed/server/master_server_handlers_admin.go
index a762bf416..efe81bf89 100644
--- a/weed/server/master_server_handlers_admin.go
+++ b/weed/server/master_server_handlers_admin.go
@@ -181,10 +181,18 @@ func (ms *MasterServer) getVolumeGrowOption(r *http.Request) (*topology.VolumeGr
if err != nil {
return nil, err
}
+ preallocate := ms.preallocate
+ if r.FormValue("preallocate") != "" {
+ preallocate, err = strconv.ParseInt(r.FormValue("preallocate"), 10, 64)
+ if err != nil {
+ return nil, fmt.Errorf("Failed to parse int64 preallocate = %s: %v", r.FormValue("preallocate"), err)
+ }
+ }
volumeGrowOption := &topology.VolumeGrowOption{
Collection: r.FormValue("collection"),
ReplicaPlacement: replicaPlacement,
Ttl: ttl,
+ Prealloacte: preallocate,
DataCenter: r.FormValue("dataCenter"),
Rack: r.FormValue("rack"),
DataNode: r.FormValue("dataNode"),
diff --git a/weed/server/volume_server_handlers_admin.go b/weed/server/volume_server_handlers_admin.go
index ae9817ef6..28631dac7 100644
--- a/weed/server/volume_server_handlers_admin.go
+++ b/weed/server/volume_server_handlers_admin.go
@@ -3,6 +3,7 @@ package weed_server
import (
"net/http"
"path/filepath"
+ "strconv"
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/stats"
@@ -17,13 +18,29 @@ func (vs *VolumeServer) statusHandler(w http.ResponseWriter, r *http.Request) {
}
func (vs *VolumeServer) assignVolumeHandler(w http.ResponseWriter, r *http.Request) {
- err := vs.store.AddVolume(r.FormValue("volume"), r.FormValue("collection"), vs.needleMapKind, r.FormValue("replication"), r.FormValue("ttl"))
+ var err error
+ preallocate := int64(0)
+ if r.FormValue("preallocate") != "" {
+ preallocate, err = strconv.ParseInt(r.FormValue("preallocate"), 10, 64)
+ if err != nil {
+ glog.V(0).Infoln("ignoring invalid int64 value for preallocate = %v", r.FormValue("preallocate"))
+ }
+ }
+ err = vs.store.AddVolume(
+ r.FormValue("volume"),
+ r.FormValue("collection"),
+ vs.needleMapKind,
+ r.FormValue("replication"),
+ r.FormValue("ttl"),
+ preallocate,
+ )
if err == nil {
writeJsonQuiet(w, r, http.StatusAccepted, map[string]string{"error": ""})
} else {
writeJsonError(w, r, http.StatusNotAcceptable, err)
}
- glog.V(2).Infoln("assign volume =", r.FormValue("volume"), ", collection =", r.FormValue("collection"), ", replication =", r.FormValue("replication"), ", error =", err)
+ glog.V(2).Infoln("assign volume = %s, collection = %s , replication = %s, error = %v",
+ r.FormValue("volume"), r.FormValue("collection"), r.FormValue("replication"), err)
}
func (vs *VolumeServer) deleteCollectionHandler(w http.ResponseWriter, r *http.Request) {
@@ -33,7 +50,7 @@ func (vs *VolumeServer) deleteCollectionHandler(w http.ResponseWriter, r *http.R
} else {
writeJsonError(w, r, http.StatusInternalServerError, err)
}
- glog.V(2).Infoln("deleting collection =", r.FormValue("collection"), ", error =", err)
+ glog.V(2).Infof("deleting collection = %s, error = %v", r.FormValue("collection"), err)
}
func (vs *VolumeServer) statsDiskHandler(w http.ResponseWriter, r *http.Request) {