correctly deleting a file

correctly setting volume file size limit

git-svn-id: https://weed-fs.googlecode.com/svn/trunk@42 282b0af5-e82d-9cf1-ede4-77906d7719d0
This commit is contained in:
chris.lu@gmail.com
2012-01-19 00:49:41 +00:00
parent 380953692b
commit 659bf1940f
5 changed files with 158 additions and 135 deletions

View File

@@ -36,14 +36,14 @@ type Mapper struct {
FileIdSequence uint64
fileIdCounter uint64
volumeSizeLimit uint32
volumeSizeLimit uint64
}
func NewMachine(server, publicUrl string, volumes []storage.VolumeInfo) *Machine {
return &Machine{Server: MachineInfo{Url: server, PublicUrl: publicUrl}, Volumes: volumes}
}
func NewMapper(dirname string, filename string, volumeSizeLimit uint32) (m *Mapper) {
func NewMapper(dirname string, filename string, volumeSizeLimit uint64) (m *Mapper) {
m = &Mapper{dir: dirname, fileName: filename}
m.vid2machineId = make(map[uint32]int)
m.volumeSizeLimit = volumeSizeLimit
@@ -96,6 +96,7 @@ func (m *Mapper) Get(vid uint32) (*Machine, os.Error) {
}
func (m *Mapper) Add(machine Machine) {
//check existing machine, linearly
log.Println("Adding machine", machine.Server.Url)
m.lock.Lock()
foundExistingMachineId := -1
for index, entry := range m.Machines {
@@ -115,14 +116,13 @@ func (m *Mapper) Add(machine Machine) {
//add to vid2machineId map, and Writers array
for _, v := range machine.Volumes {
//log.Println("Setting volume", v.Id, "to", machine.Server.Url)
m.vid2machineId[v.Id] = machineId + 1 //use base 1 indexed, to detect not found cases
}
//setting Writers, copy-on-write because of possible updating
//setting Writers, copy-on-write because of possible updating, this needs some future work!
var writers []uint32
for _, machine_entry := range m.Machines {
for _, v := range machine_entry.Volumes {
if v.Size < int64(m.volumeSizeLimit) {
if uint64(v.Size) < m.volumeSizeLimit {
writers = append(writers, v.Id)
}
}

View File

@@ -92,7 +92,10 @@ func (s *Store) Close() {
}
}
func (s *Store) Write(i uint64, n *Needle) uint32 {
return s.volumes[i].write(n)
return s.volumes[i].write(n)
}
func (s *Store) Delete(i uint64, n *Needle) uint32 {
return s.volumes[i].delete(n)
}
func (s *Store) Read(i uint64, n *Needle) (int, os.Error) {
return s.volumes[i].read(n)

View File

@@ -9,7 +9,7 @@ import (
)
const (
SuperBlockSize = 8
SuperBlockSize = 8
)
type Volume struct {
@@ -69,6 +69,19 @@ func (v *Volume) write(n *Needle) uint32 {
}
return ret
}
func (v *Volume) delete(n *Needle) uint32 {
v.accessLock.Lock()
defer v.accessLock.Unlock()
nv, ok := v.nm.Get(n.Key)
//log.Println("key", n.Key, "volume offset", nv.Offset, "data_size", n.Size, "cached size", nv.Size)
if ok {
v.nm.Delete(n.Key)
v.dataFile.Seek(int64(nv.Offset*8), 0)
n.Append(v.dataFile)
return nv.Size
}
return 0
}
func (v *Volume) read(n *Needle) (int, os.Error) {
v.accessLock.Lock()
defer v.accessLock.Unlock()
@@ -79,8 +92,3 @@ func (v *Volume) read(n *Needle) (int, os.Error) {
}
return -1, os.EOF
}
func (v *Volume) delete(n *Needle) {
v.accessLock.Lock()
defer v.accessLock.Unlock()
v.nm.Delete(n.Key)
}