All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] Fix TOCTOU issue with sstate mirror
@ 2014-08-09 22:46 Tyler Hall
  2014-08-09 22:46 ` [PATCH 1/1] fetch2: Downgrade the fetch failure log to a warning Tyler Hall
  0 siblings, 1 reply; 2+ messages in thread
From: Tyler Hall @ 2014-08-09 22:46 UTC (permalink / raw)
  To: bitbake-devel

When attempting to use sstate from a mirror, the siginfo file will be checked
twice: first when deciding whether to run the setscene task and again while
fetching in the setscene task. If the file is removed from the mirror between
those two checks, the setscene task will run and fail. This is acceptable since
since the real task will be run instead, but currently the fetcher will emit an
error message which causes bitbake to return a nonzero exit code. The build
completes successfully but appears to have failed.

This race has occurred several times in practice when using an http sstate
server that periodically prunes old files.

The simple fix provided here is to downgrade the internal fetcher error message
to a warning and let the do_fetch task continue to generate its error level
message.

This is one of two paches. First openembedded-core must be patched to ignore
the "Error:" prefix when scraping the log for this message. Then bitbake's log
level can change.

Tyler Hall (1):
  fetch2: Downgrade the fetch failure log to a warning

 lib/bb/fetch2/__init__.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.0.3



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

* [PATCH 1/1] fetch2: Downgrade the fetch failure log to a warning
  2014-08-09 22:46 [PATCH 0/1] Fix TOCTOU issue with sstate mirror Tyler Hall
@ 2014-08-09 22:46 ` Tyler Hall
  0 siblings, 0 replies; 2+ messages in thread
From: Tyler Hall @ 2014-08-09 22:46 UTC (permalink / raw)
  To: bitbake-devel

do_fetch and setscene are the two clients of Fetch.download(). For
setscene, a fetcher failure is non-fatal since the real task will run
instead. However if we we emit an error log, bitbake will return with a
nonzero exit status even if the overall build succeeded. Leave it up to
the client to decide whether the failure should be considered fatal.

The do_fetch task in openembedded-core handles the fetch error by
emitting an error log message of its own, so fatal fetch failures still
have an associated ERROR: message in the log.

The new output in this case is
WARNING: Fetcher failure: Unable to find file file:///invalid anywhere. The
paths that were searched were:
...
ERROR: Function failed: Fetcher failure for URL: 'file:///invalid'. Unable to
fetch URL from any source.
---
 lib/bb/fetch2/__init__.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py
index df2f2b0..f3b9463 100644
--- a/lib/bb/fetch2/__init__.py
+++ b/lib/bb/fetch2/__init__.py
@@ -1455,7 +1455,7 @@ class Fetch(object):
 
                 if not localpath or ((not os.path.exists(localpath)) and localpath.find("*") == -1):
                     if firsterr:
-                        logger.error(str(firsterr))
+                        logger.warn(str(firsterr))
                     raise FetchError("Unable to fetch URL from any source.", u)
 
                 update_stamp(ud, self.d)
-- 
2.0.3



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

end of thread, other threads:[~2014-08-09 22:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-09 22:46 [PATCH 0/1] Fix TOCTOU issue with sstate mirror Tyler Hall
2014-08-09 22:46 ` [PATCH 1/1] fetch2: Downgrade the fetch failure log to a warning Tyler Hall

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.