Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH v3 1/2] sstatetests: Use python function instead of bitbake-diffsigs script
@ 2017-08-07 21:33 leonardo.sandoval.gonzalez
  2017-08-07 21:33 ` [PATCH v3 2/2] sstatetests: limit the number of signature comparisons when differ leonardo.sandoval.gonzalez
  0 siblings, 1 reply; 4+ messages in thread
From: leonardo.sandoval.gonzalez @ 2017-08-07 21:33 UTC (permalink / raw)
  To: openembedded-core

From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>

Using a python function instead of launching a subprocess fasten the
diffsigs computation.

[YOCTO #11651]

Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
---
 meta/lib/oeqa/selftest/cases/sstatetests.py | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py b/meta/lib/oeqa/selftest/cases/sstatetests.py
index 07a206824a..0b36027918 100644
--- a/meta/lib/oeqa/selftest/cases/sstatetests.py
+++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
@@ -8,6 +8,8 @@ from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_test_layer
 from oeqa.selftest.cases.sstate import SStateBase
 from oeqa.core.decorator.oeid import OETestID
 
+import bb.siggen
+
 class SStateTests(SStateBase):
 
     # Test sstate files creation and their location
@@ -469,9 +471,11 @@ http_proxy = "http://example.com/"
         for k in files1.keys() | files2.keys():
             if k in files1 and k in files2:
                 print("%s differs:" % k)
-                print(subprocess.check_output(("bitbake-diffsigs",
-                                               self.topdir + "/tmp-sstatesamehash/stamps/" + k + "." + files1[k],
-                                               self.topdir + "/tmp-sstatesamehash2/stamps/" + k + "." + files2[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:
-- 
2.12.3



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 2/2] sstatetests: limit the number of signature comparisons when differ
  2017-08-07 21:33 [PATCH v3 1/2] sstatetests: Use python function instead of bitbake-diffsigs script leonardo.sandoval.gonzalez
@ 2017-08-07 21:33 ` leonardo.sandoval.gonzalez
  2017-08-08 14:40   ` Burton, Ross
  0 siblings, 1 reply; 4+ messages in thread
From: leonardo.sandoval.gonzalez @ 2017-08-07 21:33 UTC (permalink / raw)
  To: openembedded-core

From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>

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>
---
 meta/lib/oeqa/selftest/cases/sstatetests.py | 40 +++++++++++++++++++----------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py b/meta/lib/oeqa/selftest/cases/sstatetests.py
index 0b36027918..6298443a18 100644
--- a/meta/lib/oeqa/selftest/cases/sstatetests.py
+++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
@@ -458,6 +458,25 @@ 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:
+                    i_sigfile += 1
+                    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 +487,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.")
-- 
2.12.3



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 2/2] sstatetests: limit the number of signature comparisons when differ
  2017-08-07 21:33 ` [PATCH v3 2/2] sstatetests: limit the number of signature comparisons when differ leonardo.sandoval.gonzalez
@ 2017-08-08 14:40   ` Burton, Ross
  2017-08-08 16:34     ` Leonardo Sandoval
  0 siblings, 1 reply; 4+ messages in thread
From: Burton, Ross @ 2017-08-08 14:40 UTC (permalink / raw)
  To: Leonardo Sandoval; +Cc: OE-core

[-- Attachment #1: Type: text/plain, Size: 1286 bytes --]

On 7 August 2017 at 22:33, <leonardo.sandoval.gonzalez@linux.intel.com>
wrote:

> From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
>
> 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>
> ---
>  meta/lib/oeqa/selftest/cases/sstatetests.py | 40
> +++++++++++++++++++----------
>  1 file changed, 26 insertions(+), 14 deletions(-)
>
> diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py
> b/meta/lib/oeqa/selftest/cases/sstatetests.py
> index 0b36027918..6298443a18 100644
> --- a/meta/lib/oeqa/selftest/cases/sstatetests.py
> +++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
> @@ -458,6 +458,25 @@ 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:
> +                    i_sigfile += 1
>

Surely this is going to produce an i_sigfile is not defined error?

Ross

[-- Attachment #2: Type: text/html, Size: 2059 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 2/2] sstatetests: limit the number of signature comparisons when differ
  2017-08-08 14:40   ` Burton, Ross
@ 2017-08-08 16:34     ` Leonardo Sandoval
  0 siblings, 0 replies; 4+ messages in thread
From: Leonardo Sandoval @ 2017-08-08 16:34 UTC (permalink / raw)
  To: Burton, Ross; +Cc: OE-core

On Tue, 2017-08-08 at 15:40 +0100, Burton, Ross wrote:
> On 7 August 2017 at 22:33,
> <leonardo.sandoval.gonzalez@linux.intel.com> wrote:
>         From: Leonardo Sandoval
>         <leonardo.sandoval.gonzalez@linux.intel.com>
>         
>         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>
>         ---
>          meta/lib/oeqa/selftest/cases/sstatetests.py | 40
>         +++++++++++++++++++----------
>          1 file changed, 26 insertions(+), 14 deletions(-)
>         
>         diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py
>         b/meta/lib/oeqa/selftest/cases/sstatetests.py
>         index 0b36027918..6298443a18 100644
>         --- a/meta/lib/oeqa/selftest/cases/sstatetests.py
>         +++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
>         @@ -458,6 +458,25 @@ 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:
>         +                    i_sigfile += 1
> 
> 
> Surely this is going to produce an i_sigfile is not defined error?

Right, I forgot to remove that line and test it properly. Will send
another revision.

Leo



> 
> 
> Ross 




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-08-08 16:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-07 21:33 [PATCH v3 1/2] sstatetests: Use python function instead of bitbake-diffsigs script leonardo.sandoval.gonzalez
2017-08-07 21:33 ` [PATCH v3 2/2] sstatetests: limit the number of signature comparisons when differ leonardo.sandoval.gonzalez
2017-08-08 14:40   ` Burton, Ross
2017-08-08 16:34     ` Leonardo Sandoval

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox