aboutsummaryrefslogtreecommitdiff
path: root/weed/mount/locked_entry.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/mount/locked_entry.go')
-rw-r--r--weed/mount/locked_entry.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/weed/mount/locked_entry.go b/weed/mount/locked_entry.go
new file mode 100644
index 000000000..f3b4bf484
--- /dev/null
+++ b/weed/mount/locked_entry.go
@@ -0,0 +1,42 @@
+package mount
+
+import (
+ "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
+ "sync"
+)
+
+type LockedEntry struct {
+ *filer_pb.Entry
+ sync.RWMutex
+}
+
+func (le *LockedEntry) GetEntry() *filer_pb.Entry {
+ le.RLock()
+ defer le.RUnlock()
+ return le.Entry
+}
+
+func (le *LockedEntry) SetEntry(entry *filer_pb.Entry) {
+ le.Lock()
+ defer le.Unlock()
+ le.Entry = entry
+}
+
+func (le *LockedEntry) UpdateEntry(fn func(entry *filer_pb.Entry)) *filer_pb.Entry {
+ le.Lock()
+ defer le.Unlock()
+ fn(le.Entry)
+ return le.Entry
+}
+
+func (le *LockedEntry) GetChunks() []*filer_pb.FileChunk {
+ le.RLock()
+ defer le.RUnlock()
+ return le.Entry.Chunks
+}
+
+func (le *LockedEntry) AppendChunks(newChunks []*filer_pb.FileChunk) {
+ le.Lock()
+ defer le.Unlock()
+ le.Entry.Chunks = append(le.Entry.Chunks, newChunks...)
+}