[Git][java-team/jboss-xnio][upstream] New upstream version 3.7.0

Markus Koschany gitlab at salsa.debian.org
Fri Feb 8 11:06:18 GMT 2019


Markus Koschany pushed to branch upstream at Debian Java Maintainers / jboss-xnio


Commits:
acf5555f by Markus Koschany at 2019-02-08T10:22:22Z
New upstream version 3.7.0
- - - - -


13 changed files:

- api/pom.xml
- api/src/main/java/org/xnio/ByteBufferSlicePool.java
- api/src/main/java/org/xnio/XnioIoThread.java
- api/src/main/java/org/xnio/XnioWorker.java
- api/src/main/java/org/xnio/management/XnioWorkerMXBean.java
- api/src/main/java/org/xnio/ssl/JsseSslConduitEngine.java
- api/src/main/java/org/xnio/ssl/JsseSslStreamSourceConduit.java
- api/src/main/java/org/xnio/ssl/JsseXnioSsl.java
- api/src/test/java/org/xnio/XnioWorkerTestCase.java
- nio-impl/pom.xml
- nio-impl/src/main/java/org/xnio/nio/NioXnio.java
- nio-impl/src/main/java/org/xnio/nio/NioXnioWorker.java
- pom.xml


Changes:

=====================================
api/pom.xml
=====================================
@@ -37,7 +37,7 @@
     <parent>
         <groupId>org.jboss.xnio</groupId>
         <artifactId>xnio-all</artifactId>
-        <version>3.6.3.Final</version>
+        <version>3.7.0.Final</version>
     </parent>
 
     <dependencies>


=====================================
api/src/main/java/org/xnio/ByteBufferSlicePool.java
=====================================
@@ -155,6 +155,20 @@ public final class ByteBufferSlicePool implements Pool<ByteBuffer> {
         }
     }
 
+    /**
+     * Cleans all ThreadLocal caches
+     */
+    public void clean() {
+        ThreadLocalCache localCache = localQueueHolder.get();
+        if (!localCache.queue.isEmpty()) {
+            localCache.queue.clear();
+        }
+
+        if(!sliceQueue.isEmpty()) {
+            sliceQueue.clear();
+        }
+    }
+
     /**
      * Return the size of the {@link ByteBuffer}s that are returned by {@link #allocate()}.
      */


=====================================
api/src/main/java/org/xnio/XnioIoThread.java
=====================================
@@ -251,7 +251,7 @@ public abstract class XnioIoThread extends Thread implements XnioExecutor, XnioI
             }
         }
         InetSocketAddress bindAddress = getWorker().getBindAddressTable().get(destination.getAddress());
