* [RFC PATCH 0/3] memres: fix for --observe-only
@ 2017-07-11 10:27 Robert Yang
2017-07-11 10:27 ` [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess Robert Yang
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Robert Yang @ 2017-07-11 10:27 UTC (permalink / raw)
To: bitbake-devel
Hello,
These are just RFC patches, bitbake memeres still has other problems as
listed here:
https://wiki.yoctoproject.org/wiki/Tinfoil2
I sent these patches earlier to make sure that I'm on the correct way.
Things I will work on recently:
1) Nongthing in bitbake-cookerdaemon.log, this is incorrect
2) Sometimes, Ctrl-C can't stop the build correctly
3) Sometimes, "bitbake -m" can't shutdown the server
// Robert
The following changes since commit 854c8c2e4c24ea3ddfec6e5b5f6477f0620510e4:
oeqa/tinfoil: Improve test_wait_event for race issues (2017-07-08 13:34:46 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib rbt/memres
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=rbt/memres
Robert Yang (3):
bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess
bitbake: lib: fix --observe-only
bitbake: uihelper.py: check event.pid is present
bitbake/lib/bb/main.py | 2 +-
bitbake/lib/bb/server/xmlrpc.py | 13 ++++++++-----
bitbake/lib/bb/ui/knotty.py | 2 ++
bitbake/lib/bb/ui/uievent.py | 5 +++--
bitbake/lib/bb/ui/uihelper.py | 41 ++++++++++++++++++++++-------------------
5 files changed, 36 insertions(+), 27 deletions(-)
--
2.11.0
^ permalink raw reply [flat|nested] 11+ messages in thread* [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess 2017-07-11 10:27 [RFC PATCH 0/3] memres: fix for --observe-only Robert Yang @ 2017-07-11 10:27 ` Robert Yang 2017-07-11 22:56 ` Richard Purdie 2017-07-11 10:27 ` [RFC PATCH 2/3] bitbake: lib: fix --observe-only Robert Yang 2017-07-11 10:27 ` [RFC PATCH 3/3] bitbake: uihelper.py: check event.pid is present Robert Yang 2 siblings, 1 reply; 11+ messages in thread From: Robert Yang @ 2017-07-11 10:27 UTC (permalink / raw) To: bitbake-devel Sometimes, we may see the errors: $ bitbake --observe-only ERROR: Unknown event: <bb.event.MonitorDiskEvent object at 0x7fbd2e0a8438> ERROR: Unknown event: <bb.event.RecipeTaskPreProcess object at 0x7fdc6b7e7b00> Signed-off-by: Robert Yang <liezhi.yang@windriver.com> --- bitbake/lib/bb/ui/knotty.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 11afb3e7441..71ec168fa6c 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -667,11 +667,13 @@ def main(server, eventHandler, params, tf = TerminalFilter): bb.event.MultiConfigParsed, bb.event.RecipeParsed, bb.event.RecipePreFinalise, + bb.event.RecipeTaskPreProcess, bb.runqueue.runQueueEvent, bb.event.OperationStarted, bb.event.OperationCompleted, bb.event.OperationProgress, bb.event.DiskFull, + bb.event.MonitorDiskEvent, bb.event.HeartbeatEvent, bb.build.TaskProgress)): continue -- 2.11.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess 2017-07-11 10:27 ` [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess Robert Yang @ 2017-07-11 22:56 ` Richard Purdie 2017-07-12 9:45 ` Robert Yang 0 siblings, 1 reply; 11+ messages in thread From: Richard Purdie @ 2017-07-11 22:56 UTC (permalink / raw) To: Robert Yang, bitbake-devel On Tue, 2017-07-11 at 03:27 -0700, Robert Yang wrote: > Sometimes, we may see the errors: > $ bitbake --observe-only > ERROR: Unknown event: <bb.event.MonitorDiskEvent object at > 0x7fbd2e0a8438> > ERROR: Unknown event: <bb.event.RecipeTaskPreProcess object at > 0x7fdc6b7e7b00> > > Signed-off-by: Robert Yang <liezhi.yang@windriver.com> > --- > bitbake/lib/bb/ui/knotty.py | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/bitbake/lib/bb/ui/knotty.py > b/bitbake/lib/bb/ui/knotty.py > index 11afb3e7441..71ec168fa6c 100644 > --- a/bitbake/lib/bb/ui/knotty.py > +++ b/bitbake/lib/bb/ui/knotty.py > @@ -667,11 +667,13 @@ def main(server, eventHandler, params, tf = > TerminalFilter): > bb.event.MultiConfigParsed, > bb.event.RecipeParsed, > bb.event.RecipePreFinalise, > + bb.event.RecipeTaskPreProcess, > bb.runqueue.runQueueEvent, > bb.event.OperationStarted, > bb.event.OperationCompleted, > bb.event.OperationProgress, > bb.event.DiskFull, > + bb.event.MonitorDiskEvent, > bb.event.HeartbeatEvent, > bb.build.TaskProgress)): > continue Do you know why we don't either always see these or always don't see them? I'm a bit worried there may be a deeper issue lurking here. Are those events part of the event mask being set? For reference, I've been looking at the server abstraction in bitbake and am close to rewriting a large part of bb.server.* and bb.main with a view to simplifying the code structure and making things easier to understand. I've noticed I see some new events with my change, equally I think its an event mask issue with my new code... I pushed my changes onto http://git.yoctoproject.org/cgit.cgi/poky-cont rib/commit/?h=rpurdie/wip- rss2&id=7d970e7b9f5499f5fcdb0e73246f106844ecf09b however I am well aware things don't work properly yet and its full of debug. When finished I should be able to delete server/__init__.py and server/xmlrpc.py. Cheers, Richard ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess 2017-07-11 22:56 ` Richard Purdie @ 2017-07-12 9:45 ` Robert Yang 2017-07-13 19:34 ` Richard Purdie 0 siblings, 1 reply; 11+ messages in thread From: Robert Yang @ 2017-07-12 9:45 UTC (permalink / raw) To: Richard Purdie, bitbake-devel Hi RP, On 07/12/2017 06:56 AM, Richard Purdie wrote: > On Tue, 2017-07-11 at 03:27 -0700, Robert Yang wrote: >> Sometimes, we may see the errors: >> $ bitbake --observe-only >> ERROR: Unknown event: <bb.event.MonitorDiskEvent object at >> 0x7fbd2e0a8438> >> ERROR: Unknown event: <bb.event.RecipeTaskPreProcess object at >> 0x7fdc6b7e7b00> >> >> Signed-off-by: Robert Yang <liezhi.yang@windriver.com> >> --- >> bitbake/lib/bb/ui/knotty.py | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/bitbake/lib/bb/ui/knotty.py >> b/bitbake/lib/bb/ui/knotty.py >> index 11afb3e7441..71ec168fa6c 100644 >> --- a/bitbake/lib/bb/ui/knotty.py >> +++ b/bitbake/lib/bb/ui/knotty.py >> @@ -667,11 +667,13 @@ def main(server, eventHandler, params, tf = >> TerminalFilter): >> bb.event.MultiConfigParsed, >> bb.event.RecipeParsed, >> bb.event.RecipePreFinalise, >> + bb.event.RecipeTaskPreProcess, >> bb.runqueue.runQueueEvent, >> bb.event.OperationStarted, >> bb.event.OperationCompleted, >> bb.event.OperationProgress, >> bb.event.DiskFull, >> + bb.event.MonitorDiskEvent, >> bb.event.HeartbeatEvent, >> bb.build.TaskProgress)): >> continue > > Do you know why we don't either always see these or always don't see > them? I'm a bit worried there may be a deeper issue lurking here. Are > those events part of the event mask being set? I digged this today, and find the reason, finally. It is harder than I had thought. Take MonitorDiskEvent as an example, the reproducer is: In terminal 1: $ bitbake -m ; . ../poky/oe-init-build-env-memres . && bitbake world -k In Terminal 2: $ bitbake --observe-only Note, the time and order is very important, otherwise we can't reproduce the problem, we must run "bitbake target" in terminal 1 firstly, and then run "bitbake --observe-only" in terminal 2 after "cache loaded" before runqueue is ready, in another words, run "bitbake --observe-only" when "Initialising tasks" is displaying in terminal 1, no early or late, then we will see the error in terminal 2 (And only in terminal 2): ERROR: Unknown event: <bb.event.MonitorDiskEvent object at 0x7f5c3776f940> The "bitbake world" (first) does everything well, but "bitbake --observe-only" (second) doesn't becuase of the following code in lib/bb/main.py: try: return ui_module.main(server_connection.connection, server_connection.events, configParams) The second run of "ui_module.main()" sends server_connection.events (bb.event.MonitorDiskEvent) which is prepared by first run, and knotty.py doesn't know how to handle it, and we will get the error. So we can't get the error if we run second bitbake earlier (the event is not ready) or later (the event had been handled by first bitbake). I think that bb.event.RecipeTaskPreProcess is similar, add them to ignore list should be fine, and I will add these explanations to commit message. > > For reference, I've been looking at the server abstraction in bitbake > and am close to rewriting a large part of bb.server.* and bb.main with > a view to simplifying the code structure and making things easier to > understand. That's great, something var name is not easy for me to understand, for example, observe_only vs observer_only. And I think that we need a simple way to restart the server, something like bitbake --restart. > > I've noticed I see some new events with my change, equally I think its > an event mask issue with my new code... > > I pushed my changes onto http://git.yoctoproject.org/cgit.cgi/poky-cont > rib/commit/?h=rpurdie/wip- > rss2&id=7d970e7b9f5499f5fcdb0e73246f106844ecf09b > however I am well aware things don't work properly yet and its full of > debug. When finished I should be able to delete server/__init__.py and > server/xmlrpc.py. I will hold on my patches until you've finished the rewriting, and please let me know if anything I can do. // Robert > > Cheers, > > Richard > > > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess 2017-07-12 9:45 ` Robert Yang @ 2017-07-13 19:34 ` Richard Purdie 2017-07-14 1:57 ` Robert Yang 0 siblings, 1 reply; 11+ messages in thread From: Richard Purdie @ 2017-07-13 19:34 UTC (permalink / raw) To: Robert Yang, bitbake-devel On Wed, 2017-07-12 at 17:45 +0800, Robert Yang wrote: > On 07/12/2017 06:56 AM, Richard Purdie wrote: > > > > Do you know why we don't either always see these or always don't > > see > > them? I'm a bit worried there may be a deeper issue lurking here. > > Are > > those events part of the event mask being set? > I digged this today, and find the reason, finally. It is harder than > I had thought. Take MonitorDiskEvent as an example, the reproducer > is: > > In terminal 1: > $ bitbake -m ; . ../poky/oe-init-build-env-memres . && bitbake world > -k > > In Terminal 2: > $ bitbake --observe-only > > Note, the time and order is very important, otherwise we can't > reproduce > the problem, we must run "bitbake target" in terminal 1 firstly, and > then > run "bitbake --observe-only" in terminal 2 after "cache loaded" > before runqueue is ready, in another words, run "bitbake --observe- > only" > when "Initialising tasks" is displaying in terminal 1, no early or > late, > then we will see the error in terminal 2 (And only in terminal 2): > > ERROR: Unknown event: <bb.event.MonitorDiskEvent object at > 0x7f5c3776f940> > > The "bitbake world" (first) does everything well, but "bitbake -- > observe-only" > (second) doesn't becuase of the following code in lib/bb/main.py: > > try: > return ui_module.main(server_connection.connection, > server_connection.events, > configParams) > > The second run of "ui_module.main()" sends server_connection.events > (bb.event.MonitorDiskEvent) which is prepared by first run, and > knotty.py > doesn't know how to handle it, and we will get the error. So we can't > get the error if we run second bitbake earlier (the event is not > ready) > or later (the event had been handled by first bitbake). > > I think that bb.event.RecipeTaskPreProcess is similar, add them > to ignore list should be fine, and I will add these explanations to > commit message. I'm not sure I agree here, I think you're right that there is a race issue however I'd rather solve any race issue than workaround it. Whilst you need to add these events today, there are likely other events which might appear tomorrow. > > For reference, I've been looking at the server abstraction in > > bitbake and am close to rewriting a large part of bb.server.* and > > bb.main with a view to simplifying the code structure and making > > things easier to understand. > That's great, something var name is not easy for me to understand, > for example, observe_only vs observer_only. And I think that we need > a simple way to restart the server, something like bitbake --restart. > > > > > > > I've noticed I see some new events with my change, equally I think > > its > > an event mask issue with my new code... > > > > I pushed my changes onto http://git.yoctoproject.org/cgit.cgi/poky- > > cont > > rib/commit/?h=rpurdie/wip- > > rss2&id=7d970e7b9f5499f5fcdb0e73246f106844ecf09b > > however I am well aware things don't work properly yet and its full > > of > > debug. When finished I should be able to delete server/__init__.py > > and > > server/xmlrpc.py. > I will hold on my patches until you've finished the rewriting, and > please let me know if anything I can do. The changes are now in master-next. I plan to split the patch up and have been revising it a bit as I find issues. It would be great if you could apply this locally and see if the issues you've found are still present after this change and help with stressing the changes a bit, see what issues we have? One thing I know is probably broken at the moment is observe-only unfortunately. I am tempted to merge the code changes I have as this gives us a platform to build on which is much more understandable than the existing codebase even if there are issues like that. Cheers, Richard ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess 2017-07-13 19:34 ` Richard Purdie @ 2017-07-14 1:57 ` Robert Yang 2017-07-14 10:27 ` Robert Yang 0 siblings, 1 reply; 11+ messages in thread From: Robert Yang @ 2017-07-14 1:57 UTC (permalink / raw) To: Richard Purdie, bitbake-devel On 07/14/2017 03:34 AM, Richard Purdie wrote: > On Wed, 2017-07-12 at 17:45 +0800, Robert Yang wrote: >> On 07/12/2017 06:56 AM, Richard Purdie wrote: >>> >>> Do you know why we don't either always see these or always don't >>> see >>> them? I'm a bit worried there may be a deeper issue lurking here. >>> Are >>> those events part of the event mask being set? >> I digged this today, and find the reason, finally. It is harder than >> I had thought. Take MonitorDiskEvent as an example, the reproducer >> is: >> >> In terminal 1: >> $ bitbake -m ; . ../poky/oe-init-build-env-memres . && bitbake world >> -k >> >> In Terminal 2: >> $ bitbake --observe-only >> >> Note, the time and order is very important, otherwise we can't >> reproduce >> the problem, we must run "bitbake target" in terminal 1 firstly, and >> then >> run "bitbake --observe-only" in terminal 2 after "cache loaded" >> before runqueue is ready, in another words, run "bitbake --observe- >> only" >> when "Initialising tasks" is displaying in terminal 1, no early or >> late, >> then we will see the error in terminal 2 (And only in terminal 2): >> >> ERROR: Unknown event: <bb.event.MonitorDiskEvent object at >> 0x7f5c3776f940> >> >> The "bitbake world" (first) does everything well, but "bitbake -- >> observe-only" >> (second) doesn't becuase of the following code in lib/bb/main.py: >> >> try: >> return ui_module.main(server_connection.connection, >> server_connection.events, >> configParams) >> >> The second run of "ui_module.main()" sends server_connection.events >> (bb.event.MonitorDiskEvent) which is prepared by first run, and >> knotty.py >> doesn't know how to handle it, and we will get the error. So we can't >> get the error if we run second bitbake earlier (the event is not >> ready) >> or later (the event had been handled by first bitbake). >> >> I think that bb.event.RecipeTaskPreProcess is similar, add them >> to ignore list should be fine, and I will add these explanations to >> commit message. > > I'm not sure I agree here, I think you're right that there is a race > issue however I'd rather solve any race issue than workaround it. > Whilst you need to add these events today, there are likely other > events which might appear tomorrow. A rough thoughts on fixing this might be: The original code: try: return ui_module.main(server_connection.connection, server_connection.events, configParams) The problem is server_connection.events contains more events than ui_module.main() can handle, we can filter them out: (fake code) filtered_events = [] for event in server_connection.events: if event in ui_module._evt_list: filtered_events.append(event) And use filtered_events to call ui_module.main(): return ui_module.main(server_connection.connection, filtered_events, configParams) Then we can totally remove the ignore list in ui like knotty.py: # ignore if isinstance(event, (bb.event.BuildBase, bb.event.MetadataEvent, bb.event.StampUpdate, bb.event.ConfigParsed, bb.event.MultiConfigParsed, bb.event.RecipeParsed, bb.event.RecipePreFinalise, bb.runqueue.runQueueEvent, bb.event.OperationStarted, bb.event.OperationCompleted, bb.event.OperationProgress, bb.event.DiskFull, bb.event.HeartbeatEvent, bb.build.TaskProgress)): continue > >>> For reference, I've been looking at the server abstraction in >>> bitbake and am close to rewriting a large part of bb.server.* and >>> bb.main with a view to simplifying the code structure and making >>> things easier to understand. >> That's great, something var name is not easy for me to understand, >> for example, observe_only vs observer_only. And I think that we need >> a simple way to restart the server, something like bitbake --restart. >> >>> >>> >>> I've noticed I see some new events with my change, equally I think >>> its >>> an event mask issue with my new code... >>> >>> I pushed my changes onto http://git.yoctoproject.org/cgit.cgi/poky- >>> cont >>> rib/commit/?h=rpurdie/wip- >>> rss2&id=7d970e7b9f5499f5fcdb0e73246f106844ecf09b >>> however I am well aware things don't work properly yet and its full >>> of >>> debug. When finished I should be able to delete server/__init__.py >>> and >>> server/xmlrpc.py. >> I will hold on my patches until you've finished the rewriting, and >> please let me know if anything I can do. > > The changes are now in master-next. I plan to split the patch up and > have been revising it a bit as I find issues. It would be great if you > could apply this locally and see if the issues you've found are still > present after this change and help with stressing the changes a bit, > see what issues we have? > > One thing I know is probably broken at the moment is observe-only > unfortunately. I am tempted to merge the code changes I have as this > gives us a platform to build on which is much more understandable than > the existing codebase even if there are issues like that. Sure, I'd like to test them today. // Robert > > Cheers, > > Richard > > > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess 2017-07-14 1:57 ` Robert Yang @ 2017-07-14 10:27 ` Robert Yang 2017-07-17 10:39 ` Robert Yang 0 siblings, 1 reply; 11+ messages in thread From: Robert Yang @ 2017-07-14 10:27 UTC (permalink / raw) To: Richard Purdie, bitbake-devel Hi RP, I tested master-next + memres today, unfortunately, I couldn't make memres work by now, I fixes part of the problems, but there are still other issues. Here are 3 fixes: git://git.pokylinux.org/poky-contrib rbt/master-next-memres http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=rbt/master-next-memres Robert Yang (3): oe-init-build-env-memres: remove "-t xmlrpc" when run bitbake server/process.py: fix self.bitbake_lock.write() bb/main.py: fix infinite loop for --server-only The main remaing issue is "bitbake --status-only" doesn't work: * Reproducer: $ . ../poky/oe-init-build-env-memres . $ bitbake --status-only [snip] OverflowError: getsockaddrarg: port must be 0-65535. I think that it is because it can't handle BBSERVER or "port == -1" correctly, we may need read port from bitbake.lock or BBSERVER, the similar to "bitbake -m": * Reproducer: $ . ../poky/oe-init-build-env-memres . $ bitbake -m OverflowError: getsockaddrarg: port must be 0-65535. WARNING: Could not create socket for localhost:-1 (getsockaddrarg: port must be 0-65535.) Other problems: 1) $ . ../poky/oe-init-build-env-memres . Starting bitbake server... DEBUG: Removed the following variables from the environment: TERMCAP, .. It prints DEBUG messages, maybe because logger is not enabled or set correctly when --server-only 2) Errors when run oe-init-build-env-memres again: (when bitbake.lock exists) $ . ../poky/oe-init-build-env-memres . $ . ../poky/oe-init-build-env-memres . File "/buildarea/lyang1/poky/bitbake/lib/bb/server/xmlrpcclient.py", line 140, in connectXMLRPC s.connect((host, port)) OSError: [Errno 22] Invalid argument 3) See the code of 2), there is a bb.warn() in xmlrpcclient.py: bb.warn("Could not create socket for %s:%s (%s)" % (host, port, str(e))) But it doesn't print to screen, maybe the similar reason to step 1), and print() works. // Robert On 07/14/2017 09:57 AM, Robert Yang wrote: > > > On 07/14/2017 03:34 AM, Richard Purdie wrote: >> On Wed, 2017-07-12 at 17:45 +0800, Robert Yang wrote: >>> On 07/12/2017 06:56 AM, Richard Purdie wrote: >>>> >>>> Do you know why we don't either always see these or always don't >>>> see >>>> them? I'm a bit worried there may be a deeper issue lurking here. >>>> Are >>>> those events part of the event mask being set? >>> I digged this today, and find the reason, finally. It is harder than >>> I had thought. Take MonitorDiskEvent as an example, the reproducer >>> is: >>> >>> In terminal 1: >>> $ bitbake -m ; . ../poky/oe-init-build-env-memres . && bitbake world >>> -k >>> >>> In Terminal 2: >>> $ bitbake --observe-only >>> >>> Note, the time and order is very important, otherwise we can't >>> reproduce >>> the problem, we must run "bitbake target" in terminal 1 firstly, and >>> then >>> run "bitbake --observe-only" in terminal 2 after "cache loaded" >>> before runqueue is ready, in another words, run "bitbake --observe- >>> only" >>> when "Initialising tasks" is displaying in terminal 1, no early or >>> late, >>> then we will see the error in terminal 2 (And only in terminal 2): >>> >>> ERROR: Unknown event: <bb.event.MonitorDiskEvent object at >>> 0x7f5c3776f940> >>> >>> The "bitbake world" (first) does everything well, but "bitbake -- >>> observe-only" >>> (second) doesn't becuase of the following code in lib/bb/main.py: >>> >>> try: >>> return ui_module.main(server_connection.connection, >>> server_connection.events, >>> configParams) >>> >>> The second run of "ui_module.main()" sends server_connection.events >>> (bb.event.MonitorDiskEvent) which is prepared by first run, and >>> knotty.py >>> doesn't know how to handle it, and we will get the error. So we can't >>> get the error if we run second bitbake earlier (the event is not >>> ready) >>> or later (the event had been handled by first bitbake). >>> >>> I think that bb.event.RecipeTaskPreProcess is similar, add them >>> to ignore list should be fine, and I will add these explanations to >>> commit message. >> >> I'm not sure I agree here, I think you're right that there is a race >> issue however I'd rather solve any race issue than workaround it. >> Whilst you need to add these events today, there are likely other >> events which might appear tomorrow. > > A rough thoughts on fixing this might be: > > The original code: > try: > return ui_module.main(server_connection.connection, > server_connection.events, configParams) > > The problem is server_connection.events contains more events than > ui_module.main() can handle, we can filter them out: (fake code) > > filtered_events = [] > > for event in server_connection.events: > if event in ui_module._evt_list: > filtered_events.append(event) > > And use filtered_events to call ui_module.main(): > return ui_module.main(server_connection.connection, filtered_events, configParams) > > Then we can totally remove the ignore list in ui like knotty.py: > > # ignore > if isinstance(event, (bb.event.BuildBase, > bb.event.MetadataEvent, > bb.event.StampUpdate, > bb.event.ConfigParsed, > bb.event.MultiConfigParsed, > bb.event.RecipeParsed, > bb.event.RecipePreFinalise, > bb.runqueue.runQueueEvent, > bb.event.OperationStarted, > bb.event.OperationCompleted, > bb.event.OperationProgress, > bb.event.DiskFull, > bb.event.HeartbeatEvent, > bb.build.TaskProgress)): > continue > >> >>>> For reference, I've been looking at the server abstraction in >>>> bitbake and am close to rewriting a large part of bb.server.* and >>>> bb.main with a view to simplifying the code structure and making >>>> things easier to understand. >>> That's great, something var name is not easy for me to understand, >>> for example, observe_only vs observer_only. And I think that we need >>> a simple way to restart the server, something like bitbake --restart. >>> >>>> >>>> >>>> I've noticed I see some new events with my change, equally I think >>>> its >>>> an event mask issue with my new code... >>>> >>>> I pushed my changes onto http://git.yoctoproject.org/cgit.cgi/poky- >>>> cont >>>> rib/commit/?h=rpurdie/wip- >>>> rss2&id=7d970e7b9f5499f5fcdb0e73246f106844ecf09b >>>> however I am well aware things don't work properly yet and its full >>>> of >>>> debug. When finished I should be able to delete server/__init__.py >>>> and >>>> server/xmlrpc.py. >>> I will hold on my patches until you've finished the rewriting, and >>> please let me know if anything I can do. >> >> The changes are now in master-next. I plan to split the patch up and >> have been revising it a bit as I find issues. It would be great if you >> could apply this locally and see if the issues you've found are still >> present after this change and help with stressing the changes a bit, >> see what issues we have? >> >> One thing I know is probably broken at the moment is observe-only >> unfortunately. I am tempted to merge the code changes I have as this >> gives us a platform to build on which is much more understandable than >> the existing codebase even if there are issues like that. > > Sure, I'd like to test them today. > > // Robert > >> >> Cheers, >> >> Richard >> >> >> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess 2017-07-14 10:27 ` Robert Yang @ 2017-07-17 10:39 ` Robert Yang 2017-07-18 22:02 ` Richard Purdie 0 siblings, 1 reply; 11+ messages in thread From: Robert Yang @ 2017-07-17 10:39 UTC (permalink / raw) To: Richard Purdie, bitbake-devel Hi RP, I can make master-next + memres partially work now, all the patches are here: git://git.pokylinux.org/poky-contrib rbt/master-next-memres http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=rbt/master-next-memres Robert Yang (8): oe-init-build-env-memres: remove "-t xmlrpc" when run bitbake server/process.py: fix self.bitbake_lock.write() bb/main.py: fix infinite loop for --server-only bb/main.py: read port and host from bitbake.lock oe-init-build-env-memres: don't export BBSERVER bb/main.py: avoid starting server when not needed server/process.py: don't quit when server_only bb/main.py: fix logic for --observe-only I'm not sure about: oe-init-build-env-memres: don't export BBSERVER The BBSERVER did cause problems, but don't export it makes bitbake know nothing about whether we need memeres or not, for example: $ . ../poky/oe-init-build-env-memres . $ bitbake -m #shutdown it $ bitbake core-image-minimal Then an one time bitbake will start (not memres), compared to old *master* branch: $ bitbake core-image-minimal WARNING: Could not connect to server at 127.0.0.1:44006 ([Errno 111] Connection refused) ERROR: Could not connect to server 127.0.0.1:44006 : [Errno 111] Connection refused I think that once the user uses "oe-init-build-env-memres" to intialize the build, then all bitbake commands should be memeres by default. (No matter connect to an existed server or shutdown and restart). So maybe we still need export BBSERVER and add more checking in bitbake to make it work as expected. BTW., we still have the warnings on master-next: ERROR: Unknown event: <bb.event.MonitorDiskEvent object at 0x7f8777de5c50> And: File "/buildarea/lyang1/poky/bitbake/lib/bb/ui/uihelper.py", line 42, in eventHandler del self.running_tasks[event.pid] KeyError: 37402 I will rebase the 3 patches and resubmit after the new code is stable. // Robert On 07/14/2017 06:27 PM, Robert Yang wrote: > Hi RP, > > I tested master-next + memres today, unfortunately, I couldn't make memres > work by now, I fixes part of the problems, but there are still other issues. > Here are 3 fixes: > > git://git.pokylinux.org/poky-contrib rbt/master-next-memres > http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=rbt/master-next-memres > > Robert Yang (3): > oe-init-build-env-memres: remove "-t xmlrpc" when run bitbake > server/process.py: fix self.bitbake_lock.write() > bb/main.py: fix infinite loop for --server-only > > > The main remaing issue is "bitbake --status-only" doesn't work: > * Reproducer: > $ . ../poky/oe-init-build-env-memres . > $ bitbake --status-only > [snip] > OverflowError: getsockaddrarg: port must be 0-65535. > > I think that it is because it can't handle BBSERVER or "port == -1" > correctly, we may need read port from bitbake.lock or BBSERVER, > the similar to "bitbake -m": > > * Reproducer: > $ . ../poky/oe-init-build-env-memres . > $ bitbake -m > OverflowError: getsockaddrarg: port must be 0-65535. > WARNING: Could not create socket for localhost:-1 (getsockaddrarg: port must be > 0-65535.) > > Other problems: > 1) $ . ../poky/oe-init-build-env-memres . > Starting bitbake server... > DEBUG: Removed the following variables from the environment: TERMCAP, .. > It prints DEBUG messages, maybe because logger is not enabled or set correctly > when --server-only > > 2) Errors when run oe-init-build-env-memres again: (when bitbake.lock exists) > $ . ../poky/oe-init-build-env-memres . > $ . ../poky/oe-init-build-env-memres . > File "/buildarea/lyang1/poky/bitbake/lib/bb/server/xmlrpcclient.py", line 140, > in connectXMLRPC > s.connect((host, port)) > OSError: [Errno 22] Invalid argument > > > 3) See the code of 2), there is a bb.warn() in xmlrpcclient.py: > bb.warn("Could not create socket for %s:%s (%s)" % (host, port, str(e))) > > But it doesn't print to screen, maybe the similar reason to step 1), > and print() works. > > // Robert > > On 07/14/2017 09:57 AM, Robert Yang wrote: >> >> >> On 07/14/2017 03:34 AM, Richard Purdie wrote: >>> On Wed, 2017-07-12 at 17:45 +0800, Robert Yang wrote: >>>> On 07/12/2017 06:56 AM, Richard Purdie wrote: >>>>> >>>>> Do you know why we don't either always see these or always don't >>>>> see >>>>> them? I'm a bit worried there may be a deeper issue lurking here. >>>>> Are >>>>> those events part of the event mask being set? >>>> I digged this today, and find the reason, finally. It is harder than >>>> I had thought. Take MonitorDiskEvent as an example, the reproducer >>>> is: >>>> >>>> In terminal 1: >>>> $ bitbake -m ; . ../poky/oe-init-build-env-memres . && bitbake world >>>> -k >>>> >>>> In Terminal 2: >>>> $ bitbake --observe-only >>>> >>>> Note, the time and order is very important, otherwise we can't >>>> reproduce >>>> the problem, we must run "bitbake target" in terminal 1 firstly, and >>>> then >>>> run "bitbake --observe-only" in terminal 2 after "cache loaded" >>>> before runqueue is ready, in another words, run "bitbake --observe- >>>> only" >>>> when "Initialising tasks" is displaying in terminal 1, no early or >>>> late, >>>> then we will see the error in terminal 2 (And only in terminal 2): >>>> >>>> ERROR: Unknown event: <bb.event.MonitorDiskEvent object at >>>> 0x7f5c3776f940> >>>> >>>> The "bitbake world" (first) does everything well, but "bitbake -- >>>> observe-only" >>>> (second) doesn't becuase of the following code in lib/bb/main.py: >>>> >>>> try: >>>> return ui_module.main(server_connection.connection, >>>> server_connection.events, >>>> configParams) >>>> >>>> The second run of "ui_module.main()" sends server_connection.events >>>> (bb.event.MonitorDiskEvent) which is prepared by first run, and >>>> knotty.py >>>> doesn't know how to handle it, and we will get the error. So we can't >>>> get the error if we run second bitbake earlier (the event is not >>>> ready) >>>> or later (the event had been handled by first bitbake). >>>> >>>> I think that bb.event.RecipeTaskPreProcess is similar, add them >>>> to ignore list should be fine, and I will add these explanations to >>>> commit message. >>> >>> I'm not sure I agree here, I think you're right that there is a race >>> issue however I'd rather solve any race issue than workaround it. >>> Whilst you need to add these events today, there are likely other >>> events which might appear tomorrow. >> >> A rough thoughts on fixing this might be: >> >> The original code: >> try: >> return ui_module.main(server_connection.connection, >> server_connection.events, configParams) >> >> The problem is server_connection.events contains more events than >> ui_module.main() can handle, we can filter them out: (fake code) >> >> filtered_events = [] >> >> for event in server_connection.events: >> if event in ui_module._evt_list: >> filtered_events.append(event) >> >> And use filtered_events to call ui_module.main(): >> return ui_module.main(server_connection.connection, filtered_events, >> configParams) >> >> Then we can totally remove the ignore list in ui like knotty.py: >> >> # ignore >> if isinstance(event, (bb.event.BuildBase, >> bb.event.MetadataEvent, >> bb.event.StampUpdate, >> bb.event.ConfigParsed, >> bb.event.MultiConfigParsed, >> bb.event.RecipeParsed, >> bb.event.RecipePreFinalise, >> bb.runqueue.runQueueEvent, >> bb.event.OperationStarted, >> bb.event.OperationCompleted, >> bb.event.OperationProgress, >> bb.event.DiskFull, >> bb.event.HeartbeatEvent, >> bb.build.TaskProgress)): >> continue >> >>> >>>>> For reference, I've been looking at the server abstraction in >>>>> bitbake and am close to rewriting a large part of bb.server.* and >>>>> bb.main with a view to simplifying the code structure and making >>>>> things easier to understand. >>>> That's great, something var name is not easy for me to understand, >>>> for example, observe_only vs observer_only. And I think that we need >>>> a simple way to restart the server, something like bitbake --restart. >>>> >>>>> >>>>> >>>>> I've noticed I see some new events with my change, equally I think >>>>> its >>>>> an event mask issue with my new code... >>>>> >>>>> I pushed my changes onto http://git.yoctoproject.org/cgit.cgi/poky- >>>>> cont >>>>> rib/commit/?h=rpurdie/wip- >>>>> rss2&id=7d970e7b9f5499f5fcdb0e73246f106844ecf09b >>>>> however I am well aware things don't work properly yet and its full >>>>> of >>>>> debug. When finished I should be able to delete server/__init__.py >>>>> and >>>>> server/xmlrpc.py. >>>> I will hold on my patches until you've finished the rewriting, and >>>> please let me know if anything I can do. >>> >>> The changes are now in master-next. I plan to split the patch up and >>> have been revising it a bit as I find issues. It would be great if you >>> could apply this locally and see if the issues you've found are still >>> present after this change and help with stressing the changes a bit, >>> see what issues we have? >>> >>> One thing I know is probably broken at the moment is observe-only >>> unfortunately. I am tempted to merge the code changes I have as this >>> gives us a platform to build on which is much more understandable than >>> the existing codebase even if there are issues like that. >> >> Sure, I'd like to test them today. >> >> // Robert >> >>> >>> Cheers, >>> >>> Richard >>> >>> >>> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess 2017-07-17 10:39 ` Robert Yang @ 2017-07-18 22:02 ` Richard Purdie 0 siblings, 0 replies; 11+ messages in thread From: Richard Purdie @ 2017-07-18 22:02 UTC (permalink / raw) To: Robert Yang, bitbake-devel Hi Robert, Thanks for these. I've queued some of this, I fixed some things differently and I have a request for some tweaks please! :) For: http://git.yoctoproject.org/cgit.cgi/poky-contrib/commit/?h=rbt/ma ster-next-memres&id=1d7df2f917cbcfa5f21c437ba2f0cc656e256eaa could you please leave pid in the lockfile. We are going to likely need an easier way to find the server in future so I'd like to have that there. With oe-init-build-env-memres, I'm simply planning to delete this. If someone wants to start a standalone server over xmlrpc, they still can but going forward most people will just set BB_SERVER_TIMEOUT=X. We can therefore drop that script (patch queued). For: http://git.yoctoproject.org/cgit.cgi/poky-contrib/commit/?h=rbt/ma ster-next-memres&id=78333885f4117e4586336c7aff6b5a9e3a6378b8 could you rename the "server_only" parameter in ProcessServer to stay_resident please? I've queued everything in bitbake master-next, I can't update poky master-next at the moment as a build is in progress. I'm hopeful the patches are becoming more stable now, not sure how many of your other issues remain if we remove the memres init script and use BB_SERVER_TIMEOUT as the preferred way to enable memres? Cheers, Richard ^ permalink raw reply [flat|nested] 11+ messages in thread
* [RFC PATCH 2/3] bitbake: lib: fix --observe-only 2017-07-11 10:27 [RFC PATCH 0/3] memres: fix for --observe-only Robert Yang 2017-07-11 10:27 ` [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess Robert Yang @ 2017-07-11 10:27 ` Robert Yang 2017-07-11 10:27 ` [RFC PATCH 3/3] bitbake: uihelper.py: check event.pid is present Robert Yang 2 siblings, 0 replies; 11+ messages in thread From: Robert Yang @ 2017-07-11 10:27 UTC (permalink / raw) To: bitbake-devel Fixed: $ . ../poky/oe-init-build-env-memres . $ bitbake world In another terminal $ . ../poky/oe-init-build-env-memres . $ bitbake --observe-only Traceback (most recent call last): File "/buildarea/lyang1/poky/bitbake/bin/bitbake", line 48, in <module> cookerdata.CookerConfiguration())) File "/buildarea/lyang1/poky/bitbake/lib/bb/main.py", line 456, in bitbake_main server, server_connection, ui_module = setup_bitbake(configParams, configuration) File "/buildarea/lyang1/poky/bitbake/lib/bb/main.py", line 544, in setup_bitbake server_connection.setupEventQueue() File "/buildarea/lyang1/poky/bitbake/lib/bb/server/xmlrpc.py", line 363, in setupEventQueue self.events = uievent.BBUIEventQueue(self.connection, self.clientinfo) File "/buildarea/lyang1/poky/bitbake/lib/bb/ui/uievent.py", line 72, in __init__ raise Exception(errmsg) Exception: Could not register UI event handler. Error: Cooker is busy: running, host 127.0.0.1, port 36350 WARNING: Could not register UI event handler. Error: Cooker is busy: running, host 127.0.0.1, port 36350, retry [snip] This was becuase xmlrpc doesn't allow connections when cooker is running, but --observe-only doesn't do any builds, so allow it to connect is safe. [YOCTO #10731] Signed-off-by: Robert Yang <liezhi.yang@windriver.com> --- bitbake/lib/bb/main.py | 2 +- bitbake/lib/bb/server/xmlrpc.py | 13 ++++++++----- bitbake/lib/bb/ui/uievent.py | 5 +++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/bitbake/lib/bb/main.py b/bitbake/lib/bb/main.py index 29e391162e6..f998e9dfef4 100755 --- a/bitbake/lib/bb/main.py +++ b/bitbake/lib/bb/main.py @@ -541,7 +541,7 @@ def setup_bitbake(configParams, configuration, extrafeatures=None, setup_logging bb.event.ui_queue = [] return None, None, None - server_connection.setupEventQueue() + server_connection.setupEventQueue(configParams.observe_only) # Restore the environment in case the UI needs it for k in cleanedvars: diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py index 1a475e04ba5..bbc37d72f9b 100644 --- a/bitbake/lib/bb/server/xmlrpc.py +++ b/bitbake/lib/bb/server/xmlrpc.py @@ -108,14 +108,14 @@ class BitBakeServerCommands(): self.server = server self.has_client = False - def registerEventHandler(self, host, port): + def registerEventHandler(self, host, port, observe_only=False): """ Register a remote UI Event Handler """ s, t = _create_server(host, port) - # we don't allow connections if the cooker is running - if (self.cooker.state in [bb.cooker.state.parsing, bb.cooker.state.running]): + # Only allow observe_only connections if the cooker is running + if (self.cooker.state in [bb.cooker.state.parsing, bb.cooker.state.running]) and not observe_only: return None, "Cooker is busy: %s" % bb.cooker.state.get_name(self.cooker.state) self.event_handle = bb.event.register_UIHhandler(s, True) @@ -359,11 +359,14 @@ class BitBakeXMLRPCServerConnection(BitBakeBaseServerConnection): self.transport.set_connection_token(token) return self - def setupEventQueue(self): - self.events = uievent.BBUIEventQueue(self.connection, self.clientinfo) + def setupEventQueue(self, observe_only=False): + self.events = uievent.BBUIEventQueue(self.connection, self.clientinfo, observe_only) for event in bb.event.ui_queue: self.events.queue_event(event) + if observe_only: + return + _, error = self.connection.runCommand(["setFeatures", self.featureset]) if error: # disconnect the client, we can't make the setFeature work diff --git a/bitbake/lib/bb/ui/uievent.py b/bitbake/lib/bb/ui/uievent.py index 9542b911ca0..7dfe02c6c97 100644 --- a/bitbake/lib/bb/ui/uievent.py +++ b/bitbake/lib/bb/ui/uievent.py @@ -28,7 +28,7 @@ import socket, threading, pickle, collections from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler class BBUIEventQueue: - def __init__(self, BBServer, clientinfo=("localhost, 0")): + def __init__(self, BBServer, clientinfo=("localhost, 0"), observe_only=False): self.eventQueue = [] self.eventQueueLock = threading.Lock() @@ -36,6 +36,7 @@ class BBUIEventQueue: self.BBServer = BBServer self.clientinfo = clientinfo + self.observe_only = observe_only server = UIXMLRPCServer(self.clientinfo) self.host, self.port = server.socket.getsockname() @@ -51,7 +52,7 @@ class BBUIEventQueue: # giving up for count_tries in range(5): - ret = self.BBServer.registerEventHandler(self.host, self.port) + ret = self.BBServer.registerEventHandler(self.host, self.port, self.observe_only) if isinstance(ret, collections.Iterable): self.EventHandle, error = ret -- 2.11.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [RFC PATCH 3/3] bitbake: uihelper.py: check event.pid is present 2017-07-11 10:27 [RFC PATCH 0/3] memres: fix for --observe-only Robert Yang 2017-07-11 10:27 ` [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess Robert Yang 2017-07-11 10:27 ` [RFC PATCH 2/3] bitbake: lib: fix --observe-only Robert Yang @ 2017-07-11 10:27 ` Robert Yang 2 siblings, 0 replies; 11+ messages in thread From: Robert Yang @ 2017-07-11 10:27 UTC (permalink / raw) To: bitbake-devel Fixed: $ . ../poky/oe-init-build-env-memres . $ bitbake world In another terminal: $ . ../poky/oe-init-build-env-memres . Run the following command and Ctrl-C several times: $ bitbake --observe-only Traceback (most recent call last): File "/buildarea/lyang1/poky/bitbake/lib/bb/ui/knotty.py", line 441, in main helper.eventHandler(event) File "/buildarea/lyang1/poky/bitbake/lib/bb/ui/uihelper.py", line 42, in eventHandler del self.running_tasks[event.pid] KeyError: 43646 This was becase the ui maybe connected at any time, so the event.pid may not be present. [YOCTO #11781] Signed-off-by: Robert Yang <liezhi.yang@windriver.com> --- bitbake/lib/bb/ui/uihelper.py | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/bitbake/lib/bb/ui/uihelper.py b/bitbake/lib/bb/ui/uihelper.py index 113fcedeaf1..307c87e149c 100644 --- a/bitbake/lib/bb/ui/uihelper.py +++ b/bitbake/lib/bb/ui/uihelper.py @@ -38,29 +38,32 @@ class BBUIHelper: self.running_tasks[event.pid] = { 'title' : "%s %s" % (event._package, event._task), 'starttime' : time.time() } self.running_pids.append(event.pid) self.needUpdate = True - elif isinstance(event, bb.build.TaskSucceeded): - del self.running_tasks[event.pid] - self.running_pids.remove(event.pid) - self.needUpdate = True - elif isinstance(event, bb.build.TaskFailedSilent): - del self.running_tasks[event.pid] - self.running_pids.remove(event.pid) - # Don't add to the failed tasks list since this is e.g. a setscene task failure - self.needUpdate = True - elif isinstance(event, bb.build.TaskFailed): - del self.running_tasks[event.pid] - self.running_pids.remove(event.pid) - self.failed_tasks.append( { 'title' : "%s %s" % (event._package, event._task)}) - self.needUpdate = True + # The ui maybe connected at any time, so make sure that the + # event.pid is already in self.running_tasks. + elif getattr(event, 'pid', 'none_pid') in self.running_tasks: + if isinstance(event, bb.build.TaskSucceeded): + del self.running_tasks[event.pid] + self.running_pids.remove(event.pid) + self.needUpdate = True + elif isinstance(event, bb.build.TaskFailedSilent): + del self.running_tasks[event.pid] + self.running_pids.remove(event.pid) + # Don't add to the failed tasks list since this is e.g. a setscene task failure + self.needUpdate = True + elif isinstance(event, bb.build.TaskFailed): + del self.running_tasks[event.pid] + self.running_pids.remove(event.pid) + self.failed_tasks.append( { 'title' : "%s %s" % (event._package, event._task)}) + self.needUpdate = True + elif isinstance(event, bb.build.TaskProgress): + if event.pid > 0: + self.running_tasks[event.pid]['progress'] = event.progress + self.running_tasks[event.pid]['rate'] = event.rate + self.needUpdate = True elif isinstance(event, bb.runqueue.runQueueTaskStarted) or isinstance(event, bb.runqueue.sceneQueueTaskStarted): self.tasknumber_current = event.stats.completed + event.stats.active + event.stats.failed + 1 self.tasknumber_total = event.stats.total self.needUpdate = True - elif isinstance(event, bb.build.TaskProgress): - if event.pid > 0: - self.running_tasks[event.pid]['progress'] = event.progress - self.running_tasks[event.pid]['rate'] = event.rate - self.needUpdate = True def getTasks(self): self.needUpdate = False -- 2.11.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-07-18 22:02 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-07-11 10:27 [RFC PATCH 0/3] memres: fix for --observe-only Robert Yang 2017-07-11 10:27 ` [RFC PATCH 1/3] bitbake: knotty.py: add MonitorDiskEvent and RecipeTaskPreProcess Robert Yang 2017-07-11 22:56 ` Richard Purdie 2017-07-12 9:45 ` Robert Yang 2017-07-13 19:34 ` Richard Purdie 2017-07-14 1:57 ` Robert Yang 2017-07-14 10:27 ` Robert Yang 2017-07-17 10:39 ` Robert Yang 2017-07-18 22:02 ` Richard Purdie 2017-07-11 10:27 ` [RFC PATCH 2/3] bitbake: lib: fix --observe-only Robert Yang 2017-07-11 10:27 ` [RFC PATCH 3/3] bitbake: uihelper.py: check event.pid is present Robert Yang
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.