|
@ -6,6 +6,7 @@ import ( |
|
|
"github.com/chrislusf/seaweedfs/weed/pb/master_pb" |
|
|
"github.com/chrislusf/seaweedfs/weed/pb/master_pb" |
|
|
"github.com/chrislusf/seaweedfs/weed/stats" |
|
|
"github.com/chrislusf/seaweedfs/weed/stats" |
|
|
"github.com/chrislusf/seaweedfs/weed/storage/needle" |
|
|
"github.com/chrislusf/seaweedfs/weed/storage/needle" |
|
|
|
|
|
"github.com/chrislusf/seaweedfs/weed/storage/types" |
|
|
|
|
|
|
|
|
"os" |
|
|
"os" |
|
|
"path" |
|
|
"path" |
|
@ -85,14 +86,54 @@ func (v *Volume) FileStat() (datSize uint64, idxSize uint64, modTime time.Time) |
|
|
return // -1 causes integer overflow and the volume to become unwritable.
|
|
|
return // -1 causes integer overflow and the volume to become unwritable.
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (v *Volume) IndexFileSize() uint64 { |
|
|
|
|
|
return v.nm.IndexFileSize() |
|
|
|
|
|
|
|
|
func (v *Volume) ContentSize() uint64 { |
|
|
|
|
|
v.dataFileAccessLock.Lock() |
|
|
|
|
|
defer v.dataFileAccessLock.Unlock() |
|
|
|
|
|
return v.nm.ContentSize() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (v *Volume) DeletedSize() uint64 { |
|
|
|
|
|
v.dataFileAccessLock.Lock() |
|
|
|
|
|
defer v.dataFileAccessLock.Unlock() |
|
|
|
|
|
return v.nm.DeletedSize() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (v *Volume) FileCount() uint64 { |
|
|
func (v *Volume) FileCount() uint64 { |
|
|
|
|
|
v.dataFileAccessLock.Lock() |
|
|
|
|
|
defer v.dataFileAccessLock.Unlock() |
|
|
return uint64(v.nm.FileCount()) |
|
|
return uint64(v.nm.FileCount()) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (v *Volume) DeletedCount() uint64 { |
|
|
|
|
|
v.dataFileAccessLock.Lock() |
|
|
|
|
|
defer v.dataFileAccessLock.Unlock() |
|
|
|
|
|
return uint64(v.nm.DeletedCount()) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (v *Volume) MaxFileKey() types.NeedleId { |
|
|
|
|
|
v.dataFileAccessLock.Lock() |
|
|
|
|
|
defer v.dataFileAccessLock.Unlock() |
|
|
|
|
|
return v.nm.MaxFileKey() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (v *Volume) IndexFileSize() uint64 { |
|
|
|
|
|
v.dataFileAccessLock.Lock() |
|
|
|
|
|
defer v.dataFileAccessLock.Unlock() |
|
|
|
|
|
return v.nm.IndexFileSize() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (v *Volume) IndexFileContent() ([]byte, error) { |
|
|
|
|
|
v.dataFileAccessLock.Lock() |
|
|
|
|
|
defer v.dataFileAccessLock.Unlock() |
|
|
|
|
|
return v.nm.IndexFileContent() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (v *Volume) IndexFileName() string { |
|
|
|
|
|
v.dataFileAccessLock.Lock() |
|
|
|
|
|
defer v.dataFileAccessLock.Unlock() |
|
|
|
|
|
return v.nm.IndexFileName() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// Close cleanly shuts down this volume
|
|
|
// Close cleanly shuts down this volume
|
|
|
func (v *Volume) Close() { |
|
|
func (v *Volume) Close() { |
|
|
v.dataFileAccessLock.Lock() |
|
|
v.dataFileAccessLock.Lock() |
|
@ -112,10 +153,6 @@ func (v *Volume) NeedToReplicate() bool { |
|
|
return v.ReplicaPlacement.GetCopyCount() > 1 |
|
|
return v.ReplicaPlacement.GetCopyCount() > 1 |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (v *Volume) ContentSize() uint64 { |
|
|
|
|
|
return v.nm.ContentSize() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// volume is expired if modified time + volume ttl < now
|
|
|
// volume is expired if modified time + volume ttl < now
|
|
|
// except when volume is empty
|
|
|
// except when volume is empty
|
|
|
// or when the volume does not have a ttl
|
|
|
// or when the volume does not have a ttl
|
|
@ -158,13 +195,14 @@ func (v *Volume) expiredLongEnough(maxDelayMinutes uint32) bool { |
|
|
|
|
|
|
|
|
func (v *Volume) ToVolumeInformationMessage() *master_pb.VolumeInformationMessage { |
|
|
func (v *Volume) ToVolumeInformationMessage() *master_pb.VolumeInformationMessage { |
|
|
size, _, modTime := v.FileStat() |
|
|
size, _, modTime := v.FileStat() |
|
|
|
|
|
|
|
|
return &master_pb.VolumeInformationMessage{ |
|
|
return &master_pb.VolumeInformationMessage{ |
|
|
Id: uint32(v.Id), |
|
|
Id: uint32(v.Id), |
|
|
Size: size, |
|
|
Size: size, |
|
|
Collection: v.Collection, |
|
|
Collection: v.Collection, |
|
|
FileCount: uint64(v.nm.FileCount()), |
|
|
|
|
|
DeleteCount: uint64(v.nm.DeletedCount()), |
|
|
|
|
|
DeletedByteCount: v.nm.DeletedSize(), |
|
|
|
|
|
|
|
|
FileCount: uint64(v.FileCount()), |
|
|
|
|
|
DeleteCount: uint64(v.DeletedCount()), |
|
|
|
|
|
DeletedByteCount: v.DeletedSize(), |
|
|
ReadOnly: v.readOnly, |
|
|
ReadOnly: v.readOnly, |
|
|
ReplicaPlacement: uint32(v.ReplicaPlacement.Byte()), |
|
|
ReplicaPlacement: uint32(v.ReplicaPlacement.Byte()), |
|
|
Version: uint32(v.Version()), |
|
|
Version: uint32(v.Version()), |
|
|