Skip to content

Commit

Permalink
[PAXWEB-1173] Shutdown all XNIO workers created by pax-web-undertow -…
Browse files Browse the repository at this point in the history
… when needed

(cherry picked from commit 6f2ab90)
  • Loading branch information
grgrzybek committed Jul 31, 2018
1 parent 60b18c3 commit 24aee17
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ public class Context implements LifeCycle, HttpHandler, ResourceManager {

private ServiceTracker<PackageAdmin, PackageAdmin> packageAdminTracker;

private XnioWorker wsXnioWorker;

public Context(IdentityManager identityManager, ContextAwarePathHandler path, ContextModel contextModel) {
this.identityManager = identityManager;
this.path = path;
Expand Down Expand Up @@ -225,6 +227,10 @@ public synchronized void destroy() {
} catch (ServletException e) {
LOG.error(e.getMessage(), e);
}
if (wsXnioWorker != null) {
wsXnioWorker.shutdown();
}

// clean up.
// we really have to unregister all remaining ServletContext registrations, implicit Default Servlets
// and even normal servlets. For example CXF re-registers CXFServlet even when stopping
Expand Down Expand Up @@ -578,12 +584,12 @@ private void doCreateHandler(Consumer<ServletContext> consumer) throws ServletEx
}

if (isWebSocketAvailable()) {
XnioWorker xnioWorker = UndertowUtil.createWorker(contextModel.getClassLoader());
if (xnioWorker != null) {
wsXnioWorker = UndertowUtil.createWorker(contextModel.getClassLoader());
if (wsXnioWorker != null) {
deployment.addServletContextAttribute(
io.undertow.websockets.jsr.WebSocketDeploymentInfo.ATTRIBUTE_NAME,
new io.undertow.websockets.jsr.WebSocketDeploymentInfo()
.setWorker(xnioWorker)
.setWorker(wsXnioWorker)
.setBuffers(new DefaultByteBufferPool(true, 100))
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ private enum State {
private Undertow server;
private final ConcurrentMap<HttpContext, Context> contextMap = new ConcurrentHashMap<>();

private XnioWorker xnioWorker;

public ServerControllerImpl(BundleContext context) {
this.bundleContext = context;
}
Expand Down Expand Up @@ -318,12 +320,12 @@ private HttpHandler configureUndertow(Configuration configuration, Undertow.Buil

Bundle bundle = FrameworkUtil.getBundle(ServerControllerImpl.class);
ClassLoader loader = bundle.adapt(BundleWiring.class).getClassLoader();
XnioWorker worker = UndertowUtil.createWorker(loader);
xnioWorker = UndertowUtil.createWorker(loader);

// String logNameSuffix = logNCSAFormat.substring(logNCSAFormat.lastIndexOf("."));
// String logBaseName = logNCSAFormat.substring(0, logNCSAFormat.lastIndexOf("."));

AccessLogReceiver logReceiver = DefaultAccessLogReceiver.builder().setLogWriteExecutor(worker)
AccessLogReceiver logReceiver = DefaultAccessLogReceiver.builder().setLogWriteExecutor(xnioWorker)
.setOutputDirectory(new File(logNCSADirectory).toPath()).setLogBaseName("request.")
.setLogNameSuffix("log").setRotate(true).build();

Expand Down Expand Up @@ -554,10 +556,10 @@ public String getProperty(String key, String defaultValue) {

Bundle bundle = FrameworkUtil.getBundle(ServerControllerImpl.class);
ClassLoader loader = bundle.adapt(BundleWiring.class).getClassLoader();
XnioWorker worker = UndertowUtil.createWorker(loader);
xnioWorker = UndertowUtil.createWorker(loader);

AccessLogReceiver logReceiver = DefaultAccessLogReceiver.builder()
.setLogWriteExecutor(worker)
.setLogWriteExecutor(xnioWorker)
.setOutputDirectory(new File(accessLog.getDirectory()).toPath())
.setLogBaseName(accessLog.getPrefix())
.setLogNameSuffix(accessLog.getSuffix())
Expand Down Expand Up @@ -837,6 +839,9 @@ private Object createConfigurationObject(Map<String, String> config, String name
}

void doStop() {
if (xnioWorker != null) {
xnioWorker.shutdown();
}
server.stop();
}

Expand Down

0 comments on commit 24aee17

Please sign in to comment.