8000 Merge pull request #126 from stephenc/jenkins-36144 · github-cloud/github-plugin@10e991e · GitHub
[go: up one dir, main page]

Skip to content

Commit 10e991e

Browse files
authored
Merge pull request jenkinsci#126 from stephenc/jenkins-36144
[FIXED JENKINS-36144] Borrow the SCMTrigger's queue
2 parents 19420c0 + dddd6bc commit 10e991e

File tree

1 file changed

+39
-5
lines changed

1 file changed

+39
-5
lines changed

src/main/java/com/cloudbees/jenkins/GitHubPushTrigger.java

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111
import hudson.model.Item;
1212
import hudson.model.Job;
1313
import hudson.model.Project;
14+
import hudson.triggers.SCMTrigger;
1415
import hudson.triggers.Trigger;
1516
import hudson.triggers.TriggerDescriptor;
1617
import hudson.util.FormValidation;
18+
import hudson.util.NamingThreadFactory;
1719
import hudson.util.SequentialExecutionQueue;
1820
import hudson.util.StreamTaskListener;
21+
import java.util.concurrent.Executors;
22+
import java.util.concurrent.ThreadFactory;
1923
import jenkins.model.Jenkins;
20-
import jenkins.model.Jenkins.MasterComputer;
2124
import jenkins.model.ParameterizedJobMixIn;
2225
import jenkins.triggers.SCMTriggerItem.SCMTriggerItems;
2326
import org.apache.commons.jelly.XMLOutput;
@@ -45,7 +48,6 @@
4548
import java.util.Set;
4649

4750
import static org.apache.commons.lang3.StringUtils.isEmpty;
48-
import static org.jenkinsci.plugins.github.Messages.github_trigger_check_method_warning_details;
4951
import static org.jenkinsci.plugins.github.util.JobInfoHelpers.asParameterizedJobMixIn;
5052

5153
/**
@@ -72,7 +74,9 @@ public void onPost() {
7274
*/
7375
public void onPost(String triggeredByUser) {
7476
final String pushBy = triggeredByUser;
75-
getDescriptor().queue.execute(new Runnable() {
77+
DescriptorImpl d = getDescriptor();
78+
d.checkThreadPoolSizeAndUpdateIfNecessary();
79+
d.queue.execute(new Runnable() {
7680
private boolean runPolling() {
7781
try {
7882
StreamTaskListener listener = new StreamTaskListener(getLogFile());
@@ -226,7 +230,7 @@ public void writeLogTo(XMLOutput out) throws IOException {
226230
@Extension
227231
public static class DescriptorImpl extends TriggerDescriptor {
228232
private final transient SequentialExecutionQueue queue =
229-
new SequentialExecutionQueue(MasterComputer.threadPoolForRemoting);
233+
new SequentialExecutionQueue(Executors.newSingleThreadExecutor(threadFactory()));
230234

231235
private transient String hookUrl;
232236

@@ -235,6 +239,32 @@ public static class DescriptorImpl extends TriggerDescriptor {
235239
@Inject
236240
private transient GitHubHookRegisterProblemMonitor monitor;
237241

242+
@Inject
243+
private transient SCMTrigger.DescriptorImpl scmTrigger;
244+
245+
private transient int maximumThreads = Integer.MIN_VALUE;
246+
247+
public DescriptorImpl() {
248+
checkThreadPoolSizeAndUpdateIfNecessary();
249+
}
250+
251+
/**
252+
* Update the {@link java.util.concurrent.ExecutorService} instance.
253+
*/
254+
/*package*/
255+
synchronized void checkThreadPoolSizeAndUpdateIfNecessary() {
256+
if (scmTrigger != null) {
257+
int count = scmTrigger.getPollingThreadCount();
258+
if (maximumThreads != count) {
259+
maximumThreads = count;
260+
queue.setExecutors(
261+
(count == 0
262+
? Executors.newCachedThreadPool(threadFactory())
263+
: Executors.newFixedThreadPool(maximumThreads, threadFactory())));
264+
}
265+
}
266+
}
267+
238268
@Override
239269
public boolean isApplicable(Item item) {
240270
return item instanceof Job && SCMTriggerItems.asSCMTriggerItem(item) != null
@@ -333,6 +363,10 @@ public static boolean allowsHookUrlOverride() {
333363
return ALLOW_HOOKURL_OVERRIDE;
334364
}
335365

366+
private static ThreadFactory threadFactory() {
367+
return new NamingThreadFactory(Executors.defaultThreadFactory(), "GitHubPushTrigger");
368+
}
369+
336370
/**
337371
* Checks that repo defined in this job is not in administrative monitor as failed to be registered.
338372
* If that so, shows warning with some instructions
@@ -351,7 +385,7 @@ public FormValidation doCheckHookRegistered(@AncestorInPath Job<?, ?> job) {
351385
for (GitHubRepositoryName repo : repos) {
352386
if (monitor.isProblemWith(repo)) {
353387
return FormValidation.warning(
354-
github_trigger_check_method_warning_details(
388+
org.jenkinsci.plugins.github.Messages.github_trigger_check_method_warning_details(
355389
repo.getUserName(), repo.getRepositoryName(), repo.getHost()
356390
));
357391
}

0 commit comments

Comments
 (0)
0