On Thu, 2023-01-26 at 14:51 +0100, Tobias Hagelborn wrote:
> For the case of a global shared state cache and a local sstate cache
> with a mix of signed and un-signed entries, there is a case where
> a .sig is missing locally, but may exist in the global sstate cache.
> 
> For this case, do not just fail sstate fetch, but rather backfill
> the .sig file from the global sstate cache.
> 
> If this case is detected, re-run the fetch operation to get the
> global .sig file (if it exists).
> 
> Change-Id: Id0491af1d3a0d29b2773d1607be9edfb7fa5ad70
> Signed-off-by: Tobias Hagelborn <[email protected]>
> ---
>  meta/classes-global/sstate.bbclass | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/classes-global/sstate.bbclass 
> b/meta/classes-global/sstate.bbclass
> index 77e3ea34e1..584d86ee2f 100644
> --- a/meta/classes-global/sstate.bbclass
> +++ b/meta/classes-global/sstate.bbclass
> @@ -365,6 +365,7 @@ def sstate_installpkg(ss, d):
>      d.setVar("SSTATE_CURRTASK", ss['task'])
>      sstatefetch = d.getVar('SSTATE_PKGNAME')
>      sstatepkg = d.getVar('SSTATE_PKG')
> +    verify_sig = bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False)
>  
>      if not os.path.exists(sstatepkg):
>          pstaging_fetch(sstatefetch, d)
> @@ -373,11 +374,14 @@ def sstate_installpkg(ss, d):
>          bb.note("Sstate package %s does not exist" % sstatepkg)
>          return False
>  
> +    if verify_sig and not os.path.isfile(sstatepkg + '.sig'):
> +        pstaging_fetch(sstatefetch, d)
> +
>      sstate_clean(ss, d)
>  
>      d.setVar('SSTATE_INSTDIR', sstateinst)
>  
> -    if bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False):
> +    if verify_sig:
>          if not os.path.isfile(sstatepkg + '.sig'):
>              bb.warn("No signature file for sstate package %s, skipping 
> acceleration..." % sstatepkg)
>              return False


I think this is going to be clearer to maintain if the code looks like:

    if not os.path.exists(sstatepkg) or (verify_sig and not 
os.path.isfile(sstatepkg + '.sig')):
        pstaging_fetch(sstatefetch, d)

and then we just call pstaging_fetch() once? It might also be more
consistent to use exists() for both cases.

Does that still address your use case?

Cheers,

Richard

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#176430): 
https://lists.openembedded.org/g/openembedded-core/message/176430
Mute This Topic: https://lists.openembedded.org/mt/96543137/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to