1 /*
2 * JBoss, Home of Professional Open Source.
3 * Copyright 2014 Red Hat, Inc., and individual contributors
4 * as indicated by the @author tags.
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 package io.undertow.util;
20
21 import java.util.concurrent.RejectedExecutionException;
22 import java.util.concurrent.TimeUnit;
23
24 import org.xnio.XnioExecutor;
25 import org.xnio.XnioIoThread;
26 import io.undertow.UndertowLogger;
27
28 /**
29 * @author Stuart Douglas
30 */
31 public class WorkerUtils {
32
33 private WorkerUtils() {
34 }
35
36 /**
37 * Schedules a task for future execution. If the execution is rejected because the worker is shutting
38 * down then it is logged at debug level and the exception is not re-thrown
39 * @param thread The IO thread
40 * @param task The task to execute
41 * @param timeout The timeout
42 * @param timeUnit The time unit
43 */
44 public static XnioExecutor.Key executeAfter(XnioIoThread thread, Runnable task, long timeout, TimeUnit timeUnit) {
45 try {
46 return thread.executeAfter(task, timeout, timeUnit);
47 } catch (RejectedExecutionException e) {
48 if(thread.getWorker().isShutdown()) {
49 UndertowLogger.ROOT_LOGGER.debugf(e, "Failed to schedule task %s as worker is shutting down", task);
50 //we just return a bogus key in this case
51 return new XnioExecutor.Key() {
52 @Override
53 public boolean remove() {
54 return false;
55 }
56 };
57 } else {
58 throw e;
59 }
60 }
61 }
62 }
63