[Buildbot-devel] modules, reconfig, lazy_reload & a better alternative?

Vitali Lovich vlovich at gmail.com
Fri Jan 23 20:18:46 UTC 2015


I think I got my approach working but I ran into a couple of exceptions being thrown in buildbot.
I think the pull request prevents the exceptions, but I don’t know if that’s necessarily the complete fix.
It’s just the spots I encountered:
https://github.com/buildbot/buildbot/pull/1503 <https://github.com/buildbot/buildbot/pull/1503>

Would be nice if this was applied onto 0.8.x branch too - should apply cleanly.

Thanks,
Vitali

> On Jan 23, 2015, at 10:47 AM, Vitali Lovich <vlovich at gmail.com> wrote:
> 
>> 
>> On Jan 23, 2015, at 10:44 AM, Vitali Lovich <vlovich at gmail.com <mailto:vlovich at gmail.com>> wrote:
>> 
>>> 
>>> On Jan 23, 2015, at 10:38 AM, Vitali Lovich <vlovich at gmail.com <mailto:vlovich at gmail.com>> wrote:
>>> 
>>>> 
>>>> On Jan 23, 2015, at 10:34 AM, Mikhail Sobolev <mss at mawhrin.net <mailto:mss at mawhrin.net>> wrote:
>>>> 
>>>> Hi Vitali,
>>>> 
>>>> On Fri, Jan 23, 2015 at 10:15:55AM -0800, Vitali Lovich wrote:
>>>>> I was trying to find a way to keep my buildbot organized into modules like a
>>>>> regular project but not lose the functionality of reconfig & whatnot like one
>>>>> normally would.
>>>>> 
>>>>> I stumbled across  https://github.com/dabrahams/bbproto <https://github.com/dabrahams/bbproto>
>>>>> <https://github.com/dabrahams/bbproto <https://github.com/dabrahams/bbproto>> & the lazy-reload links.  However, I
>>>>> was unhappy with lazy reload as it seemed like I would have to annotate that
>>>>> everywhere I load one of my modules, I need to lazy-reload it.  Additionally,
>>>>> it’s unclear how that works well with complex dependencies (it seems like
>>>>> modules would keep getting reloaded multiple times which would have its own
>>>>> headaches & possibly bugs)
>>>>> 
>>>>> From my prototyping, this seems like a much better solution.  Are there any
>>>>> problems?  I haven’t tried it out with buildbot yet.
>>>>> 
>>>>> import os
>>>>> import sys
>>>>> 
>>>>> codebase_dir = os.path.dirname(os.path.abspath(__file__))
>>>>> modules_to_delete = [name for name, module in sys.modules.iteritems() if hasattr(module, '__file__') and module.__file__.startswith(codebase_dir)]
>>>>> for module in modules_to_delete:
>>>>>   del sys.modules[module]
>>>>> 
>>>>> Basically, this is in the master.cfg before I load any modules.  The
>>>>> master.cfg is at the top-level directory of all other python files I might
>>>>> import.  So the master.cfg basically unloads any modules that are in my
>>>>> project.
>>>> Meta buildbot (http://buildbot.buildbot.net <http://buildbot.buildbot.net/>) uses this approach:
>>>> 
>>>>   https://github.com/buildbot/metabbotcfg/blob/master/master.cfg#L3 <https://github.com/buildbot/metabbotcfg/blob/master/master.cfg#L3>
>>>> 
>>>> Do you see any problems with it?  (Obivously, the "2nd" level modules would not
>>>> get reloaded unless they are explicitly marked so.)
>>> Isn’t there a concern that they get loaded twice on startup?
>>> 
>>> Also, I do have 2nd level modules.  Having to explicitly & manually reload everything is not ideal.
>>> 
>>> That being said, I’m not having much luck putting the above proto-type into practice so I may have to do this.
>> More specifically, my concern is my code is organized as followed (reloads added where I think they would have to be)
>> 
>> — master.cfg
>> import configuration
>> import configuration.webstatus
>> import projects
>> reload(configuration)
>> reload(configuration.webstatus)
>> reload(projects)
>> 
>> — configuration/__init__.py
>> import webstatus
>> reload(webstatus)
>> 
>> — projects/__init__.py
>> import configuration
>> reload(configuration)
>> 
>> From this setup, configuration gets reloaded something like 3 times unless I’m mistaken.
>> Is there a better way?
> Actually, I think even metabotcfg has the same problem even though it’s simpler.
> 
> If you modify common.py, nothing picks that up, no?
> 
> If you add a reload of common into the master.cfg after builders reload, then builders won’t pick up the correct value since it doesn’t reload the modules it imports, right?
> 
> So it seems like there’s an ordering problem that you’ll run into with more complicated projects...
> 
> -Vitali
> 
>> -Vitali
>> 
>>>> -- 
>>>> Misha
>>>> 
>>>> ------------------------------------------------------------------------------
>>>> New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
>>>> GigeNET is offering a free month of service with a new server in Ashburn.
>>>> Choose from 2 high performing configs, both with 100TB of bandwidth.
>>>> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
>>>> http://p.sf.net/sfu/gigenet <http://p.sf.net/sfu/gigenet>
>>>> _______________________________________________
>>>> Buildbot-devel mailing list
>>>> Buildbot-devel at lists.sourceforge.net <mailto:Buildbot-devel at lists.sourceforge.net>
>>>> https://lists.sourceforge.net/lists/listinfo/buildbot-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://buildbot.net/pipermail/devel/attachments/20150123/b22baf24/attachment.html>


More information about the devel mailing list