12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package filer
- import (
- "bytes"
- "github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
- "github.com/chrislusf/seaweedfs/weed/wdclient"
- "math"
- "time"
- )
- func ReadEntry(masterClient *wdclient.MasterClient, filerClient filer_pb.SeaweedFilerClient, dir, name string, byteBuffer *bytes.Buffer) error {
- request := &filer_pb.LookupDirectoryEntryRequest{
- Directory: dir,
- Name: name,
- }
- respLookupEntry, err := filer_pb.LookupEntry(filerClient, request)
- if err != nil {
- return err
- }
- if len(respLookupEntry.Entry.Content) > 0 {
- _, err = byteBuffer.Write(respLookupEntry.Entry.Content)
- return err
- }
- return StreamContent(masterClient, byteBuffer, respLookupEntry.Entry.Chunks, 0, math.MaxInt64)
- }
- func ReadInsideFiler(filerClient filer_pb.SeaweedFilerClient, dir, name string) (content []byte, err error) {
- request := &filer_pb.LookupDirectoryEntryRequest{
- Directory: dir,
- Name: name,
- }
- respLookupEntry, err := filer_pb.LookupEntry(filerClient, request)
- if err != nil {
- return
- }
- content = respLookupEntry.Entry.Content
- return
- }
- func SaveInsideFiler(client filer_pb.SeaweedFilerClient, dir, name string, content []byte) error {
- resp, err := filer_pb.LookupEntry(client, &filer_pb.LookupDirectoryEntryRequest{
- Directory: dir,
- Name: name,
- })
- if err == filer_pb.ErrNotFound {
- err = filer_pb.CreateEntry(client, &filer_pb.CreateEntryRequest{
- Directory: dir,
- Entry: &filer_pb.Entry{
- Name: name,
- IsDirectory: false,
- Attributes: &filer_pb.FuseAttributes{
- Mtime: time.Now().Unix(),
- Crtime: time.Now().Unix(),
- FileMode: uint32(0644),
- Collection: "",
- Replication: "",
- FileSize: uint64(len(content)),
- },
- Content: content,
- },
- })
- } else if err == nil {
- entry := resp.Entry
- entry.Content = content
- entry.Attributes.Mtime = time.Now().Unix()
- entry.Attributes.FileSize = uint64(len(content))
- err = filer_pb.UpdateEntry(client, &filer_pb.UpdateEntryRequest{
- Directory: dir,
- Entry: entry,
- })
- }
- return err
- }
|