123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package filer
- import (
- "os"
- "time"
- "github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
- "github.com/chrislusf/seaweedfs/weed/util"
- )
- type Attr struct {
- Mtime time.Time // time of last modification
- Crtime time.Time // time of creation (OS X only)
- Mode os.FileMode // file mode
- Uid uint32 // owner uid
- Gid uint32 // group gid
- Mime string // mime type
- Replication string // replication
- Collection string // collection name
- TtlSec int32 // ttl in seconds
- DiskType string
- UserName string
- GroupNames []string
- SymlinkTarget string
- Md5 []byte
- FileSize uint64
- }
- func (attr Attr) IsDirectory() bool {
- return attr.Mode&os.ModeDir > 0
- }
- type Entry struct {
- util.FullPath
- Attr
- Extended map[string][]byte
- // the following is for files
- Chunks []*filer_pb.FileChunk `json:"chunks,omitempty"`
- HardLinkId HardLinkId
- HardLinkCounter int32
- Content []byte
- }
- func (entry *Entry) Size() uint64 {
- return maxUint64(maxUint64(TotalSize(entry.Chunks), entry.FileSize), uint64(len(entry.Content)))
- }
- func (entry *Entry) Timestamp() time.Time {
- if entry.IsDirectory() {
- return entry.Crtime
- } else {
- return entry.Mtime
- }
- }
- func (entry *Entry) ToProtoEntry() *filer_pb.Entry {
- if entry == nil {
- return nil
- }
- return &filer_pb.Entry{
- Name: entry.FullPath.Name(),
- IsDirectory: entry.IsDirectory(),
- Attributes: EntryAttributeToPb(entry),
- Chunks: entry.Chunks,
- Extended: entry.Extended,
- HardLinkId: entry.HardLinkId,
- HardLinkCounter: entry.HardLinkCounter,
- Content: entry.Content,
- }
- }
- func (entry *Entry) ToProtoFullEntry() *filer_pb.FullEntry {
- if entry == nil {
- return nil
- }
- dir, _ := entry.FullPath.DirAndName()
- return &filer_pb.FullEntry{
- Dir: dir,
- Entry: entry.ToProtoEntry(),
- }
- }
- func (entry *Entry) Clone() *Entry {
- return &Entry{
- FullPath: entry.FullPath,
- Attr: entry.Attr,
- Chunks: entry.Chunks,
- Extended: entry.Extended,
- HardLinkId: entry.HardLinkId,
- HardLinkCounter: entry.HardLinkCounter,
- }
- }
- func FromPbEntry(dir string, entry *filer_pb.Entry) *Entry {
- return &Entry{
- FullPath: util.NewFullPath(dir, entry.Name),
- Attr: PbToEntryAttribute(entry.Attributes),
- Chunks: entry.Chunks,
- HardLinkId: HardLinkId(entry.HardLinkId),
- HardLinkCounter: entry.HardLinkCounter,
- Content: entry.Content,
- }
- }
- func maxUint64(x, y uint64) uint64 {
- if x > y {
- return x
- }
- return y
- }
|