From 58497203819a2c0cfdeadd27786c2f5a655c3df4 Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Wed, 20 Jan 2016 14:07:47 -0500 Subject: [PATCH] ARTEMIS-353 retrying after interrupts on the native layer because of jmap issuing weird interrupts https://issues.apache.org/jira/browse/ARTEMIS-353 --- .../core/io/aio/AIOSequentialFileFactory.java | 46 ++++++++---------- artemis-native/bin/libartemis-native-32.so | Bin 26789 -> 26789 bytes artemis-native/bin/libartemis-native-64.so | Bin 25003 -> 25003 bytes ...e_activemq_artemis_jlibaio_LibaioContext.c | 9 +++- .../artemis/jlibaio/LibaioContext.java | 2 +- 5 files changed, 29 insertions(+), 28 deletions(-) diff --git a/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/aio/AIOSequentialFileFactory.java b/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/aio/AIOSequentialFileFactory.java index 58f72486595..b7bb47e924a 100644 --- a/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/aio/AIOSequentialFileFactory.java +++ b/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/aio/AIOSequentialFileFactory.java @@ -19,12 +19,7 @@ import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.activemq.artemis.ArtemisConstants; @@ -38,7 +33,6 @@ import org.apache.activemq.artemis.jlibaio.SubmitInfo; import org.apache.activemq.artemis.jlibaio.util.CallbackCache; import org.apache.activemq.artemis.journal.ActiveMQJournalLogger; -import org.apache.activemq.artemis.utils.ActiveMQThreadFactory; public final class AIOSequentialFileFactory extends AbstractSequentialFileFactory { @@ -48,7 +42,7 @@ public final class AIOSequentialFileFactory extends AbstractSequentialFileFactor private volatile boolean reuseBuffers = true; - private ExecutorService pollerExecutor; + private Thread pollerThread; volatile LibaioContext libaioContext; @@ -195,14 +189,8 @@ public void start() { this.running.set(true); - pollerExecutor = Executors.newCachedThreadPool(AccessController.doPrivileged(new PrivilegedAction() { - @Override - public ActiveMQThreadFactory run() { - return new ActiveMQThreadFactory("ActiveMQ-AIO-poller-pool" + System.identityHashCode(this), true, AIOSequentialFileFactory.class.getClassLoader()); - } - })); - - pollerExecutor.execute(new PollerRunnable()); + pollerThread = new PollerThread(); + pollerThread.start(); } } @@ -215,11 +203,11 @@ public void stop() { libaioContext.close(); libaioContext = null; - if (pollerExecutor != null) { - pollerExecutor.shutdown(); - + if (pollerThread != null) { try { - if (!pollerExecutor.awaitTermination(AbstractSequentialFileFactory.EXECUTOR_TIMEOUT, TimeUnit.SECONDS)) { + pollerThread.join(AbstractSequentialFileFactory.EXECUTOR_TIMEOUT * 1000); + + if (pollerThread.isAlive()) { ActiveMQJournalLogger.LOGGER.timeoutOnPollerShutdown(new Exception("trace")); } } @@ -232,11 +220,6 @@ public void stop() { } } - @Override - protected void finalize() { - stop(); - } - /** * The same callback is used for Runnable executor. * This way we can save some memory over the pool. @@ -348,11 +331,22 @@ public void sequentialDone() { } } - private class PollerRunnable implements Runnable { + private class PollerThread extends Thread { + + public PollerThread() { + super("Apache ActiveMQ Artemis libaio poller"); + } @Override public void run() { - libaioContext.poll(); + while (running.get()) { + try { + libaioContext.poll(); + } + catch (Throwable e) { + ActiveMQJournalLogger.LOGGER.warn(e.getMessage(), e); + } + } } } diff --git a/artemis-native/bin/libartemis-native-32.so b/artemis-native/bin/libartemis-native-32.so index 7a7f451615ec7e4f51582fcfccbcf268c15aa57e..fb4773bd6d938ce630a11a7567ad0bb1af0dc726 100755 GIT binary patch delta 2537 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 ATmS$7 delta 2412 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 diff --git a/artemis-native/src/main/c/org_apache_activemq_artemis_jlibaio_LibaioContext.c b/artemis-native/src/main/c/org_apache_activemq_artemis_jlibaio_LibaioContext.c index 0d09ed14853..860d192644a 100644 --- a/artemis-native/src/main/c/org_apache_activemq_artemis_jlibaio_LibaioContext.c +++ b/artemis-native/src/main/c/org_apache_activemq_artemis_jlibaio_LibaioContext.c @@ -557,9 +557,16 @@ JNIEXPORT void JNICALL Java_org_apache_activemq_artemis_jlibaio_LibaioContext_bl int result = io_getevents(theControl->ioContext, 1, max, theControl->events, 0); + if (result == -EINTR) + { + // ARTEMIS-353: jmap will issue some weird interrupt signal what would break the execution here + // we need to ignore such calls here + continue; + } + if (result < 0) { - throwIOExceptionErrorNo(env, "Error while submitting IO: ", -result); + throwIOExceptionErrorNo(env, "Error while calling io_getevents IO: ", -result); break; } #ifdef DEBUG diff --git a/artemis-native/src/main/java/org/apache/activemq/artemis/jlibaio/LibaioContext.java b/artemis-native/src/main/java/org/apache/activemq/artemis/jlibaio/LibaioContext.java index f7cc0d3cd49..75db50dc9f6 100644 --- a/artemis-native/src/main/java/org/apache/activemq/artemis/jlibaio/LibaioContext.java +++ b/artemis-native/src/main/java/org/apache/activemq/artemis/jlibaio/LibaioContext.java @@ -49,7 +49,7 @@ public class LibaioContext implements Closeable { *
* Or else the native module won't be loaded because of version mismatches */ - private static final int EXPECTED_NATIVE_VERSION = 5; + private static final int EXPECTED_NATIVE_VERSION = 6; private static boolean loaded = false;