summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/fetch2
diff options
context:
space:
mode:
authorEtienne Cordonnier <ecordonnier@snap.com>2024-08-23 10:41:08 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2024-08-25 15:37:02 +0100
commit58414305b289ae725f99c09bbfc74e9e162b4a4d (patch)
tree72755f5e59a2cb90075eeb57054e86389244e1f1 /bitbake/lib/bb/fetch2
parentf06fbe9bd8e90d9cabac25bf74b5c7e6f56b1877 (diff)
downloadpoky-58414305b289ae725f99c09bbfc74e9e162b4a4d.tar.gz
bitbake: gcp.py: remove slow calls to gsutil stat
The changes of 1ab1d36c0af6fc58a974106b61ff4d37da6cb229 added calls to "gsutil stat" to avoid unhandled exceptions, however: - in the case of checkstatus() this is redundant with the call to self.gcp_client.bucket(ud.host).blob(path).exists() which already returns True/False and does not throw an exception in case the file does not exist. - Also the call to gsutil stat is much slower than using the python client to call exists() so we should not replace the call to exists() with a call to gsutil stat. - I think the intent of calling check_network_access in checkstatus() was to error-out in case the error is disabled. We can rather change the string "gsutil stat" to something else to make the code more readable. - add a try/except block in download() instead of the extra call to gsutil [RP: Tweak to avoid import until needed so google module isn't required for everyone] (Bitbake rev: dd120f630e9ddadad95fe83728418335a14d3c3b) Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/fetch2')
-rw-r--r--bitbake/lib/bb/fetch2/gcp.py14
1 files changed, 7 insertions, 7 deletions
diff --git a/bitbake/lib/bb/fetch2/gcp.py b/bitbake/lib/bb/fetch2/gcp.py
index eb3e0c6a6b..2ee9ed2194 100644
--- a/bitbake/lib/bb/fetch2/gcp.py
+++ b/bitbake/lib/bb/fetch2/gcp.py
@@ -23,7 +23,6 @@ import urllib.parse, urllib.error
23from bb.fetch2 import FetchMethod 23from bb.fetch2 import FetchMethod
24from bb.fetch2 import FetchError 24from bb.fetch2 import FetchError
25from bb.fetch2 import logger 25from bb.fetch2 import logger
26from bb.fetch2 import runfetchcmd
27 26
28class GCP(FetchMethod): 27class GCP(FetchMethod):
29 """ 28 """
@@ -48,7 +47,6 @@ class GCP(FetchMethod):
48 ud.basename = os.path.basename(ud.path) 47 ud.basename = os.path.basename(ud.path)
49 48
50 ud.localfile = d.expand(urllib.parse.unquote(ud.basename)) 49 ud.localfile = d.expand(urllib.parse.unquote(ud.basename))
51 ud.basecmd = "gsutil stat"
52 50
53 def get_gcp_client(self): 51 def get_gcp_client(self):
54 from google.cloud import storage 52 from google.cloud import storage
@@ -59,17 +57,20 @@ class GCP(FetchMethod):
59 Fetch urls using the GCP API. 57 Fetch urls using the GCP API.
60 Assumes localpath was called first. 58 Assumes localpath was called first.
61 """ 59 """
60 from google.api_core.exceptions import NotFound
62 logger.debug2(f"Trying to download gs://{ud.host}{ud.path} to {ud.localpath}") 61 logger.debug2(f"Trying to download gs://{ud.host}{ud.path} to {ud.localpath}")
63 if self.gcp_client is None: 62 if self.gcp_client is None:
64 self.get_gcp_client() 63 self.get_gcp_client()
65 64
66 bb.fetch2.check_network_access(d, ud.basecmd, f"gs://{ud.host}{ud.path}") 65 bb.fetch2.check_network_access(d, "blob.download_to_filename", f"gs://{ud.host}{ud.path}")
67 runfetchcmd("%s %s" % (ud.basecmd, f"gs://{ud.host}{ud.path}"), d)
68 66
69 # Path sometimes has leading slash, so strip it 67 # Path sometimes has leading slash, so strip it
70 path = ud.path.lstrip("/") 68 path = ud.path.lstrip("/")
71 blob = self.gcp_client.bucket(ud.host).blob(path) 69 blob = self.gcp_client.bucket(ud.host).blob(path)
72 blob.download_to_filename(ud.localpath) 70 try:
71 blob.download_to_filename(ud.localpath)
72 except NotFound:
73 raise FetchError("The GCP API threw a NotFound exception")
73 74
74 # Additional sanity checks copied from the wget class (although there 75 # Additional sanity checks copied from the wget class (although there
75 # are no known issues which mean these are required, treat the GCP API 76 # are no known issues which mean these are required, treat the GCP API
@@ -91,8 +92,7 @@ class GCP(FetchMethod):
91 if self.gcp_client is None: 92 if self.gcp_client is None:
92 self.get_gcp_client() 93 self.get_gcp_client()
93 94
94 bb.fetch2.check_network_access(d, ud.basecmd, f"gs://{ud.host}{ud.path}") 95 bb.fetch2.check_network_access(d, "gcp_client.bucket(ud.host).blob(path).exists()", f"gs://{ud.host}{ud.path}")
95 runfetchcmd("%s %s" % (ud.basecmd, f"gs://{ud.host}{ud.path}"), d)
96 96
97 # Path sometimes has leading slash, so strip it 97 # Path sometimes has leading slash, so strip it
98 path = ud.path.lstrip("/") 98 path = ud.path.lstrip("/")