summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>2017-08-08 09:57:17 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-08-11 00:08:33 +0100
commita2e2f434cd8d68b69e1ccdb7d7c17c0c73289866 (patch)
treee49d35a1e822f20ec45ae9ff4f2b29d0837ab03d
parent3619a2fbe3d5bb718fdab8ee55728b22acb892cf (diff)
downloadopenembedded-core-contrib-a2e2f434cd8d68b69e1ccdb7d7c17c0c73289866.tar.gz
openembedded-core-contrib-a2e2f434cd8d68b69e1ccdb7d7c17c0c73289866.tar.bz2
openembedded-core-contrib-a2e2f434cd8d68b69e1ccdb7d7c17c0c73289866.zip
sstatetests: limit the number of signature comparisons when differ
For perfomance reasons, limit the number of signature comparisons when stamps differ. The limit set is hardcoded to 20. [YOCTO #11651] Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r--meta/lib/oeqa/selftest/cases/sstatetests.py39
1 files changed, 25 insertions, 14 deletions
diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py b/meta/lib/oeqa/selftest/cases/sstatetests.py
index 0b36027918..47900886a3 100644
--- a/meta/lib/oeqa/selftest/cases/sstatetests.py
+++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
@@ -458,6 +458,24 @@ http_proxy = "http://example.com/"
base = os.sep.join(root.rsplit(os.sep, 2)[-2:] + [name])
f[base] = shash
return f
+
+ def compare_sigfiles(files, files1, files2, compare=False):
+ for k in files:
+ if k in files1 and k in files2:
+ print("%s differs:" % k)
+ if compare:
+ sigdatafile1 = self.topdir + "/tmp-sstatesamehash/stamps/" + k + "." + files1[k]
+ sigdatafile2 = self.topdir + "/tmp-sstatesamehash2/stamps/" + k + "." + files2[k]
+ output = bb.siggen.compare_sigfiles(sigdatafile1, sigdatafile2)
+ if output:
+ print('\n'.join(output))
+ elif k in files1 and k not in files2:
+ print("%s in files1" % k)
+ elif k not in files1 and k in files2:
+ print("%s in files2" % k)
+ else:
+ assert "shouldn't reach here"
+
files1 = get_files(self.topdir + "/tmp-sstatesamehash/stamps/")
files2 = get_files(self.topdir + "/tmp-sstatesamehash2/stamps/")
# Remove items that are identical in both sets
@@ -468,18 +486,11 @@ http_proxy = "http://example.com/"
# No changes, so we're done
return
- for k in files1.keys() | files2.keys():
- if k in files1 and k in files2:
- print("%s differs:" % k)
- sigdatafile1 = self.topdir + "/tmp-sstatesamehash/stamps/" + k + "." + files1[k]
- sigdatafile2 = self.topdir + "/tmp-sstatesamehash2/stamps/" + k + "." + files2[k]
- output = bb.siggen.compare_sigfiles(sigdatafile1, sigdatafile2)
- if output:
- print('\n'.join(output))
- elif k in files1 and k not in files2:
- print("%s in files1" % k)
- elif k not in files1 and k in files2:
- print("%s in files2" % k)
- else:
- assert "shouldn't reach here"
+ files = list(files1.keys() | files2.keys())
+ # this is an expensive computation, thus just compare the first 'max_sigfiles_to_compare' k files
+ max_sigfiles_to_compare = 20
+ first, rest = files[:max_sigfiles_to_compare], files[max_sigfiles_to_compare:]
+ compare_sigfiles(first, files1.keys(), files2.keys(), compare=True)
+ compare_sigfiles(rest, files1.keys(), files2.keys(), compare=False)
+
self.fail("sstate hashes not identical.")