<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Ah, geez. Messed up who I was sending to again...<br>
<div class="moz-forward-container"><br>
<br>
-------- Forwarded Message --------
<table class="moz-email-headers-table" border="0" cellpadding="0"
cellspacing="0">
<tbody>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Subject:
</th>
<td>Re: [<a class="moz-txt-link-abbreviated" href="mailto:users@bb.net">users@bb.net</a>] One anecdote, and some unsolicited
code.</td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Date: </th>
<td>Fri, 18 Nov 2016 10:24:42 -0600</td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">From: </th>
<td>Neil Gilmore <a class="moz-txt-link-rfc2396E" href="mailto:ngilmore@grammatech.com"><ngilmore@grammatech.com></a></td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">To: </th>
<td>Pierre Tardy <a class="moz-txt-link-rfc2396E" href="mailto:tardyp@gmail.com"><tardyp@gmail.com></a></td>
</tr>
</tbody>
</table>
<br>
<br>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
Good morning, Pierre,<br>
<br>
My scheme wouldn't work, as is, anyway. Someone would inevitably
want to change the build interval on a Periodic, it wouldn't
happen, and my inbox would fill up. But it would fix out current
major hassle -- not being able to modify the builderNames in a
scheduler. I would rewrite my hack to use comp_attrs as the things
to copy over during reconfigServiceWithSibling, except...<br>
<br>
Too many of the children of BaseScheduler don't appear to have
their comp_attrs set up properly. This would seem to be in accord
with your statement that the reconfig API isn't supported in the
schedulers yet.<br>
<br>
For example (from rc2):<br>
<br>
ClusteredBuildbotService:<br>
compare_attrs = ('name',)<br>
<br>
BaseScheduler:<br>
compare_attrs = ClusteredBuildbotService.compare_attrs + \<br>
('builderNames', 'properties', 'codebases')<br>
<br>
Timed:<br>
compare_attrs = ('reason', 'createAbsoluteSourceStamps',
'onlyIfChanged',<br>
'branch', 'fileIsImportant', 'change_filter',
'onlyImporta\<br>
nt')<br>
<br>
ForceScheduler:<br>
compare_attrs = base.BaseScheduler.compare_attrs + \<br>
('builderNames',<br>
'reason', 'username',<br>
'forcedProperties')<br>
<br>
Thus, Timed does not consider name, builderNames, properties, or
codebases when assessing 'sameness'. This is clearly incorrect.
On the other hand, ForceScheduler has builderNames twice, once
from BaseScheduler and again from itself. Also incorrect, but
probably benign.<br>
<br>
This is correctable, and if I understand, necessary to ensure that
the whole mechanism works correctly. If the SchedulerManager can't
correctly figure out the 'sameness' of schedulers, the whole thing
falls apart.<br>
<br>
It's also correctable, and would appear to be the first thing to
fix.<br>
<br class="gmail_msg">
<blockquote
cite="mid:CAJ+soVfdVVxf6w_j9eeDBvQ2P7Q59=cfA0466RKPuVPb4_FxNA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div><br>
<div>Following is the documentation. This is quite deep in
the core, so dont expect a tutorial on this, but you
still get some detailled description of the buildbot
services lifecycle. (hint: everything is a service in
buildbot)</div>
<div><a moz-do-not-send="true"
href="http://docs.buildbot.net/latest/developer/utils.html#buildbot.util.service.BuildbotService">http://docs.buildbot.net/latest/developer/utils.html#buildbot.util.service.BuildbotService</a><br>
</div>
<br class="inbox-inbox-Apple-interchange-newline">
</div>
</div>
</div>
</blockquote>
Thanks for the explicit pointer. I was having a bit of trouble
understanding exactly what checkConfig and reconfigService were
supposed to do. The config doc in docs/developer doesn't say. And
reading the code doesn't make it clear. For example, looking at
AbstractWorker's checkConfig, it might appear that checkConfig is
more about initialization than checking anything. I'm still not
quite sure how I'd write checkConfig correctly, though. Any
advice?<br>
<br>
<blockquote
cite="mid:CAJ+soVfdVVxf6w_j9eeDBvQ2P7Q59=cfA0466RKPuVPb4_FxNA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote"><br>
<div>Every unsolicited code is very welcome by the buildbot
community, we are very friendly to all contribution.</div>
<div><br>
</div>
</div>
</div>
</blockquote>
That would make buildbot nearly unique, in my experience.<br>
<br>
<blockquote
cite="mid:CAJ+soVfdVVxf6w_j9eeDBvQ2P7Q59=cfA0466RKPuVPb4_FxNA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote"><br>
<div>Yes, looks simple, but checkConfig/reconfigService is
much more flexible. Both functions can be seen like a
contructor.</div>
<div>The first part of the constructor is the part that do
the checks, and the second part that actually store the
configs inside the object attributes.</div>
<div>The good think is that the config part can be an
inlineCallbacks, so you can call deferred returning
function. This is very powerful and you cannot do that
with python constructors.</div>
<div><br>
</div>
<div>The drawback of this method is that it requires a bit
of code duplication, as the two methods must have the
exact same footprint.</div>
<div><br>
</div>
</div>
</div>
</blockquote>
I see that in every case, they do. I'm not sure why that's a
requirement, though. It would certainly seem to me that a uniform
interface, such as reconfigServiceWithSibling would be easier to
deal with than having to explicitly have two functions whose
argument lists must match. Though I freely admit that my
understanding might be colored by a rather limited knowledge of
python syntax.<br>
<br>
<br>
<blockquote
cite="mid:CAJ+soVfdVVxf6w_j9eeDBvQ2P7Q59=cfA0466RKPuVPb4_FxNA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote">I am not sure if you can't contribute
because of company policy or anything, but I would recommend
to try and contribute a proper fix.
<div><br>
</div>
</div>
</div>
</blockquote>
That's unlikely to be a problem. We have contributed to other
projects, and probably continue to do so.<br>
<br>
<blockquote
cite="mid:CAJ+soVfdVVxf6w_j9eeDBvQ2P7Q59=cfA0466RKPuVPb4_FxNA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div>I started my work with buildbot by doing such hacks in
the prod, and after 4 years we have tons of big hacks in
it. We can't upgrade our prod to the new awesomeness of
nine, and are stuck with 0.8.7. </div>
<div>This is unfortunaly the case with some other big
companies (watch were my eyes rest.).</div>
<div><br>
</div>
</div>
</div>
</blockquote>
This doesn't exactly fill me with confidence.<br>
<br>
<blockquote
cite="mid:CAJ+soVfdVVxf6w_j9eeDBvQ2P7Q59=cfA0466RKPuVPb4_FxNA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div>Buildbot is helping you a lot, so maybe its time to
help Buildbot.</div>
<br>
</div>
</div>
</blockquote>
Frankly, it's not helping me personally. It's a big time sink that
keeps me from getting my other work done. And if we'd have known
that 0.9.0 was this much less functional than the 0.8.x we were
using, I doubt we would have upgraded. So far, the only positive
feedback I've received on our upgrade is that by using
multi-master, the UI is much more responsive. But no one here
likes the new UI (except the queue-cancelling button). And many
are positively furious at the loss of functionality, especially
the problem with schedulers not reconfiguring properly. Being the
messenger, as it were, much of that appears directed at me. At
least I figured out how to fix our stuck builds. It's a hassle to
open/close the manhole every time, but at least I can do it.<br>
<br>
Neil Gilmore<br>
grammatech.com<br>
</div>
</body>
</html>