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