5 changed files with 140 additions and 96 deletions
-
61go/operation/chunked_manifest.go
-
118go/storage/chunked_file_reader.go
-
10go/storage/file_id.go
-
44go/storage/needle.go
-
3go/weed/weed_server/volume_server_handlers_read.go
@ -0,0 +1,61 @@ |
|||||
|
package operation |
||||
|
|
||||
|
import ( |
||||
|
"encoding/json" |
||||
|
"errors" |
||||
|
"sort" |
||||
|
|
||||
|
"github.com/chrislusf/seaweedfs/go/glog" |
||||
|
) |
||||
|
|
||||
|
type ChunkInfo struct { |
||||
|
Fid string `json:"fid"` |
||||
|
Offset int64 `json:"offset"` |
||||
|
Size int64 `json:"size"` |
||||
|
} |
||||
|
|
||||
|
type ChunkList []*ChunkInfo |
||||
|
|
||||
|
type ChunkManifest struct { |
||||
|
Name string `json:"name,omitempty"` |
||||
|
Mime string `json:"mime,omitempty"` |
||||
|
Size int64 `json:"size,omitempty"` |
||||
|
Chunks ChunkList `json:"chunks,omitempty"` |
||||
|
} |
||||
|
|
||||
|
func (s ChunkList) Len() int { return len(s) } |
||||
|
func (s ChunkList) Less(i, j int) bool { return s[i].Offset < s[j].Offset } |
||||
|
func (s ChunkList) Swap(i, j int) { s[i], s[j] = s[j], s[i] } |
||||
|
|
||||
|
func LoadChunkManifest(buffer []byte, isGzipped bool) (*ChunkManifest, error) { |
||||
|
if isGzipped { |
||||
|
var err error |
||||
|
if buffer, err = UnGzipData(buffer); err != nil { |
||||
|
return nil, err |
||||
|
} |
||||
|
} |
||||
|
cm := ChunkManifest{} |
||||
|
if e := json.Unmarshal(buffer, &cm); e != nil { |
||||
|
return nil, e |
||||
|
} |
||||
|
sort.Sort(cm.Chunks) |
||||
|
return &cm, nil |
||||
|
} |
||||
|
|
||||
|
func (cm *ChunkManifest) Marshal() ([]byte, error) { |
||||
|
return json.Marshal(cm) |
||||
|
} |
||||
|
|
||||
|
func (cm *ChunkManifest) DeleteChunks(master, collection string) error { |
||||
|
deleteError := 0 |
||||
|
for _, ci := range cm.Chunks { |
||||
|
if e := DeleteFile(master, ci.Fid, collection, ""); e != nil { |
||||
|
deleteError++ |
||||
|
glog.V(0).Infof("Delete %s error: %v, master: %s", ci.Fid, e, master) |
||||
|
} |
||||
|
} |
||||
|
if deleteError > 0 { |
||||
|
return errors.New("Not all chunks deleted.") |
||||
|
} |
||||
|
return nil |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue