Release prep, some technical news, and thanks
Eric S. Raymond
esr at thyrsus.com
Sun Sep 10 19:09:42 UTC 2017
We're down to 5 issues on the tracker, 4 not counting a completed RFE.
That's a good feeling this far in advance of our release date.
We now have an NTPsec instance providing pool service under heavy load, in
Austria. That's what smoked out the mystery crash; since then it's
been running stable and our beta tester is happy. This was an
important check; it's one thing to know that our ntpd works well on a
low-traffic desktop client setup, entirely another to be sure it can
take hundreds of requests a minute in stride.
That same tester has been sending us a steady stream of small bug
reports, mostly around ntpq, that have helped us polish and improve
it quite a lot. This has also turned up weaknesses in the
documentation, which is stronger as a result.
The new 'bias' config keyword will probably the last new feature
before we ship. There's actually more to the machinery behind it
than meets the eye; I'm going to explain that here because it might
matter past 1.0 when we think about adding new config elents to
support (say) NTS.
As I began looking at implementing 'bias' I became disturbed by what
I found in the data path from server config declarations down to the
newpeer() call that sets up a peer association. The config parser
naturally packs the decalration payload into a struct, but the
struct was then unpacked an the payjoad passed to newpeer() as
multiple argument variables.
This way of doing things made adding new config options a defect-prone
process. Basically, the argument signature of newpeer() had to change
every time; it featured an unreasonably large and increasing number
of arguments.
No more. Now the config block is passed down to newpeer(), which
copies it to a permanent home in the new peer block (after
sanity-checking some members).
Following this change, adding 'bias' was trivial. (1) add a 'bias'
member in the config block, (2) make the YACC grammar fill it in
(a thing I could do in my sleep), and (3) notice that the value is
available in the new peer block after config and do whatever with it.
The time and expected additional defect exposure associating with
adding more options is now really, really low. This doesn't mean we
should go nuts adding marginal ones, but it does give us a bit freer
hand on the design level.
Finally, I think it is also significant what kinds of bug reports we
have *not* been getting. It's hard to notice an absence, so I want
you all to take a moment to notice how infrequent, minor, and
superficial our problem reports have been. That's an achievement in
code that has been shrunk by 75%, heavily refactored, and part
rewritten in a different language.
Once again, I think this is performance for the whole team to be
proud of. Yes, I've been the lead surgeon for the heaviest C work,
but the team's support has been magnificent and maybe I have
not appreciated that as loudly as I should. Fred Brooks was
right - surgical teams *work*, and they fly not just on the
capability of the lead but on the ability of senior assistants
and the junior associates learning by example. I'm no longer
even surprised when all of you perform exceptionally well.
Let us now hope the next 18 days are boring and we can fuck
off a lot. Because that's predicts a really solid release.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
"They that can give up essential liberty to obtain a little temporary
safety deserve neither liberty nor safety."
-- Benjamin Franklin, Historical Review of Pennsylvania, 1759.
More information about the devel
mailing list