Browse Source

passing xattr

pull/1165/head
Chris Lu 5 years ago
parent
commit
14242e6c70
  1. 2
      weed/filer2/entry.go
  2. 27
      weed/filer2/entry_codec.go

2
weed/filer2/entry.go

@ -30,6 +30,7 @@ type Entry struct {
FullPath FullPath
Attr Attr
Extended map[string][]byte
// the following is for files // the following is for files
Chunks []*filer_pb.FileChunk `json:"chunks,omitempty"` Chunks []*filer_pb.FileChunk `json:"chunks,omitempty"`
@ -56,6 +57,7 @@ func (entry *Entry) ToProtoEntry() *filer_pb.Entry {
IsDirectory: entry.IsDirectory(), IsDirectory: entry.IsDirectory(),
Attributes: EntryAttributeToPb(entry), Attributes: EntryAttributeToPb(entry),
Chunks: entry.Chunks, Chunks: entry.Chunks,
Extended: entry.Extended,
} }
} }

27
weed/filer2/entry_codec.go

@ -1,18 +1,21 @@
package filer2 package filer2
import ( import (
"bytes"
"fmt"
"os" "os"
"time" "time"
"fmt"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
) )
func (entry *Entry) EncodeAttributesAndChunks() ([]byte, error) { func (entry *Entry) EncodeAttributesAndChunks() ([]byte, error) {
message := &filer_pb.Entry{ message := &filer_pb.Entry{
Attributes: EntryAttributeToPb(entry), Attributes: EntryAttributeToPb(entry),
Chunks: entry.Chunks, Chunks: entry.Chunks,
Extended: entry.Extended,
} }
return proto.Marshal(message) return proto.Marshal(message)
} }
@ -27,6 +30,8 @@ func (entry *Entry) DecodeAttributesAndChunks(blob []byte) error {
entry.Attr = PbToEntryAttribute(message.Attributes) entry.Attr = PbToEntryAttribute(message.Attributes)
entry.Extended = message.Extended
entry.Chunks = message.Chunks entry.Chunks = message.Chunks
return nil return nil
@ -84,6 +89,10 @@ func EqualEntry(a, b *Entry) bool {
return false return false
} }
if !eq(a.Extended, b.Extended) {
return false
}
for i := 0; i < len(a.Chunks); i++ { for i := 0; i < len(a.Chunks); i++ {
if !proto.Equal(a.Chunks[i], b.Chunks[i]) { if !proto.Equal(a.Chunks[i], b.Chunks[i]) {
return false return false
@ -91,3 +100,17 @@ func EqualEntry(a, b *Entry) bool {
} }
return true return true
} }
func eq(a, b map[string][]byte) bool {
if len(a) != len(b) {
return false
}
for k, v := range a {
if w, ok := b[k]; !ok || bytes.Equal(v, w) {
return false
}
}
return true
}
Loading…
Cancel
Save