Issue #3088 has been reported by Josh Anderson.

----------------------------------------
Bug #3088: Puppetd fails to stop after receiving SIGTERM
http://projects.reductivelabs.com/issues/3088

Author: Josh Anderson
Status: Unreviewed
Priority: Normal
Assigned to: 
Category: 
Target version: 
Affected version: 0.25.2
Keywords: 
Branch: 


This is a weird issue that I encountered while lab testing 0.25.2.

My setup: ruby 1.8.7p160, puppet 0.25.2, Solaris 10 SPARC and x86

Here's what happens:
1. If puppetd receives a SIGTERM during a config run, it fails to stop 
completely. (Explanation below.)
2. If puppetd receives a SIGTERM when it's not in the middle of a run, it stops 
normally.

What does failing to stop mean? It logs that it's stopping, closes all 
logfiles, and then hangs. Truss says that it's poll()ing repeatedly.

To see exactly what happened, I inserted some not-very-clever tracing code into 
daemon.stop:

<pre>
    # Stop everything
    def stop(args = {:exit => true})
        if agent
            set_trace_func Proc.new { |event, file, line, id, binding, 
classname|
                mesg = "[%8s] %30s %30s (%s:%-2d)\n" % [event, id, classname, 
file, line]
                File.open('/var/tmp/trace.txt', 'a') { |f| f.write(mesg) }
            }
        end
<pre>

The rather lengthy trace output for a failed stop ends with:

<pre>
[  return]                     __signal__                  SignalEmitter 
(/opt/ruby/lib/ruby/site_ruby/1.8/puppet/external/event-loop/signal-system.rb:98)
[  return]                         signal                  SignalEmitter 
((eval):2 )
[    line]                         select                      EventLoop 
(/opt/ruby/lib/ruby/site_ruby/1.8/puppet/external/event-loop/event-loop.rb:126)
[    call]                      sleeping!                      EventLoop 
((eval):1 )
[    line]                      sleeping!                      EventLoop 
((eval):2 )
[  return]                      sleeping!                      EventLoop 
((eval):2 )
[    line]                         select                      EventLoop 
(/opt/ruby/lib/ruby/site_ruby/1.8/puppet/external/event-loop/event-loop.rb:127)
[  c-call]                              +                          Array 
(/opt/ruby/lib/ruby/site_ruby/1.8/puppet/external/event-loop/event-loop.rb:127)
[c-return]                              +                          Array 
(/opt/ruby/lib/ruby/site_ruby/1.8/puppet/external/event-loop/event-loop.rb:127)
[  c-call]                         select                             IO 
(/opt/ruby/lib/ruby/site_ruby/1.8/puppet/external/event-loop/event-loop.rb:127)
</pre>

I've attached log files and trace output for both successful and failed stops.


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://reductivelabs.com/redmine/my/account
--
You received this message because you are subscribed to the Google Groups "Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected].
For more options, visit this group at http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to