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  }