summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-09-05 11:55:18 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-09-17 22:00:25 +0100
commita08d7dc9b2aca452b61ef8d1215aaf2497396e27 (patch)
tree87f2d24c764fb4d438538eaa45ff95582ca33e3a
parentc5cc4993f0555d3fc7a7aa5a471ec2b8e940dec6 (diff)
downloadpoky-a08d7dc9b2aca452b61ef8d1215aaf2497396e27.tar.gz
sstatesig: Improve to handle locking of multiple machines
Instead of a single monolithic SIGGEN_LOCKEDSIGS, split this into separate variables, one per sstate package architecture. Add in a new SIGGEN_LOCKEDSIGS_TYPES variable which lists the package architectures to load in. SIGGEN_LOCKEDSIGS_TYPES is made machine specific using overrides. Also sort the hashes in the lists by PN to make diffing them easier. (From OE-Core rev: d8b0ce35981931a39e7db9d8e78de6e009b34688) (From OE-Core rev: b42f305ce38b9e0f1a2b7cb9586bbabcd2d27429) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/lib/oe/sstatesig.py41
1 files changed, 28 insertions, 13 deletions
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py
index 7b860c5b0d..add26193bc 100644
--- a/meta/lib/oe/sstatesig.py
+++ b/meta/lib/oe/sstatesig.py
@@ -63,12 +63,14 @@ def sstate_rundepfilter(siggen, fn, recipename, task, dep, depname, dataCache):
63 63
64def sstate_lockedsigs(d): 64def sstate_lockedsigs(d):
65 sigs = {} 65 sigs = {}
66 lockedsigs = (d.getVar("SIGGEN_LOCKEDSIGS", True) or "").split() 66 types = (d.getVar("SIGGEN_LOCKEDSIGS_TYPES", True) or "").split()
67 for ls in lockedsigs: 67 for t in types:
68 pn, task, h = ls.split(":", 2) 68 lockedsigs = (d.getVar("SIGGEN_LOCKEDSIGS_%s" % t, True) or "").split()
69 if pn not in sigs: 69 for ls in lockedsigs:
70 sigs[pn] = {} 70 pn, task, h = ls.split(":", 2)
71 sigs[pn][task] = h 71 if pn not in sigs:
72 sigs[pn] = {}
73 sigs[pn][task] = h
72 return sigs 74 return sigs
73 75
74class SignatureGeneratorOEBasic(bb.siggen.SignatureGeneratorBasic): 76class SignatureGeneratorOEBasic(bb.siggen.SignatureGeneratorBasic):
@@ -88,16 +90,18 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
88 self.lockedsigs = sstate_lockedsigs(data) 90 self.lockedsigs = sstate_lockedsigs(data)
89 self.lockedhashes = {} 91 self.lockedhashes = {}
90 self.lockedpnmap = {} 92 self.lockedpnmap = {}
93 self.lockedhashfn = {}
94 self.machine = data.getVar("MACHINE", True)
91 pass 95 pass
92 def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None): 96 def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None):
93 return sstate_rundepfilter(self, fn, recipename, task, dep, depname, dataCache) 97 return sstate_rundepfilter(self, fn, recipename, task, dep, depname, dataCache)
94 98
95 def get_taskdata(self): 99 def get_taskdata(self):
96 data = super(bb.siggen.SignatureGeneratorBasicHash, self).get_taskdata() 100 data = super(bb.siggen.SignatureGeneratorBasicHash, self).get_taskdata()
97 return (data, self.lockedpnmap) 101 return (data, self.lockedpnmap, self.lockedhashfn)
98 102
99 def set_taskdata(self, data): 103 def set_taskdata(self, data):
100 coredata, self.lockedpnmap = data 104 coredata, self.lockedpnmap, self.lockedhashfn = data
101 super(bb.siggen.SignatureGeneratorBasicHash, self).set_taskdata(coredata) 105 super(bb.siggen.SignatureGeneratorBasicHash, self).set_taskdata(coredata)
102 106
103 def dump_sigs(self, dataCache, options): 107 def dump_sigs(self, dataCache, options):
@@ -107,6 +111,7 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
107 def get_taskhash(self, fn, task, deps, dataCache): 111 def get_taskhash(self, fn, task, deps, dataCache):
108 recipename = dataCache.pkg_fn[fn] 112 recipename = dataCache.pkg_fn[fn]
109 self.lockedpnmap[fn] = recipename 113 self.lockedpnmap[fn] = recipename
114 self.lockedhashfn[fn] = dataCache.hashfn[fn]
110 if recipename in self.lockedsigs: 115 if recipename in self.lockedsigs:
111 if task in self.lockedsigs[recipename]: 116 if task in self.lockedsigs[recipename]:
112 k = fn + "." + task 117 k = fn + "." + task
@@ -127,17 +132,27 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
127 132
128 def dump_lockedsigs(self): 133 def dump_lockedsigs(self):
129 bb.plain("Writing locked sigs to " + os.getcwd() + "/locked-sigs.inc") 134 bb.plain("Writing locked sigs to " + os.getcwd() + "/locked-sigs.inc")
135 types = {}
136 for k in self.runtaskdeps:
137 fn = k.rsplit(".",1)[0]
138 t = self.lockedhashfn[fn].split(" ")[1].split(":")[5]
139 if t not in types:
140 types[t] = []
141 types[t].append(k)
142
130 with open("locked-sigs.inc", "w") as f: 143 with open("locked-sigs.inc", "w") as f:
131 f.write('SIGGEN_LOCKEDSIGS = "\\\n') 144 for t in types:
132 #for fn in self.taskdeps: 145 f.write('SIGGEN_LOCKEDSIGS_%s = "\\\n' % t)
133 for k in self.runtaskdeps: 146 types[t].sort()
134 #k = fn + "." + task 147 sortedk = sorted(types[t], key=lambda k: self.lockedpnmap[k.rsplit(".",1)[0]])
148 for k in sortedk:
135 fn = k.rsplit(".",1)[0] 149 fn = k.rsplit(".",1)[0]
136 task = k.rsplit(".",1)[1] 150 task = k.rsplit(".",1)[1]
137 if k not in self.taskhash: 151 if k not in self.taskhash:
138 continue 152 continue
139 f.write(" " + self.lockedpnmap[fn] + ":" + task + ":" + self.taskhash[k] + " \\\n") 153 f.write(" " + self.lockedpnmap[fn] + ":" + task + ":" + self.taskhash[k] + " \\\n")
140 f.write(' "\n') 154 f.write(' "\n')
155 f.write('SIGGEN_LOCKEDSIGS_TYPES_%s = "%s"' % (self.machine, " ".join(types.keys())))
141 156
142 def checkhashes(self, missed, ret, sq_fn, sq_task, sq_hash, sq_hashfn, d): 157 def checkhashes(self, missed, ret, sq_fn, sq_task, sq_hash, sq_hashfn, d):
143 enforce = (d.getVar("SIGGEN_ENFORCE_LOCKEDSIGS", True) or "1") == "1" 158 enforce = (d.getVar("SIGGEN_ENFORCE_LOCKEDSIGS", True) or "1") == "1"