github.com/Cloud-Foundations/Dominator@v0.3.4/lib/objectserver/filesystem/delete.go (about) 1 package filesystem 2 3 import ( 4 "fmt" 5 "os" 6 "path" 7 "time" 8 9 "github.com/Cloud-Foundations/Dominator/lib/hash" 10 "github.com/Cloud-Foundations/Dominator/lib/objectcache" 11 ) 12 13 // deleteObject will delete the specified object. If haveLock is false, the 14 // lock is grabbed. In either case, the lock will be released. 15 func (objSrv *ObjectServer) deleteObject(hashVal hash.Hash, 16 haveLock bool) error { 17 var refcount uint64 18 if !haveLock { 19 objSrv.rwLock.Lock() 20 } 21 if object := objSrv.objects[hashVal]; object == nil { 22 return fmt.Errorf("deleteObject(%x): object unknown", hashVal) 23 } else { 24 refcount = object.refcount 25 delete(objSrv.objects, hashVal) 26 objSrv.duplicatedBytes -= object.size * object.refcount 27 objSrv.lastMutationTime = time.Now() 28 objSrv.numDuplicated -= object.refcount 29 if object.refcount > 0 { 30 objSrv.numReferenced-- 31 objSrv.referencedBytes -= object.size 32 } 33 objSrv.removeUnreferenced(object) 34 objSrv.totalBytes -= object.size 35 } 36 objSrv.rwLock.Unlock() 37 if refcount > 0 { 38 objSrv.Logger.Printf("deleteObject(%x): refcount: %d\n", refcount) 39 } 40 filename := path.Join(objSrv.BaseDirectory, 41 objectcache.HashToFilename(hashVal)) 42 return os.Remove(filename) 43 }