Commit message (Collapse)AuthorAgeFilesLines
* fetch2: don't mandate path element in encodeurl()paule/fetch2-encodeurl-fixPaul Eggleton2017-08-241-6/+5
| | | | | | | | | | URLs do not have to have a path; currently our npm URLs don't, so encodeurl() needs to handle if the path element isn't specified. This fixes errors using OpenEmbedded's devtool add / recipetool create on an npm URL after OE-Core revision ecca596b75cfda2f798a0bdde75f4f774e23a95b that uses decodeurl() and encodeurl() to change URL parameter values. Signed-off-by: Paul Eggleton <>
* bitbake: ui: Sort 'Dependent tasks' in taskexpJussi Kukkonen2017-08-231-1/+3
| | | | | | | | The underlying model is already sorted for use in the other view, add a sorting model for the 'Dependent Tasks' view. Signed-off-by: Jussi Kukkonen <> Signed-off-by: Richard Purdie <>
* toaster: support custom Layer Index URL and fixture overrideDavid Reyna2017-08-222-2/+9
| | | | | | | | | | | | | | | | | | Toaster needs to allow the custom fixture file to specific an alternate Layer Index URL for users that host their own Layer Index Server via the 'CUSTOM_LAYERINDEX_SERVER' in 'custom.xml'. Toaster also needs to allow the ability to completely override the default fixture files, otherwise that content can leak into the custom environment (by default the custom fixture is an overlay that cannot remove existing values from the default fixture) via the 'CUSTOM_XML_ONLY' value in 'setting.xml'. [YOCTO #11938] Signed-off-by: David Reyna <> Signed-off-by: Richard Purdie <>
* Toaster: custom start and stop actionsDavid Reyna2017-08-222-2/+69
| | | | | | | | | | | | Toaster needs the ability to allow custom extensions to execute when Toaster is started and stopped. Toaster will look for a custom extension script in the fixtures directory and execute any applicable hooks. [YOCTO #11938] Signed-off-by: David Reyna <> Signed-off-by: Richard Purdie <>
* toaster: custom image updates and original creationDavid Reyna2017-08-222-38/+62
| | | | | | | | | | | | | | | | | | | When Toaster removes a package from a custom image, it must also always remove the advised reverse-dependent recipes. Similarly, when adding a package it must always add its advised the packages it depends on. This code must be un-indented so that it applies to all respective added or removed packages. Toaster normally waits until a new custom image is built before creating the custom layer and the recipe. However, an intermediate different build can fail because the recipe has already been added to the project, so the image's default recipe must be created when the image is created. [YOCTO #11915] Signed-off-by: David Reyna <> Signed-off-by: Richard Purdie <>
* process: Ensure we call select() to know which fds to readRichard Purdie2017-08-211-1/+1
| | | | | | | | | | | | | | | | | There is an interesting bug in the current code where a sync command is not seen until the current async command completes, by which time the UI may have shut down. The reason is that if there are idle commands, we may not end up sleeping in the select call at all, partiularly under heavy load like parsing. Fix this by calling select with a zero timeout so that we see active fds and know to read from them. This fixes various problems toaster was having with the recent server changes. [YOCTO #11898] Signed-off-by: Richard Purdie <>
* process: Increase server startup timeoutRichard Purdie2017-08-151-1/+1
| | | | | | | | We're seeing the server fail to start within 8s on heavily loaded autobuilders so increase this timeout to 30s which should be more than enough time. Signed-off-by: Richard Purdie <>
* process: Improve client disconnectsRichard Purdie2017-08-141-15/+23
| | | | | | | | There have been cases where the server could loop indefinitely and incorrectly handle client disconnects. In the EOFError case, ensure a full disconnect happens in the alternative disconnect path to avoid this. Signed-off-by: Richard Purdie <>
* cooker: Ignore common bitbake files for the parse cache invalidationRichard Purdie2017-08-091-0/+3
| | | | | | | | | | | | Writes to the cookerdaemon log and/or the lockfile were meaning the parser cache was always being invalidated and reparsed. This is unnecessary so spot accesses to these two common cases and ignore the files from a reparse perspective. This doesn't remove many sources of reparse but does improve several common cases. Signed-off-by: Richard Purdie <>
* cooker: Improve inotify overflow handlingRichard Purdie2017-08-092-1/+8
| | | | | | | | Add a proper function for clearing the mtime cache. Clean up the inotify event overflow case to err on the side of caution and clear any potentially now out of sync caches. Signed-off-by: Richard Purdie <>
* cooker: Ensure we handle inotify before running the next commandRichard Purdie2017-08-092-7/+12
| | | | | | | | | | | | The inotify watch events are handled "at idle" which could in theory mean a command could run before any preceeding inotify events have been processed. This leads to a theoretical race window where those events may have a signficicant effect on the command. Add a mechanism to allow us to ensure all pending events are processed before running commands. Signed-off-by: Richard Purdie <>
* cooker: Track directories searched for bbappend/bb filesRichard Purdie2017-08-091-3/+21
| | | | | | | | | | | | | | | Some of the directories searched by BBFILES are not currently being added to the inotify watch list. This can mean that added append files are not noticed leading to misleading metadata results when using BB_SERVER_TIMEOUT != 0. We use glob to expand the BBFILES references and without writing our own implentation, figuring out the directories it searches is hard. We use some horrible hacks here to intecept the listdir calls, I'm open to better ways to handle this but this does ensure we have the right watches set. Signed-off-by: Richard Purdie <>
* server/process: Ensure we don't loop on client EOFErrorRichard Purdie2017-08-091-2/+2
| | | | | | | | | | | | The server currently crashes if we hit an EOFError due to controllersock still being in ready and the continue meaning ready isn't re-evaluated. Setting the value to False can mean the shutdown code doesn't handle the situation cleanly. Clear ready to avoid the crash/loop instead and handle any OSError whilst we're in here. Signed-off-by: Richard Purdie <>
* cooker/siggen: Reset siggen when reparsingRichard Purdie2017-08-092-0/+4
| | | | | | | | | | If we don't do this, we get basehash mismatch errors occurring from the reparse which would then set bitbake's error exit code. This for example would cause oe-selftest -r bbtests.BitbakeTests.test_bbappend_order to fail with a non-zero BB_SERVER_TIMEOUT. Signed-off-by: Richard Purdie <>
* main: Handle BB_SERVER_TIMEOUT = -1 for no server timeoutRobert Yang2017-08-082-3/+6
| | | | | | | Make BB_SERVER_TIMEOUT = -1 mean no unload forever. Signed-off-by: Robert Yang <> Signed-off-by: Richard Purdie <>
* process: Fix disconnect when BB_SERVER_TIMEOUTRobert Yang2017-08-081-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed: $ export BB_SERVER_TIMEOUT=10000 $ bitbake --server-only $ bitbake --status-only [snip] File "/buildarea/lyang1/poky/bitbake/lib/bb/server/", line 472, in recvfds msg, ancdata, flags, addr = sock.recvmsg(1, socket.CMSG_LEN(bytes_size)) OSError: [Errno 9] Bad file descriptor And: $ export BB_SERVER_TIMEOUT=10000 $ bitbake --server-only -B localhost:-1 $ bitbake --status-only # Everything is fine in first run $ bitbake --status-only [snip] File "/buildarea/lyang1/poky/bitbake/lib/bb/server/", line 472, in recvfds msg, ancdata, flags, addr = sock.recvmsg(1, socket.CMSG_LEN(bytes_size)) OSError: [Errno 9] Bad file descriptor This was because self.controllersock was not set to False, so it still ran sock.recvmsg() when sock was closed. And also need set command_channel to Flase, otherwise the self.command_channel.get() will always run when EOF, and cause infinite loop. Signed-off-by: Robert Yang <> Signed-off-by: Richard Purdie <>
* main: Remove unneeded float()Robert Yang2017-08-081-1/+1
| | | | | | | | | | | | | | | | | | | | | There is already a type=float, so the float() is not needed, which also makes the error clearer: $ export BB_SERVER_TIMEOUT=10000AA With float(): $ bitbake quilt-native [snip] ValueError: could not convert string to float: '10000AA' Without float(): $ bitbake quilt-native [snip] optparse.OptionValueError: option --idle-timeout: invalid floating-point value: '10000AA' The second one tells clearly where is wrong. Signed-off-by: Robert Yang <> Signed-off-by: Richard Purdie <>
* Revert "tinfoil: fix duplication of log messages"Paul Eggleton2017-08-082-4/+3
| | | | | | | | | | | | | | | In combination with the recent server reworking, this change actually prevents messages sent from tasks from being logged properly. This will of course give us the duplicated messages back, and I really hate to do that effectively a second time, but that's better than seeing no error at all in the case of a failure - we'll have to find the proper way of avoiding the duplication that doesn't result in some messages going missing. This reverts commit 8a5bae76f91f2411187c638a42fa3c762052cf11. Signed-off-by: Paul Eggleton <> Signed-off-by: Richard Purdie <>
* daemonize: Always print any remaning UI events at exitRichard Purdie2017-08-031-1/+1
| | | | | | | | | | | If there are events in the UI queue we want to print them regardless of whether we're handling an exception or something like SystemExit. This improves error messages for some other failure cases where currently no logging would get printed and leave the user confused as to what went wrong. Signed-off-by: Richard Purdie <>
* cooker: Ensure all tasks are shown in task dependency treeRichard Purdie2017-08-011-3/+3
| | | | | | | | | | "bitbake -g m4-native -c do_unpack" doesn't list any dependencies in This is because no header describing the task was added unless a task has dependencies. Tweak the code to fix this. [YOCTO #10893] Signed-off-by: Richard Purdie <>
* daemonize: clean up codeRichard Purdie2017-07-311-134/+14
| | | | | | | | This was originally based on some other code but its mostly misleading comments now. Massively clean this up and accept its now a total fork. There are no funciton changes here, just cleanup. Signed-off-by: Richard Purdie <>
* daemonize: Ensure child process exits safelyRichard Purdie2017-07-311-3/+8
| | | | | | | | | | | When we create the child, if an exception occurred it was transfering back into the parent context. We don't want to do that us use a try/finally to ensure we exit. We need to ensure a traceback is printed and any queued UI messages which may not have made it to the client UI at this point. Signed-off-by: Richard Purdie <>
* process: Add some extra server startup logsRichard Purdie2017-07-311-1/+4
| | | | | | | | We have cases where the server is being started but we're not seeing any messages from it. Add some earlier logging so we can try and better understand where issues may be occurring. Signed-off-by: Richard Purdie <>
* process: Reorder server command processing and handle EOFErrorRichard Purdie2017-07-311-13/+18
| | | | | | | | | | | If the connection control socket and the command channel close together, we can race and hit EOFError exceptions before we close the channel. Reorder the code to handle this in the correct order and ignore the EOFError exceptions as they mean the client is disconnecting and shouldn't terminate the server. Signed-off-by: Richard Purdie <>
* wget: fix FusionForge workaroundRoss Burton2017-07-301-6/+3
| | | | | | | | | | | | | | | My previous assertion about FusionForge appears to have been wrong, or FusionForge has changed behaviour, or both. FusionForge now mandates that downloads have the Accept header set, despite that header being optional, and returns a 406 Not Acceptable error if it isn't set. As we were pretending that 406 was actually 405 (Moved) and tried to handle it as a redirect this results in an infinite loop until Python kills the recursion. Delete the handling of 406 as 405, and pass Accept: */* in the headers. Signed-off-by: Ross Burton <> Signed-off-by: Richard Purdie <>
* toaster: move to new bitbake xmlrpc defaultDavid Reyna2017-07-303-7/+18
| | | | | | | | | | | | | | | | | | | | | | | | The bitbake option "-t SERVERTYPE" was deprecated and can be removed since the desired XMLRPC listener now the default. The bitbake server port cannot be "-1" anymore and must be explicitly passed. There is a race condition for the bblock file to not only be created but to actually be populated, so a delay test loop is required (usually only one pass). The 'xmlrpcclient' is now the class that allows Toaster to for example kill builds. The events for populating the recipe parsing now either show only the final result or are skipped entiredly, so the progress calculator needs to be changed to not block on the parsing phase. [YOCTO #11851] Signed-off-by: David Reyna <> Signed-off-by: Richard Purdie <>
* toaster: enable remote HTTP API for status aggregationDavid Reyna2017-07-304-4/+100
| | | | | | | | | | | Add support for Toaster aggregators with a set of api links that return JSON data for (a) builds in progress, (b) builds completed, (c) specific build data, and (d) an is-alive health ping link. [YOCTO #11794] Signed-off-by: David Reyna <> Signed-off-by: Richard Purdie <>
* runqueue: Tweak debug message to make it more readable/diffableRichard Purdie2017-07-301-1/+1
| | | | | | | Having this as one huge long line isn't easy to manipulate, split it into multiple lines for ease of debugging issues. Signed-off-by: Richard Purdie <>
* fetch2: fix checkstatus fallback to MIRRORSRoss Burton2017-07-301-3/+2
| | | | | | | | The checkstatus() code was expecting checkstatus to throw exceptions if it failed, but in general it should return False. Signed-off-by: Ross Burton <> Signed-off-by: Richard Purdie <>
* tests/fetch: fix GitShallowTest.test_bitbakeChristopher Larson2017-07-301-1/+1
| | | | | | | | | | | | | `git fetch --tags` seems to interact badly with `mirror=fetch`, resulting in the regular branches not being fetched, so drop the unnecessary `--tags`. This fixes this unit test failure: `bb.fetch2.FetchError: Fetcher failure: Unable to resolve 'master' in upstream git repository in git ls-remote output for /tmp/tmp4ag_mgmn/gitsource` [YOCTO #11698] Signed-off-by: Christopher Larson <> Signed-off-by: Richard Purdie <>
* main: Always return 0 for bitbake --kill-serverRichard Purdie2017-07-281-2/+4
| | | | | | | | If the server isn't running return 0 as to do otherwise complicates scripts which do cleanup of bitbake servers which would potentially be memory resident. Signed-off-by: Richard Purdie <>
* process: Clean up server communication timeout errorsRichard Purdie2017-07-281-12/+3
| | | | | | | | | | | | | | | | | | | This timeout path was commonly hit due to errors starting the server. Now we have a better way to handle that, the retry logic can be improved and cleaned up. This patch: * Makes the timeout 5s rather than intervals of 1s with a message. Paul noted some commands can take around 1s to run on a server which has just been started on a loaded system. * Allows a broke connection to exit immediately rather than retrying something which will never work. * Drops the Ctrl+C masking, we shouldn't need that anymore and any issues would be better handled in other ways. This should make things clearer and less confusing for users and is much cleaner code too. Signed-off-by: Richard Purdie <>
* process: Don't leak open pipes upon reconnectionRichard Purdie2017-07-281-1/+18
| | | | | | | If we reconnect to the server, stop leaking pipes and clean up after ourselves. Signed-off-by: Richard Purdie <>
* process/cooker: Allow UI process to know if the cooker was started successfullyRichard Purdie2017-07-282-3/+23
| | | | | | | | | | | | | | | Currently if the server fails to start, the user sees no error message and the server will be repeatedly attempted to be started until some longer timeouts expire. There are error messages in the cookerdeamon log but nobody thinks to look there. Add in a pipe which can be used to tell the starting process whether the cooker did actually start or not. If it fails to start, no further attempts can be made and if present, the log file can be shown to the user. [YOCTO #11834] Signed-off-by: Richard Purdie <>
* process: Move socket keep alive into BitBakeProcessServerConnectionRichard Purdie2017-07-281-4/+6
| | | | | | | This cleans up the socket keep alive into better class structured code and adds cleanup of the open file descriptors upon shutdown. Signed-off-by: Richard Purdie <>
* process: Allow BBUIEventQueue to exit cleanlyRichard Purdie2017-07-281-3/+8
| | | | | | | Currently the monitoring thread exits with some error code or runs indefinitely. Allow closure of the pipe its monitoring to have the thread exit cleanly/silently. Signed-off-by: Richard Purdie <>
* process: Ensure ConnectionReader/Writer have fileno() and close() methodsRichard Purdie2017-07-281-0/+9
| | | | | | | Expose the underlying close() and fileno() methods which allow connection monitoring and cleanup. Signed-off-by: Richard Purdie <>
* event: Don't write duplicate logs to stdout and stderr in no UI caseRichard Purdie2017-07-281-10/+17
| | | | | | | | | | This code would duplicate messages to stdout and stderr when no UI connected and there were error level messages. Rework the code so it either uses stderr (for errors and above) or stdout for warnings/debug but not both for the same messages. Signed-off-by: Richard Purdie <>
* bitbake-diffsigs: fix regression after recent server changesPaul Eggleton2017-07-273-7/+47
| | | | | | | | | | | | | | | | We were bridging the gap between the server and UI here by calling a bb.siggen.find_siginfo, a function defined and set on that module from the metadata. This worked from the UI side before but since the recent server changes is no longer accessible. Create a new command so this can execute on the server side and return the result by way of a new event. (We're still running compare_sigfiles() on the signature generator but that isn't quite the same thing and does still work.) Fixes [YOCTO #11844]. Signed-off-by: Paul Eggleton <> Signed-off-by: Richard Purdie <>
* lib/fetch2/ Fix unpack commentMark Hatle2017-07-271-1/+1
| | | | | Signed-off-by: Mark Hatle <> Signed-off-by: Richard Purdie <>
* lib/bb/ Add missing debug levelMark Hatle2017-07-271-2/+2
| | | | | Signed-off-by: Mark Hatle <> Signed-off-by: Richard Purdie <>
* fetch2/ replace stray logger.warn() with logger.warning()Andre McCurdy2017-07-251-1/+1
| | | | | | | | | | | | Update stray usage of deprecated logger.warn(), which was introduced to fetch2/ after all other instances had been replaced by logger.warning(): Signed-off-by: Andre McCurdy <> Signed-off-by: Richard Purdie <>
* fetch/wget: mitigate a wget race condition when listing FTP directoriesRoss Burton2017-07-251-12/+11
| | | | | | | | | | | | | | | | | | | | When wget is fetching a listing for a directory over FTP it writes to a temporary file called .listing in the current directory. If there are many such operations happening in parallel - for example during 'bitbake world -c checkpkg' - then up to BB_NUMBER_THREADS instances of wget will be racing to write to, read, and delete the same file. This results in various failures such as the file disappearing before wget has processed it or the file changing contents, which causes checkpkg to randomly fail. Mitigate the race condition by creating a temporary directory to run wget in when doing directory listings. [ YOCTO #11828 ] Signed-off-by: Ross Burton <> Signed-off-by: Richard Purdie <>
* process: Change timeout warning to a noteRichard Purdie2017-07-241-1/+1
| | | | | | | | | The warning message currently shown can occur more frequently than previously if a previous bitbake server is shutting down and we're reconnecting to a new server. Change it to a note message to match the higher level connection logging retry messages and so as not to interfer with selftests. Signed-off-by: Richard Purdie <>
* cooker/process: Drop server_main functionRichard Purdie2017-07-242-23/+21
| | | | | | | | | | | | Now that there is only one server, this abstraction is no longer needed and causes indrection/confusion. The server shutdown is also broken with the cooker post_server calls happening too late, leading to "lock held" warnings in the logs if PRServ is enabled. Remove the abstraction and put the shutdown calls in the right order with respect to the locking. Signed-off-by: Richard Purdie <>
* prserv/serv: Improve process exit handlingRichard Purdie2017-07-241-2/+17
| | | | | | | | | | | | | | | | | The server shutdown is currenlty laggy and race prone. This patch: * adds a waitpid so that no zombie server is left around if its not running in daemon mode. * adds a quit "sentinal" using a pipe so that we're not sitting in a socket poll() until timeout in order just to quit. * use a select() call to poll the socket and the pipe for a quit signal. The net result of this change is that the prserv exits with the cooker server and it does so immediately and doesn't wait for the select/poll calls to timeout. This makes bitbake a lot more responsive for startup/shutdown and doesn't cause UI timeout errors as often when prserv is used. Signed-off-by: Richard Purdie <>
* fetch2/ improve error handling during sstate checkPatrick Ohly2017-07-211-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the sstate is accessed via HTTP, the existence check can fail due to network issues, in which case bitbake silently continues without sstate. One such network issue is an HTTP server like Python's own SimpleHTTP which closes the TCP connection despite an explicit "Keep-Alive" in the HTTP request header. The server does that without a "close" in the HTTP response header, so the socket remains in the connection cache, leading to "urlopen failed: <urlopen error [Errno 9] Bad file descriptor>" (only visible in "bitbake -D -D" output) when trying to use the cached connection again. The connection might also get closed for other reasons (proxy, timeouts, etc.), so this is something that the client should be able to handle. This is achieved by checking for the error, removing the bad connection, and letting the check_status() method try again with a new connection. It is necessary to let the second attempt fail permanently, because bad proxy setups have been observed to also lead to such broken connections. In that case, we need to abort for real after trying twice, otherwise a build would just hang forever. [YOCTO #11782] Signed-off-by: Patrick Ohly <> Signed-off-by: Richard Purdie <>
* toaster: trim build target inputDavid Reyna2017-07-211-2/+2
| | | | | | | | | | Trim the entered built target value so that Toaster is not confused with no real targets nor a ghost second target. [YOCTO #11727] Signed-off-by: David Reyna <> Signed-off-by: Richard Purdie <>
* toaster: set clone progress default to offDavid Reyna2017-07-212-4/+4
| | | | | | | | | | | | Set the clone progress to be off by default for the benefit of command line projects and 'Local Yocto' builds. For Toaster managed projects that do use the clone feature the clone progress status is already explicitly set by the existing code and thus displayed. [YOCTO #11744] Signed-off-by: David Reyna <> Signed-off-by: Richard Purdie <>
* toaster: include setscene in task progressDavid Reyna2017-07-211-3/+4
| | | | | | | | | | | Change the task progress counting from the task order field which excludes setscene to the task completion field which counts all completed tasks regardless of type. [YOCTO #9971] Signed-off-by: David Reyna <> Signed-off-by: Richard Purdie <>