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 }