[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