From cf7094f3c95ade6994860f001892054f915632db Mon Sep 17 00:00:00 2001 From: "chris.lu@gmail.com" Date: Sat, 24 Dec 2011 01:25:22 +0000 Subject: [PATCH] return written bytes, add debug mode git-svn-id: https://weed-fs.googlecode.com/svn/trunk@22 282b0af5-e82d-9cf1-ede4-77906d7719d0 --- weed-fs/src/cmd/weedc.go | 18 ++++++++++++------ weed-fs/src/pkg/storage/needle.go | 3 ++- weed-fs/src/pkg/storage/store.go | 4 ++-- weed-fs/src/pkg/storage/volume.go | 5 +++-- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/weed-fs/src/cmd/weedc.go b/weed-fs/src/cmd/weedc.go index b2e9dda39..442441506 100644 --- a/weed-fs/src/cmd/weedc.go +++ b/weed-fs/src/cmd/weedc.go @@ -18,12 +18,13 @@ var ( chunkCount = flag.Int("chunks", 5, "data chunks to store files") publicServer = flag.String("pserver", "localhost:8080", "public server to serve data read") metaServer = flag.String("mserver", "localhost:9333", "metadata server to store mappings") + IsDebug = flag.Bool("debug", false, "enable debug mode") store *storage.Store ) func statusHandler(w http.ResponseWriter, r *http.Request) { - writeJson(w, r, store.Status()) + writeJson(w, r, store.Status()) } func storeHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { @@ -46,12 +47,15 @@ func GetHandler(w http.ResponseWriter, r *http.Request) { fid = path[commaIndex+1 : dotIndex] } if commaIndex <= 0 { - log.Println("unknown file id", path[sepIndex+1 : commaIndex]) - return + log.Println("unknown file id", path[sepIndex+1:commaIndex]) + return } volumeId, _ := strconv.Atoui64(path[sepIndex+1 : commaIndex]) n.ParsePath(fid) + if *IsDebug { + log.Println("volume", volumeId, "reading", n) + } store.Read(volumeId, n) if dotIndex > 0 { ext := path[dotIndex:] @@ -67,8 +71,10 @@ func PostHandler(w http.ResponseWriter, r *http.Request) { if e != nil { writeJson(w, r, e) } else { - store.Write(volumeId, storage.NewNeedle(r)) - writeJson(w, r, make(map[string]string)) + ret := store.Write(volumeId, storage.NewNeedle(r)) + m := make(map[string]uint32) + m["size"] = ret + writeJson(w, r, m) } } func DeleteHandler(w http.ResponseWriter, r *http.Request) { @@ -95,7 +101,7 @@ func main() { store = storage.NewStore(*port, *publicServer, *chunkFolder, 1024*1024*1024, *chunkCount) defer store.Close() http.HandleFunc("/", storeHandler) - http.HandleFunc("/status", statusHandler) + http.HandleFunc("/status", statusHandler) store.Join(*metaServer) log.Println("store joined at", *metaServer) diff --git a/weed-fs/src/pkg/storage/needle.go b/weed-fs/src/pkg/storage/needle.go index 7b79faa78..a3a48b793 100644 --- a/weed-fs/src/pkg/storage/needle.go +++ b/weed-fs/src/pkg/storage/needle.go @@ -47,7 +47,7 @@ func (n *Needle) ParsePath(fid string) { } n.Key, n.Cookie = ParseKeyHash(fid) } -func (n *Needle) Append(w io.Writer) { +func (n *Needle) Append(w io.Writer) (uint32){ header := make([]byte, 16) Uint32toBytes(header[0:4], n.Cookie) Uint64toBytes(header[4:12], n.Key) @@ -58,6 +58,7 @@ func (n *Needle) Append(w io.Writer) { rest := 8 - ((n.Size + 16 + 4) % 8) Uint32toBytes(header[0:4], uint32(n.Checksum)) w.Write(header[0 : rest+4]) + return n.Size } func (n *Needle) Read(r io.Reader, size uint32) { bytes := make([]byte, size+16+4) diff --git a/weed-fs/src/pkg/storage/store.go b/weed-fs/src/pkg/storage/store.go index 79575d1ae..d2b9ab1eb 100644 --- a/weed-fs/src/pkg/storage/store.go +++ b/weed-fs/src/pkg/storage/store.go @@ -83,8 +83,8 @@ func (s *Store) Close() { v.Close() } } -func (s *Store) Write(i uint64, n *Needle) { - s.volumes[i].write(n) +func (s *Store) Write(i uint64, n *Needle) (uint32){ + return s.volumes[i].write(n) } func (s *Store) Read(i uint64, n *Needle) { s.volumes[i].read(n) diff --git a/weed-fs/src/pkg/storage/volume.go b/weed-fs/src/pkg/storage/volume.go index 99f7e40cb..22b653b71 100644 --- a/weed-fs/src/pkg/storage/volume.go +++ b/weed-fs/src/pkg/storage/volume.go @@ -48,15 +48,16 @@ func (v *Volume) Close() { v.dataFile.Close() } -func (v *Volume) write(n *Needle) { +func (v *Volume) write(n *Needle) uint32{ counter := <-v.accessChannel offset, _ := v.dataFile.Seek(0, 2) - n.Append(v.dataFile) + ret := n.Append(v.dataFile) nv, ok := v.nm.get(n.Key) if !ok || int64(nv.Offset)*8 < offset { v.nm.put(n.Key, uint32(offset/8), n.Size) } v.accessChannel <- counter + 1 + return ret } func (v *Volume) read(n *Needle) { counter := <-v.accessChannel