github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/dom/herd/subUpdate.go (about)

     1  package herd
     2  
     3  import (
     4  	"syscall"
     5  	"time"
     6  
     7  	"github.com/Cloud-Foundations/Dominator/dom/lib"
     8  	subproto "github.com/Cloud-Foundations/Dominator/proto/sub"
     9  )
    10  
    11  // Returns (idle, missing), idle=true if no update needs to be performed.
    12  func (sub *Sub) buildUpdateRequest(request *subproto.UpdateRequest) (
    13  	bool, bool) {
    14  	request.ImageName = sub.requiredImageName
    15  	request.Triggers = sub.requiredImage.Triggers
    16  	var rusageStart, rusageStop syscall.Rusage
    17  	computeStartTime := time.Now()
    18  	syscall.Getrusage(syscall.RUSAGE_SELF, &rusageStart)
    19  	subObj := lib.Sub{
    20  		Hostname:       sub.mdb.Hostname,
    21  		FileSystem:     sub.fileSystem,
    22  		ComputedInodes: sub.computedInodes,
    23  		ObjectCache:    sub.objectCache}
    24  	if lib.BuildUpdateRequest(subObj, sub.requiredImage, request, false, false,
    25  		sub.herd.logger) {
    26  		return false, true
    27  	}
    28  	syscall.Getrusage(syscall.RUSAGE_SELF, &rusageStop)
    29  	computeTimeDistribution.Add(time.Since(computeStartTime))
    30  	sub.lastComputeUpdateCpuDuration = time.Duration(
    31  		rusageStop.Utime.Sec)*time.Second +
    32  		time.Duration(rusageStop.Utime.Usec)*time.Microsecond -
    33  		time.Duration(rusageStart.Utime.Sec)*time.Second -
    34  		time.Duration(rusageStart.Utime.Usec)*time.Microsecond
    35  	computeCpuTimeDistribution.Add(sub.lastComputeUpdateCpuDuration)
    36  	if len(request.FilesToCopyToCache) > 0 ||
    37  		len(request.InodesToMake) > 0 ||
    38  		len(request.HardlinksToMake) > 0 ||
    39  		len(request.PathsToDelete) > 0 ||
    40  		len(request.DirectoriesToMake) > 0 ||
    41  		len(request.InodesToChange) > 0 ||
    42  		sub.lastSuccessfulImageName != sub.requiredImageName {
    43  		sub.herd.logger.Debugf(0,
    44  			"buildUpdateRequest(%s) took: %s user CPU time\n",
    45  			sub, sub.lastComputeUpdateCpuDuration)
    46  		return false, false
    47  	}
    48  	return true, false
    49  }