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 }