提交 7f5dc7ae 编写于 作者: K kohsuke

If all executors are busy, the queue status is not getting updated.


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@8113 71c3de6d-444a-0410-be80-ed276b4c234a
上级 51b19205
package hudson.model;
import hudson.Util;
import org.kohsuke.stapler.export.ExportedBean;
import org.kohsuke.stapler.export.Exported;
import org.acegisecurity.AccessDeniedException;
import hudson.model.Node.Mode;
import hudson.triggers.SafeTimerTask;
import hudson.triggers.Trigger;
import hudson.util.OneShotEvent;
import org.acegisecurity.AccessDeniedException;
import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;
import javax.management.timer.Timer;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
......@@ -14,6 +17,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
......@@ -108,6 +112,12 @@ public class Queue extends ResourceController {
private final Map<Executor,JobOffer> parked = new HashMap<Executor,JobOffer>();
public Queue() {
// if all the executors are busy doing something, then the queue won't be maintained in
// timely fashion, so use another thread to make sure it happens.
new MaintainTask(this);
}
/**
* Loads the queue contents that was {@link #save() saved}.
*/
......@@ -725,4 +735,27 @@ public class Queue extends ResourceController {
private int iota=0;
private static final Logger LOGGER = Logger.getLogger(Queue.class.getName());
/**
* Regularly invokes {@link Queue#maintain()} and clean itself up when
* {@link Queue} gets GC-ed.
*/
private static class MaintainTask extends SafeTimerTask {
private final WeakReference<Queue> queue;
MaintainTask(Queue queue) {
this.queue = new WeakReference<Queue>(queue);
long interval = 5 * Timer.ONE_SECOND;
Trigger.timer.schedule(this, interval, interval);
}
protected void doRun() {
Queue q = queue.get();
if(q!=null)
q.maintain();
else
cancel();
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册