aboutsummaryrefslogtreecommitdiff
path: root/weed-fs/src/pkg
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2012-11-21 10:52:08 -0800
committerChris Lu <chris.lu@gmail.com>2012-11-21 10:52:08 -0800
commit5e020196f6d86c5abfe92f64fa61bc1aea8448c5 (patch)
tree655b584bac3d8feff910501c8d6466a0b1f801af /weed-fs/src/pkg
parent5dc509c6e403187c8d8b67506d700cbab043d8fa (diff)
downloadseaweedfs-5e020196f6d86c5abfe92f64fa61bc1aea8448c5.tar.xz
seaweedfs-5e020196f6d86c5abfe92f64fa61bc1aea8448c5.zip
add version type
Diffstat (limited to 'weed-fs/src/pkg')
-rw-r--r--weed-fs/src/pkg/storage/needle.go15
-rw-r--r--weed-fs/src/pkg/storage/volume.go13
2 files changed, 17 insertions, 11 deletions
diff --git a/weed-fs/src/pkg/storage/needle.go b/weed-fs/src/pkg/storage/needle.go
index 2333588c1..28dfbbed6 100644
--- a/weed-fs/src/pkg/storage/needle.go
+++ b/weed-fs/src/pkg/storage/needle.go
@@ -15,10 +15,15 @@ import (
)
type Needle struct {
- Cookie uint32 "random number to mitigate brute force lookups"
- Id uint64 "needle id"
- Size uint32 "Data size"
- Data []byte "The actual file data"
+ Cookie uint32 "random number to mitigate brute force lookups"
+ Id uint64 "needle id"
+ Size uint32 "sum of DataSize,Data,NameSize,Name,MimeSize,Mime"
+ // DataSize uint32 "Data size"
+ Data []byte "The actual file data"
+ // NameSize uint16
+ // Name []byte "maximum 256 characters"
+ // MimeSize uint16
+ // Mime []byte "maximum 256 characters"
Checksum CRC "CRC32 to check integrity"
Padding []byte "Aligned to 8 bytes"
}
@@ -97,7 +102,7 @@ func (n *Needle) Append(w io.Writer) uint32 {
w.Write(header[0 : rest+4])
return n.Size
}
-func (n *Needle) Read(r io.Reader, size uint32) (int, error) {
+func (n *Needle) Read(r io.Reader, size uint32, version Version) (int, error) {
bytes := make([]byte, size+16+4)
ret, e := r.Read(bytes)
n.Cookie = util.BytesToUint32(bytes[0:4])
diff --git a/weed-fs/src/pkg/storage/volume.go b/weed-fs/src/pkg/storage/volume.go
index c606ca811..4ada4e734 100644
--- a/weed-fs/src/pkg/storage/volume.go
+++ b/weed-fs/src/pkg/storage/volume.go
@@ -9,9 +9,11 @@ import (
"sync"
)
+type Version uint8
+
const (
SuperBlockSize = 8
- Version = 1
+ CurrentVersion = Version(1)
)
type Volume struct {
@@ -21,8 +23,7 @@ type Volume struct {
nm *NeedleMap
replicaType ReplicationType
-
- version uint8
+ version Version
accessLock sync.Mutex
}
@@ -68,7 +69,7 @@ func (v *Volume) maybeWriteSuperBlock() {
stat, _ := v.dataFile.Stat()
if stat.Size() == 0 {
header := make([]byte, SuperBlockSize)
- header[0] = Version
+ header[0] = byte(CurrentVersion)
header[1] = v.replicaType.Byte()
v.dataFile.Write(header)
}
@@ -79,7 +80,7 @@ func (v *Volume) readSuperBlock() error {
if _, e := v.dataFile.Read(header); e != nil {
return fmt.Errorf("cannot read superblock: %s", e)
}
- v.version = header[0]
+ v.version = Version(header[0])
var err error
if v.replicaType, err = NewReplicationTypeFromByte(header[1]); err != nil {
return fmt.Errorf("cannot read replica type: %s", err)
@@ -120,7 +121,7 @@ func (v *Volume) read(n *Needle) (int, error) {
nv, ok := v.nm.Get(n.Id)
if ok && nv.Offset > 0 {
v.dataFile.Seek(int64(nv.Offset)*8, 0)
- return n.Read(v.dataFile, nv.Size)
+ return n.Read(v.dataFile, nv.Size, v.version)
}
return -1, errors.New("Not Found")
}