michaelpearce-gain commented on a change in pull request #2759: ARTEMIS-2408
Too many opened FDs after server stops
URL: https://github.com/apache/activemq-artemis/pull/2759#discussion_r304563505
##########
File path:
artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
##########
@@ -407,15 +408,28 @@ public void stop(final boolean criticalError) throws
Exception {
conn.disconnect(criticalError);
}
+ Map<Acceptor, Future<?>> acceptorFutures = new HashMap<>();
for (Acceptor acceptor : acceptors.values()) {
try {
- acceptor.stop();
+ acceptorFutures.put(acceptor, acceptor.asyncStop());
} catch (Throwable t) {
ActiveMQServerLogger.LOGGER.errorStoppingAcceptor(acceptor.getName());
}
}
+ long acceptorTimeout = System.currentTimeMillis() + 3000;
+ for (Map.Entry<Acceptor, Future<?>> acceptorFuture :
acceptorFutures.entrySet()) {
+ if (acceptorFuture.getValue() != null) {
+ try {
+ acceptorFuture.getValue().get(Math.max(0, acceptorTimeout -
System.currentTimeMillis()), TimeUnit.MILLISECONDS);
Review comment:
What happens to the acceptors that dont close in time? Are the port bindings
just left hanging? Is there actually a chance by doing this you leave things in
an even worse state.
Also how is blocking close on an acceptor affecting fd leak and making it
async helping, this is not clear to me. Surely the fd has already been made
when the acceptor was running.....
This really needs a unit test recreating the problem.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services