diff options
| author | Chris Lu <chris.lu@gmail.com> | 2014-03-30 20:57:25 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2014-03-30 20:57:25 -0700 |
| commit | 67be8a5af8cd731de4cbe81feb3328b99303f9ef (patch) | |
| tree | 38da2c98c95ac10849e5fe97974dadc8d4c82a9c /go/weed/filer.go | |
| parent | d6aa6239deed6936d4c5ee81ad38d0e16ad1bd1a (diff) | |
| download | seaweedfs-67be8a5af8cd731de4cbe81feb3328b99303f9ef.tar.xz seaweedfs-67be8a5af8cd731de4cbe81feb3328b99303f9ef.zip | |
adding filer!!!
Diffstat (limited to 'go/weed/filer.go')
| -rw-r--r-- | go/weed/filer.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/go/weed/filer.go b/go/weed/filer.go new file mode 100644 index 000000000..d7d028d50 --- /dev/null +++ b/go/weed/filer.go @@ -0,0 +1,79 @@ +package main + +import ( + "code.google.com/p/weed-fs/go/glog" + "code.google.com/p/weed-fs/go/util" + "code.google.com/p/weed-fs/go/weed/weed_server" + "net/http" + "os" + "strconv" + "time" +) + +var ( + f FilerOptions +) + +type FilerOptions struct { + master *string + port *int + collection *string + defaultReplicaPlacement *string + dir *string +} + +func init() { + cmdFiler.Run = runFiler // break init cycle + f.master = cmdFiler.Flag.String("master", "localhost:9333", "master server location") + 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.") +} + +var cmdFiler = &Command{ + UsageLine: "filer -port=8888 -dir=/tmp -master=<ip:port>", + Short: "start a file server that points to a master server", + Long: `start a file server which accepts REST operation for any files. + + //create or overwrite the file, the directories /path/to will be automatically created + POST /path/to/file + //get the file content + GET /path/to/file + //create or overwrite the file, the filename in the multipart request will be used + POST /path/to/ + //return a json format subdirectory and files listing + GET /path/to/ + + Current <fullpath~fileid> mapping metadata store is local embedded leveldb. + It should be highly scalable to hundreds of millions of files on a modest machine. + + Future we will ensure it can avoid of being SPOF. + + `, +} + +func runFiler(cmd *Command, args []string) bool { + if err := util.TestFolderWritable(*f.dir); err != nil { + glog.Fatalf("Check Meta Folder (-dir) Writable %s : %s", *f.dir, err) + } + + r := http.NewServeMux() + _, nfs_err := weed_server.NewFilerServer(r, *f.port, *f.master, *f.dir, *f.collection) + if nfs_err != nil { + glog.Fatalf(nfs_err.Error()) + } + glog.V(0).Infoln("Start Weed Filer", util.VERSION, "at port", strconv.Itoa(*f.port)) + filerListener, e := util.NewListener( + ":"+strconv.Itoa(*f.port), + time.Duration(10)*time.Second, + ) + if e != nil { + glog.Fatalf(e.Error()) + } + if e := http.Serve(filerListener, r); e != nil { + glog.Fatalf("Filer Fail to serve:%s", e.Error()) + } + + return true +} |
