<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>