aboutsummaryrefslogtreecommitdiff
path: root/go/weed
diff options
context:
space:
mode:
Diffstat (limited to 'go/weed')
-rw-r--r--go/weed/filer.go8
-rw-r--r--go/weed/server.go6
-rw-r--r--go/weed/weed_server/filer_server.go22
-rw-r--r--go/weed/weed_server/filer_server_handlers.go12
4 files changed, 35 insertions, 13 deletions
diff --git a/go/weed/filer.go b/go/weed/filer.go
index b3fc9c878..5ae3a3496 100644
--- a/go/weed/filer.go
+++ b/go/weed/filer.go
@@ -21,6 +21,7 @@ type FilerOptions struct {
collection *string
defaultReplicaPlacement *string
dir *string
+ redirectOnRead *bool
}
func init() {
@@ -29,7 +30,8 @@ func init() {
f.collection = cmdFiler.Flag.String("collection", "", "all data will be stored in this collection")
f.port = cmdFiler.Flag.Int("port", 8888, "filer server http listen port")
f.dir = cmdFiler.Flag.String("dir", os.TempDir(), "directory to store meta data")
- f.defaultReplicaPlacement = cmdFiler.Flag.String("defaultReplicaPlacement", "000", "Default replication type if not specified.")
+ f.defaultReplicaPlacement = cmdFiler.Flag.String("defaultReplicaPlacement", "000", "default replication type if not specified")
+ f.redirectOnRead = cmdFiler.Flag.Bool("redirectOnRead", false, "whether proxy or redirect to volume server during file GET request")
}
var cmdFiler = &Command{
@@ -60,7 +62,9 @@ func runFiler(cmd *Command, args []string) bool {
}
r := http.NewServeMux()
- _, nfs_err := weed_server.NewFilerServer(r, *f.port, *f.master, *f.dir, *f.collection)
+ _, nfs_err := weed_server.NewFilerServer(r, *f.port, *f.master, *f.dir, *f.collection,
+ *f.defaultReplicaPlacement, *f.redirectOnRead,
+ )
if nfs_err != nil {
glog.Fatalf(nfs_err.Error())
}
diff --git a/go/weed/server.go b/go/weed/server.go
index 38ccdc137..22222d699 100644
--- a/go/weed/server.go
+++ b/go/weed/server.go
@@ -79,6 +79,8 @@ func init() {
filerOptions.port = cmdServer.Flag.Int("filer.port", 8888, "filer server http listen port")
filerOptions.dir = cmdServer.Flag.String("filer.dir", "", "directory to store meta data, default to a 'filer' sub directory of what -mdir is specified")
filerOptions.defaultReplicaPlacement = cmdServer.Flag.String("filer.defaultReplicaPlacement", "", "Default replication type if not specified during runtime.")
+ filerOptions.redirectOnRead = cmdServer.Flag.Bool("filer.redirectOnRead", false, "whether proxy or redirect to volume server during file GET request")
+
}
func runServer(cmd *Command, args []string) bool {
@@ -150,7 +152,9 @@ func runServer(cmd *Command, args []string) bool {
if *isStartingFiler {
go func() {
r := http.NewServeMux()
- _, nfs_err := weed_server.NewFilerServer(r, *filerOptions.port, *filerOptions.master, *filerOptions.dir, *filerOptions.collection)
+ _, nfs_err := weed_server.NewFilerServer(r, *filerOptions.port, *filerOptions.master, *filerOptions.dir, *filerOptions.collection,
+ *filerOptions.defaultReplicaPlacement, *filerOptions.redirectOnRead,
+ )
if nfs_err != nil {
glog.Fatalf(nfs_err.Error())
}
diff --git a/go/weed/weed_server/filer_server.go b/go/weed/weed_server/filer_server.go
index 9d6f7c71b..0bda58d06 100644
--- a/go/weed/weed_server/filer_server.go
+++ b/go/weed/weed_server/filer_server.go
@@ -9,17 +9,23 @@ import (
)
type FilerServer struct {
- port string
- master string
- collection string
- filer filer.Filer
+ port string
+ master string
+ collection string
+ defaultReplication string
+ redirectOnRead bool
+ filer filer.Filer
}
-func NewFilerServer(r *http.ServeMux, port int, master string, dir string, collection string) (fs *FilerServer, err error) {
+func NewFilerServer(r *http.ServeMux, port int, master string, dir string, collection string,
+ replication string, redirectOnRead bool,
+) (fs *FilerServer, err error) {
fs = &FilerServer{
- master: master,
- collection: collection,
- port: ":" + strconv.Itoa(port),
+ master: master,
+ collection: collection,
+ defaultReplication: replication,
+ redirectOnRead: redirectOnRead,
+ port: ":" + strconv.Itoa(port),
}
if fs.filer, err = filer.NewFilerEmbedded(master, dir); err != nil {
diff --git a/go/weed/weed_server/filer_server_handlers.go b/go/weed/weed_server/filer_server_handlers.go
index 781d7c0fc..9d8481ac9 100644
--- a/go/weed/weed_server/filer_server_handlers.go
+++ b/go/weed/weed_server/filer_server_handlers.go
@@ -81,7 +81,11 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request,
return
}
urlLocation := lookup.Locations[rand.Intn(len(lookup.Locations))].PublicUrl
- u, _ := url.Parse("http://" + urlLocation + "/" + fileId)
+ urlString := "http://" + urlLocation + "/" + fileId
+ if fs.redirectOnRead {
+
+ }
+ u, _ := url.Parse(urlString)
request := &http.Request{
Method: r.Method,
URL: u,
@@ -110,7 +114,11 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request,
func (fs *FilerServer) PostHandler(w http.ResponseWriter, r *http.Request) {
query := r.URL.Query()
- assignResult, ae := operation.Assign(fs.master, 1, query.Get("replication"), fs.collection, query.Get("ttl"))
+ replication := query.Get("replication")
+ if replication == "" {
+ replication = fs.defaultReplication
+ }
+ assignResult, ae := operation.Assign(fs.master, 1, replication, fs.collection, query.Get("ttl"))
if ae != nil {
glog.V(0).Infoln("failing to assign a file id", ae.Error())
writeJsonError(w, r, ae)