-        return openTcpStreamConnection(bindAddress == null ? Xnio.ANY_INET_ADDRESS : bindAddress, destination, openListener, bindListener, optionMap);
+        return openTcpStreamConnection(bindAddress, destination, openListener, bindListener, optionMap);
     }
 
     public IoFuture<StreamConnection> openStreamConnection(SocketAddress bindAddress, SocketAddress destination, ChannelListener<? super StreamConnection> openListener, ChannelListener<? super BoundChannel> bindListener, OptionMap optionMap) {


=====================================
api/src/main/java/org/xnio/XnioWorker.java
=====================================
@@ -128,16 +128,23 @@ public abstract class XnioWorker extends AbstractExecutorService implements Conf
         };
         final ExecutorService executorService = builder.getExternalExecutorService();
         if (executorService != null) {
-            taskPool = new ExternalTaskPool(executorService);
+            if (executorService instanceof EnhancedQueueExecutor) {
+                taskPool = new ExternalTaskPool(
+                        new EnhancedQueueExecutorTaskPool((EnhancedQueueExecutor) executorService));
+            } else if (executorService instanceof ThreadPoolExecutor) {
+                taskPool = new ExternalTaskPool(new ThreadPoolExecutorTaskPool((ThreadPoolExecutor) executorService));
+            } else {
+                taskPool = new ExternalTaskPool(new ExecutorServiceTaskPool(executorService));
+            }
         } else if (EnhancedQueueExecutor.DISABLE_HINT) {
             final int poolSize = max(builder.getMaxWorkerPoolSize(), builder.getCoreWorkerPoolSize());
-            taskPool = new ThreadPoolExecutorTaskPool(
+            taskPool = new ThreadPoolExecutorTaskPool(new DefaultThreadPoolExecutor(
                 poolSize,
                 poolSize,
                 builder.getWorkerKeepAlive(), TimeUnit.MILLISECONDS,
                 new LinkedBlockingDeque<>(),
                 new WorkerThreadFactory(builder.getThreadGroup(), builder.getWorkerStackSize(), markThreadAsDaemon),
-                terminationTask);
+                terminationTask));
         } else {
             taskPool = new EnhancedQueueExecutorTaskPool(new EnhancedQueueExecutor.Builder()
                 .setCorePoolSize(builder.getCoreWorkerPoolSize())
@@ -948,6 +955,15 @@ public abstract class XnioWorker extends AbstractExecutorService implements Conf
         return taskPool.getActiveCount();
     }
 
+    /**
+     * Get an estimate of the number of threads in the worker pool.
+     *
+     * @return the estimated number of threads in the worker pool
+     */
+    protected final int getWorkerPoolSize() {
+        return taskPool.getPoolSize();
+    }
+
     /**
      * Get the maximum worker pool size.
      *
@@ -1290,13 +1306,15 @@ public abstract class XnioWorker extends AbstractExecutorService implements Conf
 
         int getActiveCount();
 
+        int getPoolSize();
+
         int getQueueSize();
     }
 
-    static class ThreadPoolExecutorTaskPool extends ThreadPoolExecutor implements TaskPool {
+    static class DefaultThreadPoolExecutor extends ThreadPoolExecutor {
         private final Runnable terminationTask;
 
-        ThreadPoolExecutorTaskPool(final int corePoolSize, final int maximumPoolSize, final long keepAliveTime, final TimeUnit unit, final BlockingQueue<Runnable> workQueue, final ThreadFactory threadFactory, final Runnable terminationTask) {
+        DefaultThreadPoolExecutor(final int corePoolSize, final int maximumPoolSize, final long keepAliveTime, final TimeUnit unit, final BlockingQueue<Runnable> workQueue, final ThreadFactory threadFactory, final Runnable terminationTask) {
             super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory);
             this.terminationTask = terminationTask;
         }
@@ -1318,9 +1336,73 @@ public abstract class XnioWorker extends AbstractExecutorService implements Conf
                 super.setMaximumPoolSize(size);
             }
         }
+    }
+
+    static class ThreadPoolExecutorTaskPool implements TaskPool {
+        private final ThreadPoolExecutor delegate;
+
+        ThreadPoolExecutorTaskPool(final ThreadPoolExecutor delegate) {
+            this.delegate = delegate;
+        }
 
+        @Override
+        public void shutdown() {
+            delegate.shutdown();
+        }
+
+        @Override
+        public List<Runnable> shutdownNow() {
+            return delegate.shutdownNow();
+        }
+
+        @Override
+        public void execute(final Runnable command) {
+            delegate.execute(command);
+        }
+
+        @Override
+        public int getCorePoolSize() {
+            return delegate.getCorePoolSize();
+        }
+
+        @Override
+        public int getMaximumPoolSize() {
+            return delegate.getMaximumPoolSize();
+        }
+
+        @Override
+        public long getKeepAliveTime(final TimeUnit unit) {
+            return delegate.getKeepAliveTime(unit);
+        }
+
+        @Override
+        public void setCorePoolSize(final int size) {
+            delegate.setCorePoolSize(size);
+        }
+
+        @Override
+        public void setMaximumPoolSize(final int size) {
+            delegate.setMaximumPoolSize(size);
+        }
+
+        @Override
+        public void setKeepAliveTime(final long time, final TimeUnit unit) {
+            delegate.setKeepAliveTime(time, unit);
+        }
+
+        @Override
+        public int getActiveCount() {
+            return delegate.getActiveCount();
+        }
+
+        @Override
+        public int getPoolSize() {
+            return delegate.getPoolSize();
+        }
+
+        @Override
         public int getQueueSize() {
-            return getQueue().size();
+            return delegate.getQueue().size();
         }
     }
 
@@ -1371,24 +1453,28 @@ public abstract class XnioWorker extends AbstractExecutorService implements Conf
             return executor.getActiveCount();
         }
 
+        public int getPoolSize() {
+            return executor.getPoolSize();
+        }
+
         public int getQueueSize() {
             return executor.getQueueSize();
         }
     }
 
-    static class ExternalTaskPool implements TaskPool {
+    static class ExecutorServiceTaskPool implements TaskPool {
         private final ExecutorService delegate;
 
-        ExternalTaskPool(final ExecutorService delegate) {
+        ExecutorServiceTaskPool(final ExecutorService delegate) {
             this.delegate = delegate;
         }
 
         public void shutdown() {
-            // no operation
+            delegate.shutdown();
         }
 
         public List<Runnable> shutdownNow() {
-            return Collections.emptyList();
+            return delegate.shutdownNow();
         }
 
         public void execute(final Runnable command) {
@@ -1420,9 +1506,81 @@ public abstract class XnioWorker extends AbstractExecutorService implements Conf
             return -1;
         }
 
+        public int getPoolSize() {
+            return -1;
+        }
+
         public int getQueueSize() {
             return -1;
         }
     }
+
+    static class ExternalTaskPool implements TaskPool {
+        private final TaskPool delegate;
+
+        ExternalTaskPool(final TaskPool delegate) {
+            this.delegate = delegate;
+        }
+
+        @Override
+        public void shutdown() {
+            // no operation
+        }
+
+        @Override
+        public List<Runnable> shutdownNow() {
+            return Collections.emptyList();
+        }
+
+        @Override
+        public void execute(final Runnable command) {
+            delegate.execute(command);
+        }
+
+        @Override
+        public int getCorePoolSize() {
+            return delegate.getCorePoolSize();
+        }
+
+        @Override
+        public int getMaximumPoolSize() {
+            return delegate.getMaximumPoolSize();
+        }
+
+        @Override
+        public long getKeepAliveTime(final TimeUnit unit) {
+            return delegate.getKeepAliveTime(unit);
+        }
+
+        @Override
+        public void setCorePoolSize(final int size) {
+            delegate.setCorePoolSize(size);
+        }
+
+        @Override
+        public void setMaximumPoolSize(final int size) {
+            delegate.setMaximumPoolSize(size);
+        }
+
+        @Override
+        public void setKeepAliveTime(final long time, final TimeUnit unit) {
+            delegate.setKeepAliveTime(time, unit);
+        }
+
+        @Override
+        public int getActiveCount() {
+            return delegate.getActiveCount();
+        }
+
+        @Override
+        public int getPoolSize() {
+            return delegate.getPoolSize();
+        }
+
+        @Override
+        public int getQueueSize() {
+            return delegate.getQueueSize();
+        }
+    }
 }
 


=====================================
api/src/main/java/org/xnio/management/XnioWorkerMXBean.java
=====================================
@@ -61,6 +61,13 @@ public interface XnioWorkerMXBean {
      */
     int getMaxWorkerPoolSize();
 
+    /**
+     * Get an estimate of the number of threads in the worker pool.
+     *
+     * @return the estimated number of threads in the worker pool
+     */
+    int getWorkerPoolSize();
+
     /**
      * Get an estimate of the number of busy threads in the worker pool.
      *


=====================================
api/src/main/java/org/xnio/ssl/JsseSslConduitEngine.java
=====================================
@@ -594,7 +594,7 @@ final class JsseSslConduitEngine {
     public long unwrap(final ByteBuffer[] dsts, final int offset, final int length) throws IOException {
         assert ! Thread.holdsLock(getUnwrapLock());
         assert ! Thread.holdsLock(getWrapLock());
-        if (dsts.length == 0 || length == 0) {
+        if (dsts.length == 0 || length == 0 || isClosed()) {
             return 0L;
         }
         clearFlags(FIRST_HANDSHAKE | BUFFER_UNDERFLOW);


=====================================
api/src/main/java/org/xnio/ssl/JsseSslStreamSourceConduit.java
=====================================
@@ -109,7 +109,7 @@ final class JsseSslStreamSourceConduit extends AbstractStreamSourceConduit<Strea
         if (offs < 0 || offs > len || len < 0 || offs + len > dsts.length) {
             throw new ArrayIndexOutOfBoundsException();
         }
-        if ((!sslEngine.isDataAvailable() && sslEngine.isInboundClosed()) || sslEngine.isClosed()) {
+        if (sslEngine.isClosed() || (!sslEngine.isDataAvailable() && sslEngine.isInboundClosed())) {
             return -1;
         }
         final int readResult;


=====================================
api/src/main/java/org/xnio/ssl/JsseXnioSsl.java
=====================================
@@ -66,7 +66,7 @@ import org.xnio.channels.ConnectedStreamChannel;
 public final class JsseXnioSsl extends XnioSsl {
     public static final boolean NEW_IMPL = doPrivileged((PrivilegedAction<Boolean>) () -> Boolean.valueOf(Boolean.parseBoolean(System.getProperty("org.xnio.ssl.new", "false")))).booleanValue();
 
-    static final Pool<ByteBuffer> bufferPool = new ByteBufferSlicePool(BufferAllocator.DIRECT_BYTE_BUFFER_ALLOCATOR, 17 * 1024, 17 * 1024 * 128);
+    static final Pool<ByteBuffer> bufferPool = new ByteBufferSlicePool(BufferAllocator.DIRECT_BYTE_BUFFER_ALLOCATOR, 21 * 1024, 21 * 1024 * 128);
     private final SSLContext sslContext;
 
     /**


=====================================
api/src/test/java/org/xnio/XnioWorkerTestCase.java
=====================================
@@ -199,7 +199,7 @@ public class XnioWorkerTestCase {
 
     @Test
     public void connectTcpStream() throws CancellationException, IOException {
-        checkConnectStream(new InetSocketAddress(1000), Xnio.ANY_INET_ADDRESS, XnioWorkerMock.TCP_CHANNEL_INFO);
+        checkConnectStream(new InetSocketAddress(1000), null, XnioWorkerMock.TCP_CHANNEL_INFO);
     }
 
     @Test
@@ -230,7 +230,7 @@ public class XnioWorkerTestCase {
 
     @Test
     public void connectTcpStreamWithBindListener() throws CancellationException, IOException {
-        checkConnectStreamWithBindListener(new InetSocketAddress(1500), Xnio.ANY_INET_ADDRESS, XnioWorkerMock.TCP_CHANNEL_INFO);
+        checkConnectStreamWithBindListener(new InetSocketAddress(1500), null, XnioWorkerMock.TCP_CHANNEL_INFO);
     }
 
     @Test


=====================================
nio-impl/pom.xml
=====================================
@@ -31,7 +31,7 @@
     <parent>
         <groupId>org.jboss.xnio</groupId>
         <artifactId>xnio-all</artifactId>
-        <version>3.6.3.Final</version>
+        <version>3.7.0.Final</version>
     </parent>
     
     <properties>


=====================================
nio-impl/src/main/java/org/xnio/nio/NioXnio.java
=====================================
@@ -30,6 +30,7 @@ import java.lang.reflect.InvocationTargetException;
 import org.xnio.FileSystemWatcher;
 import org.xnio.IoUtils;
 import org.xnio.Options;
+import org.xnio.ReadPropertyAction;
 import org.xnio.Xnio;
 import org.xnio.OptionMap;
 import org.xnio.XnioWorker;
@@ -75,6 +76,8 @@ final class NioXnio extends Xnio {
         final Object[] objects = AccessController.doPrivileged(
             new PrivilegedAction<Object[]>() {
                 public Object[] run() {
+                    String jdkVersion = System.getProperty("java.specification.version", "1.8");
+                    final boolean jdk9 = ! (jdkVersion.equals("1.8") || jdkVersion.equals("8"));
                     final SelectorProvider defaultProvider = SelectorProvider.provider();
                     final String chosenProvider = System.getProperty("xnio.nio.selector.provider");
                     SelectorProvider provider = null;
@@ -87,64 +90,67 @@ final class NioXnio extends Xnio {
                             provider = null;
                         }
                     }
-                    if (provider == null) {
-                        try {
-                            // Mac OS X and BSD
-                            provider = Class.forName("sun.nio.ch.KQueueSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
-                            provider.openSelector().close();
-                        } catch (Throwable e) {
-                            // not available
-                            provider = null;
+                    if (! jdk9) {
+                        // try to probe the best available provider
+                        if (provider == null) {
+                            try {
+                                // Mac OS X and BSD
+                                provider = Class.forName("sun.nio.ch.KQueueSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
+                                provider.openSelector().close();
+                            } catch (Throwable e) {
+                                // not available
+                                provider = null;
+                            }
                         }
-                    }
-                    if (provider == null) {
-                        try {
-                            // Linux
-                            provider = Class.forName("sun.nio.ch.EPollSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
-                            provider.openSelector().close();
-                        } catch (Throwable e) {
-                            // not available
-                            provider = null;
+                        if (provider == null) {
+                            try {
+                                // Linux
+                                provider = Class.forName("sun.nio.ch.EPollSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
+                                provider.openSelector().close();
+                            } catch (Throwable e) {
+                                // not available
+                                provider = null;
+                            }
                         }
-                    }
-                    if (provider == null && ! HAS_BUGGY_EVENT_PORT) {
-                        try {
-                            // Solaris (Java 8+)
-                            provider = Class.forName("sun.nio.ch.EventPortSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
-                            provider.openSelector().close();
-                        } catch (Throwable e) {
-                            // not available
-                            provider = null;
+                        if (provider == null && ! HAS_BUGGY_EVENT_PORT) {
+                            try {
+                                // Solaris (Java 8+)
+                                provider = Class.forName("sun.nio.ch.EventPortSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
+                                provider.openSelector().close();
+                            } catch (Throwable e) {
+                                // not available
+                                provider = null;
+                            }
                         }
-                    }
-                    if (provider == null) {
-                        try {
-                            // Solaris
-                            provider = Class.forName("sun.nio.ch.DevPollSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
-                            provider.openSelector().close();
-                        } catch (Throwable e) {
-                            // not available
-                            provider = null;
+                        if (provider == null) {
+                            try {
+                                // Solaris
+                                provider = Class.forName("sun.nio.ch.DevPollSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
+                                provider.openSelector().close();
+                            } catch (Throwable e) {
+                                // not available
+                                provider = null;
+                            }
                         }
-                    }
-                    if (provider == null) {
-                        try {
-                            // Solaris (Java 8+)
-                            provider = Class.forName("sun.nio.ch.EventPortSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
-                            provider.openSelector().close();
-                        } catch (Throwable e) {
-                            // not available
-                            provider = null;
+                        if (provider == null) {
+                            try {
+                                // Solaris (Java 8+)
+                                provider = Class.forName("sun.nio.ch.EventPortSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
+                                provider.openSelector().close();
+                            } catch (Throwable e) {
+                                // not available
+                                provider = null;
+                            }
                         }
-                    }
-                    if (provider == null) {
-                        try {
-                            // AIX
-                            provider = Class.forName("sun.nio.ch.PollsetSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
-                            provider.openSelector().close();
-                        } catch (Throwable e) {
-                            // not available
-                            provider = null;
+                        if (provider == null) {
+                            try {
+                                // AIX
+                                provider = Class.forName("sun.nio.ch.PollsetSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();
+                                provider.openSelector().close();
+                            } catch (Throwable e) {
+                                // not available
+                                provider = null;
+                            }
                         }
                     }
                     if (provider == null) {
@@ -189,7 +195,7 @@ final class NioXnio extends Xnio {
                     } catch (Exception e) {
                         // not available
                     }
-                    if (! defaultIsPoll) {
+                    if (! defaultIsPoll && ! jdk9) {
                         // default is fine for main selectors; we should try to get poll for temp though
                         if (objects[1] == null) try {
                             SelectorProvider pollSelectorProvider = Class.forName("sun.nio.ch.PollSelectorProvider", true, NioXnio.class.getClassLoader()).asSubclass(SelectorProvider.class).getConstructor().newInstance();


=====================================
nio-impl/src/main/java/org/xnio/nio/NioXnioWorker.java
=====================================
@@ -413,6 +413,10 @@ final class NioXnioWorker extends XnioWorker {
             return NioXnioWorker.this.getMaxWorkerPoolSize();
         }
 
+        public int getWorkerPoolSize() {
+            return NioXnioWorker.this.getWorkerPoolSize();
+        }
+
         public int getBusyWorkerThreadCount() {
             return NioXnioWorker.this.getBusyWorkerThreadCount();
         }


=====================================
pom.xml
=====================================
@@ -32,7 +32,7 @@
     <artifactId>xnio-all</artifactId>
     <packaging>pom</packaging>
     <name>XNIO Parent POM</name>
-    <version>3.6.3.Final</version>
+    <version>3.7.0.Final</version>
     <description>The aggregator POM of the XNIO project</description>
 
     <licenses>



View it on GitLab: https://salsa.debian.org/java-team/jboss-xnio/commit/acf5555fbd3b896a20c0aba980eec068a516a161

-- 
View it on GitLab: https://salsa.debian.org/java-team/jboss-xnio/commit/acf5555fbd3b896a20c0aba980eec068a516a161
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20190208/a9d239f0/attachment.html>


More information about the pkg-java-commits mailing list