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  }