github.com/Cloud-Foundations/Dominator@v0.3.4/lib/image/list.go (about) 1 package image 2 3 import ( 4 "github.com/Cloud-Foundations/Dominator/lib/hash" 5 "github.com/Cloud-Foundations/Dominator/lib/objectserver" 6 ) 7 8 func (image *Image) listObjects() []hash.Hash { 9 hashes := make([]hash.Hash, 0, image.FileSystem.NumRegularInodes+2) 10 image.forEachObject(func(hashVal hash.Hash) error { 11 hashes = append(hashes, hashVal) 12 return nil 13 }) 14 return hashes 15 } 16 17 func (image *Image) listMissingObjects( 18 objectsChecker objectserver.ObjectsChecker) ([]hash.Hash, error) { 19 hashBuffer := make([]hash.Hash, 1024) 20 var missingObjects []hash.Hash 21 index := 0 22 err := image.forEachObject(func(hashVal hash.Hash) error { 23 hashBuffer[index] = hashVal 24 index++ 25 if index < len(hashBuffer) { 26 return nil 27 } 28 var err error 29 missingObjects, err = listMissingObjects(missingObjects, hashBuffer, 30 objectsChecker) 31 if err != nil { 32 return err 33 } 34 index = 0 35 return nil 36 }) 37 if err != nil { 38 return nil, err 39 } 40 return listMissingObjects(missingObjects, hashBuffer[:index], 41 objectsChecker) 42 } 43 44 func listMissingObjects(missingObjects, hashes []hash.Hash, 45 objectsChecker objectserver.ObjectsChecker) ([]hash.Hash, error) { 46 objectSizes, err := objectsChecker.CheckObjects(hashes) 47 if err != nil { 48 return nil, err 49 } 50 for index, size := range objectSizes { 51 if size < 1 { 52 missingObjects = append(missingObjects, hashes[index]) 53 } 54 } 55 return missingObjects, nil 56 }