Closed Bug 708798 Opened 13 years ago Closed 12 years ago

buildbot-wrangler.py shouldn't fail when twistd.log is absent

Categories

(Release Engineering :: General, enhancement, P5)

x86
macOS
enhancement

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: jhford, Assigned: ewong)

Details

(Whiteboard: [simple])

Attachments

(1 file, 1 obsolete file)

If i try to use our fabric tools to start a master that has never been started, it fails with

[buildbot-master19.build.mtv1.mozilla.com] run: python buildbot-wrangler.py start /builds/buildbot/tests1-tegra/master
[buildbot-master19.build.mtv1.mozilla.com] out: Traceback (most recent call last):
[buildbot-master19.build.mtv1.mozilla.com] out:   File "buildbot-wrangler.py", line 193, in ?
[buildbot-master19.build.mtv1.mozilla.com] out:     w = ReconfigWatcher(twistd_log)
[buildbot-master19.build.mtv1.mozilla.com] out:   File "buildbot-wrangler.py", line 24, in __init__
[buildbot-master19.build.mtv1.mozilla.com] out:     self.fp = open(fname)
[buildbot-master19.build.mtv1.mozilla.com] out: IOError: [Errno 2] No such file or directory: '/builds/buildbot/tests1-tegra/master/twistd.log'

We should create a size 0 file before trying to open it.  Touching the file then rerunning the above makes the wrangler work
Whiteboard: [simple]
But it quits when master\twistd.log is not accessible, i.e when master doesn't exist.
Assignee: nobody → ewong
Status: NEW → ASSIGNED
Attachment #652691 - Flags: review?(catlee)
Comment on attachment 652691 [details] [diff] [review]
buildbot-wrangler.py shouldn't fail when twistd.log is absent (v1)

Review of attachment 652691 [details] [diff] [review]:
-----------------------------------------------------------------

I think the bug here is that buildbot-wrangler.py should be able to handle the file not existing gracefully and continue, rather than exiting with an error status.

One use case would be to use buildbot-wrangler.py to start the master if twistd.log doesn't exist. I think creating an empty twistd.log file and then watching that is a good avenue to explore.
Attachment #652691 - Flags: review?(catlee) → review-
(In reply to Chris AtLee [:catlee] from comment #2)
> Comment on attachment 652691 [details] [diff] [review]
> buildbot-wrangler.py shouldn't fail when twistd.log is absent (v1)
> 
> Review of attachment 652691 [details] [diff] [review]:
> -----------------------------------------------------------------
> 
> I think the bug here is that buildbot-wrangler.py should be able to handle
> the file not existing gracefully and continue, rather than exiting with an
> error status.
> 
> One use case would be to use buildbot-wrangler.py to start the master if
> twistd.log doesn't exist. I think creating an empty twistd.log file and then
> watching that is a good avenue to explore.

But the patch does allow buildbot-wrangler.py to handle a missing
twistd.log.  It exits with an error status when master/ doesn't exist. 
I can change that as I didn't want to assume that the master/ existed.
(In reply to Chris AtLee [:catlee] from comment #2)
> I think the bug here is that buildbot-wrangler.py should be able to handle
> the file not existing gracefully and continue, rather than exiting with an
> error status.

(In reply to Edmund Wong (:ewong) from comment #3)
> But the patch does allow buildbot-wrangler.py to handle a missing
> twistd.log.  It exits with an error status when master/ doesn't exist. 
> I can change that as I didn't want to assume that the master/ existed.

I'm going to try to clear up confusion here...

the Watcher() class which ewong patched, does indeed exit when twistd.log is missing, *however* we should instead not exit at this point, since we could have some cases that a missing twistd.log file is *ok*, and all the command classes override Watcher()

Example for an OK condition would be buildbot-wrangler "start" (http://mxr.mozilla.org/build/source/tools/buildfarm/maintenance/buildbot-wrangler.py#189) which inits ReconfigWatcher(), but on a missing twistd.log would fail out.

The annoying/confusing part here (ignoring twistd.log) might be trying to start reading it when it doesn't exist...

My *suggestion* add a 0-byte write to twistd.log when trying to use one of the "Missing Ok" commands *IFF* there is no twistd.pid file (such as you don't insert yourself during the twistd log rotation miliseconds)

And continue to exit in a missing twistd.log for the not-ok types.

Chris, does that sound like the best path forward? Ewong does that path sound like something you feel comfortable doing, and understand?
Catlee,  I think my confusion stems from the fact that the intention of my
code is to touch the twistd.log file (via |open(fname, 'w').close()|) and
if the "master/" folder doesn't exist (meaning anything afterwards is
going to be a moot point since the buildbot isn't set up properly), that
is when it exits.  The code, as I see it, does the following:

    if master/twistd.log exists
      os.utime it.
    otherwise try:
       touch master/twistd.log
    if this fails:  (i.e. when master/ doesn't exist)
       exits

That was my intention with the code.  But my python isn't that strong so
I probably made a mistake somewhere (not clear where it is).  Clarifications
appreciated.
Attachment #658469 - Flags: review?(catlee)
Attachment #658469 - Flags: review?(catlee) → review+
catlee, what do you think the deployment/staging plan for this should be?

This seems that it could only cause trouble when trying to do reconfigs and seems easy to backout.

I can try landing this for my next reconfig and see how it goes?
What do you think?
Attachment #658469 - Flags: checked-in+
Was told this was pushed to production, so closing.
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
Product: mozilla.org → Release Engineering
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: