On Wed, Dec 20, 2023 at 5:21 PM Christopher Schultz <ch...@christopherschultz.net> wrote: > > Mark, > > Was this back-ported to the 10.1.x branch? I see the back-port to 9.0.x > and 8.5.x but not 10.1.x.
It's fine: https://github.com/apache/tomcat/commit/2b3f0f09641e0d8504a114cf296a18d66039266b Rémy > -chris > > On 12/8/23 05:27, ma...@apache.org wrote: > > This is an automated email from the ASF dual-hosted git repository. > > > > markt pushed a commit to branch main > > in repository https://gitbox.apache.org/repos/asf/tomcat.git > > > > > > The following commit(s) were added to refs/heads/main by this push: > > new f9fb4f443d Fix NIO2 and virtual threads (NIO2 requires > > ExecutorService) > > f9fb4f443d is described below > > > > commit f9fb4f443d5c6814445a42174288ae549abc83ec > > Author: Mark Thomas <ma...@apache.org> > > AuthorDate: Fri Dec 8 10:26:49 2023 +0000 > > > > Fix NIO2 and virtual threads (NIO2 requires ExecutorService) > > --- > > .../tomcat/util/threads/LocalStrings.properties | 2 + > > .../tomcat/util/threads/VirtualThreadExecutor.java | 63 > > +++++++++++++++++++++- > > webapps/docs/changelog.xml | 9 ++++ > > 3 files changed, 72 insertions(+), 2 deletions(-) > > > > diff --git a/java/org/apache/tomcat/util/threads/LocalStrings.properties > > b/java/org/apache/tomcat/util/threads/LocalStrings.properties > > index 4b28c96f84..e6999e19e4 100644 > > --- a/java/org/apache/tomcat/util/threads/LocalStrings.properties > > +++ b/java/org/apache/tomcat/util/threads/LocalStrings.properties > > @@ -19,3 +19,5 @@ threadPoolExecutor.invalidKeepAlive=Core threads must > > have positive keep alive t > > threadPoolExecutor.queueFull=Queue capacity is full > > threadPoolExecutor.taskRejected=Task [{0}] rejected from [{1}] > > threadPoolExecutor.threadStoppedToAvoidPotentialLeak=Stopping thread > > [{0}] to avoid potential memory leaks after a context was stopped. > > + > > +vvirtualThreadExecutor.taskRejected=Task [{0}] rejected from [{1}] > > \ No newline at end of file > > diff --git a/java/org/apache/tomcat/util/threads/VirtualThreadExecutor.java > > b/java/org/apache/tomcat/util/threads/VirtualThreadExecutor.java > > index 0e177fe861..461d16e05f 100644 > > --- a/java/org/apache/tomcat/util/threads/VirtualThreadExecutor.java > > +++ b/java/org/apache/tomcat/util/threads/VirtualThreadExecutor.java > > @@ -16,12 +16,23 @@ > > */ > > package org.apache.tomcat.util.threads; > > > > -import java.util.concurrent.Executor; > > +import java.util.Collections; > > +import java.util.List; > > +import java.util.concurrent.AbstractExecutorService; > > +import java.util.concurrent.CountDownLatch; > > +import java.util.concurrent.RejectedExecutionException; > > +import java.util.concurrent.TimeUnit; > > + > > +import org.apache.tomcat.util.res.StringManager; > > > > /** > > * An executor that uses a new virtual thread for each task. > > */ > > -public class VirtualThreadExecutor implements Executor { > > +public class VirtualThreadExecutor extends AbstractExecutorService { > > + > > + private static final StringManager sm = > > StringManager.getManager(VirtualThreadExecutor.class); > > + > > + private CountDownLatch shutdown = new CountDownLatch(1); > > > > private Thread.Builder threadBuilder; > > > > @@ -31,6 +42,54 @@ public class VirtualThreadExecutor implements Executor { > > > > @Override > > public void execute(Runnable command) { > > + if (isShutdown()) { > > + throw new RejectedExecutionException( > > + sm.getString("virtualThreadExecutor.taskRejected", > > command.toString(), this.toString())); > > + } > > threadBuilder.start(command); > > } > > + > > + @Override > > + public void shutdown() { > > + shutdown.countDown(); > > + } > > + > > + /** > > + * {@inheritDoc} > > + * <p> > > + * The VirtualThreadExecutor does not track in-progress tasks so > > calling this method is equivalent to calling > > + * {@link #shutdown()}. > > + */ > > + @Override > > + public List<Runnable> shutdownNow() { > > + shutdown(); > > + return Collections.emptyList(); > > + } > > + > > + @Override > > + public boolean isShutdown() { > > + return shutdown.getCount() == 0; > > + } > > + > > + /** > > + * {@inheritDoc} > > + * <p> > > + * The VirtualThreadExecutor does not track in-progress tasks so > > calling this method is equivalent to calling > > + * {@link #isShutdown()}. > > + */ > > + @Override > > + public boolean isTerminated() { > > + return isShutdown(); > > + } > > + > > + /** > > + * {@inheritDoc} > > + * <p> > > + * The VirtualThreadExecutor does not track in-progress tasks so > > calling this method is effectively waiting for > > + * {@link #shutdown()} to be called. > > + */ > > + @Override > > + public boolean awaitTermination(long timeout, TimeUnit unit) throws > > InterruptedException { > > + return shutdown.await(timeout, unit); > > + } > > } > > \ No newline at end of file > > diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml > > index 75f8106c27..73b9aaca03 100644 > > --- a/webapps/docs/changelog.xml > > +++ b/webapps/docs/changelog.xml > > @@ -105,6 +105,15 @@ > > issues do not "pop up" wrt. others). > > --> > > <section name="Tomcat 11.0.0-M16 (markt)" rtext="in development"> > > + <subsection name="Coyote"> > > + <changelog> > > + <fix> > > + Refactor the <code>VirtualThreadExecutor</code> so that it can be > > used > > + by the NIO2 connector which was using platform threads even when > > + configured to use virtual threads. (markt) > > + </fix> > > + </changelog> > > + </subsection> > > </section> > > <section name="Tomcat 11.0.0-M15 (markt)" rtext="release in progress"> > > <subsection name="Catalina"> > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > > For additional commands, e-mail: dev-h...@tomcat.apache.org > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org