← Back to team overview

touch-packages team mailing list archive

[Bug 703800] Re: init: restart command fails to restart main process when pre-stop stanza exists

 

Is there a workaround to get pre-stop and restart to work together?  I
want to use pre-stop to leave a pid file behind should the process die.
I can't do that with a post-stop because there is no way to tell if the
post-stop is being called because a stop was issued or if the respawn
limit was reached.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to upstart in Ubuntu.
https://bugs.launchpad.net/bugs/703800

Title:
  init: restart command fails to restart main process when pre-stop
  stanza exists

Status in upstart :
  Triaged
Status in upstart package in Ubuntu:
  Triaged

Bug description:
  While testing the portmap daemon's recent changes in Ubuntu which
  cause statd to properly follow it on stop/start, I tried to restart
  portmap, only to find that it was not in fact restarted.

  This happens with any job that has a pre-stop. The reason is that in
  job_restart(), the code does this:

  
      job_change_goal (job, JOB_STOP);
      job_change_goal (job, JOB_START);

  job_change_goal will return as soon as the *first* state change has
  been completed. If there is no pre-stop, that is the change from
  JOB_RUNNING to JOB_KILLED, which does dutifully kill the main process.

  However, if there is a pre-stop, the pre-stop is run, but then
  job_change_state returns to job_change_goal, which then returns to
  job_restart, which then changes the goal back to start, which makes
  the new job_next_state() one that will bypass the change to
  JOB_KILLED.

  This was found on upstart v0.6.7-3 in Ubuntu, but also exists in the
  code in the current trunk.

  TEST CASE

  1. create job file /etc/init/test-restart-prestop.conf  with this content:
  # test-restart-prestop

  pre-stop exec /bin/true

  exec /bin/sleep 3600
  2. run "start test-restart-prestop" -- record pid of job
  3. immediately run "restart test-restart-prestop" -- if bug is present, pid remains the same when it should be a new pid.

To manage notifications about this bug go to:
https://bugs.launchpad.net/upstart/+bug/703800/+subscriptions