github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/objectserver/cachingreader/link.go (about)

     1  package cachingreader
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  
     7  	"github.com/Cloud-Foundations/Dominator/lib/fsutil"
     8  	"github.com/Cloud-Foundations/Dominator/lib/hash"
     9  	"github.com/Cloud-Foundations/Dominator/lib/objectcache"
    10  )
    11  
    12  func (objSrv *ObjectServer) linkObject(filename string,
    13  	hashVal hash.Hash) (bool, error) {
    14  	objectsReader, err := objSrv.GetObjects([]hash.Hash{hashVal})
    15  	if err != nil {
    16  		return false, err
    17  	}
    18  	defer objectsReader.Close()
    19  	size, reader, err := objectsReader.NextObject()
    20  	if err != nil {
    21  		return false, err
    22  	}
    23  	defer reader.Close()
    24  	source := filepath.Join(objSrv.baseDir, objectcache.HashToFilename(hashVal))
    25  	if err := os.Link(source, filename); err == nil {
    26  		return true, nil
    27  	}
    28  	return false, fsutil.CopyToFile(filename, privateFilePerms, reader, size)
    29  }