<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 09:02:37 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>MongoDB Jira</title>
    <link>https://jira.mongodb.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.7.1</version>
        <build-number>970001</build-number>
        <build-date>13-04-2023</build-date>
    </build-info>


<item>
            <title>[JAVA-4649] Support Virtual Threads</title>
                <link>https://jira.mongodb.org/browse/JAVA-4649</link>
                <project id="10006" key="JAVA">Java Driver</project>
                    <description>&lt;div class=&quot;panel&quot; style=&quot;background-color: #fafbfc;border-width: 1px;&quot;&gt;&lt;div class=&quot;panelContent&quot; style=&quot;background-color: #fafbfc;&quot;&gt;
&lt;h3&gt;&lt;a name=&quot;Summary&quot;&gt;&lt;/a&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/h3&gt;

&lt;p&gt;Virtual threads (&lt;a href=&quot;https://openjdk.org/jeps/444&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://openjdk.org/jeps/444&lt;/a&gt;) support is GA in Java 21 . We should make any necessary improvements to the Java driver to allow our users to make use of these new features. &lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Whoistheaffectedenduser%3F&quot;&gt;&lt;/a&gt;Who is the affected end user?&lt;/h4&gt;

&lt;p&gt;Any MongoDB Java driver applications using virtual threads in Java 21+.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Howdoesthisaffecttheenduser%3F&quot;&gt;&lt;/a&gt;How does this affect the end user?&lt;/h4&gt;

&lt;p&gt;Users can currently choose to use Future.cancel or ExecutorService.shutdownNow to attempt to cancel or shut down threads. With structured concurrency, any fork (including a transitive fork) can cause threads of all other forks still active to be interrupted. This means that forks should be responsive to interruption.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Howlikelyisitthatthisproblemorusecasewilloccur%3F&quot;&gt;&lt;/a&gt;How likely is it that this problem or use case will occur?&lt;/h4&gt;

&lt;p&gt;As more users upgrade to Java 21, they may need us to handle interruptions differently.&#160;&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Iftheproblemdoesoccur%2Cwhataretheconsequencesandhowseverearethey%3F&quot;&gt;&lt;/a&gt;If the problem does occur, what are the consequences and how severe are they?&lt;/h4&gt;

&lt;p&gt;If a socket operation is interrupted, it will be treated as a a network error. However, it should be treated as an InterruptedException. (&lt;a href=&quot;https://jira.mongodb.org/browse/JAVA-4646&quot; title=&quot;Deal with consequence of interrupted socket operation throwing SocketException&quot; class=&quot;issue-link&quot; data-issue-key=&quot;JAVA-4646&quot;&gt;&lt;del&gt;JAVA-4646&lt;/del&gt;&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Additionally, it is possible to create a scenario in which all virtual threads are starved of carrier threads due to the fact that all available carrier threads are pinned by synchronized blocks. (&lt;a href=&quot;https://jira.mongodb.org/browse/JAVA-4642&quot; title=&quot;Replace synchronized block with ReentrantLock in BaseCluster&quot; class=&quot;issue-link&quot; data-issue-key=&quot;JAVA-4642&quot;&gt;&lt;del&gt;JAVA-4642&lt;/del&gt;&lt;/a&gt;)&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Isthisissueurgent%3F&quot;&gt;&lt;/a&gt;Is this issue urgent?&lt;/h4&gt;

&lt;p&gt;Java 21 was released in September 2023.  It is an LTS release.  While generally users are slow to upgrade production apps to the latest JDK, adoption if newer JDKs is accelerating and we expect users to try this feature out as soon as it&apos;s available.  Also, many application servers (Helidon, Spring Boot, Weblogic, Quarkus) either already do or will soon be able to operate in a mode where all requests are handled on virtual threads, which means that anyone using those servers with MongoDB will easily be able to create applications which are executing Java driver code on those virtual threads. &lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Isthisticketrequiredbyadownstreamteam%3F&quot;&gt;&lt;/a&gt;Is this ticket required by a downstream team?&lt;/h4&gt;

&lt;p&gt;No&#160;&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Isthisticketonlyfortests%3F&quot;&gt;&lt;/a&gt;Is this ticket only for tests?&lt;/h4&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;CastofCharacters&quot;&gt;&lt;/a&gt;&lt;b&gt;Cast of Characters&lt;/b&gt;&lt;/h3&gt;

&lt;p&gt;Engineering Lead: &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=jeff.yemin%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;jeff.yemin@mongodb.com&quot;&gt;jeff.yemin@mongodb.com&lt;/a&gt;&lt;br/&gt;
Product Owner: &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=ashni.mehta%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;ashni.mehta@mongodb.com&quot;&gt;ashni.mehta@mongodb.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="2068508">JAVA-4649</key>
            <summary>Support Virtual Threads</summary>
                <type id="11" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14707&amp;avatarType=issuetype">Epic</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="9">Done</resolution>
                                        <assignee username="valentin.kovalenko@mongodb.com">Valentin Kavalenka</assignee>
                                    <reporter username="ashni.mehta@mongodb.com">Ashni Mehta</reporter>
                        <labels>
                    </labels>
                <created>Tue, 14 Jun 2022 18:04:21 +0000</created>
                <updated>Thu, 5 Oct 2023 12:39:15 +0000</updated>
                            <resolved>Sat, 30 Sep 2023 14:08:53 +0000</resolved>
                                                    <fixVersion>4.11.0</fixVersion>
                                                        <votes>2</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="5684286" author="JIRAUSER1258163" created="Wed, 6 Sep 2023 18:59:55 +0000"  >&lt;p&gt;We use &lt;tt&gt;FileInputStream&lt;/tt&gt;/&lt;tt&gt;FileOutputStream&lt;/tt&gt; in the legacy &lt;tt&gt;com.mongodb.gridfs&lt;/tt&gt;, and those do not support interruptible IO. We could have replaced them with &lt;tt&gt;FileChannel&lt;/tt&gt;, which is an &lt;tt&gt;InterruptibleChannel&lt;/tt&gt;, but I don&apos;t think we should spend resources on that.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10320">
                    <name>Documented</name>
                                                                <inwardlinks description="is documented by">
                                                        </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Backwards Compatibility</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10038"><![CDATA[Fully Compatible]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_21556" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Calendar Time</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>7 weeks, 4 days</customfieldvalue>


                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_20965" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Cost Threshold %</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>100.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_20963" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Cost to Date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_13653" key="com.atlassian.jira.plugin.system.customfieldtypes:textarea">
                        <customfieldname>Detailed Project Statuses</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>&lt;p&gt;Engineer(s): Valentin Kavalenka&lt;/p&gt;

&lt;p&gt;2023-09-29: Updated end date to 2023-10-06&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Everything is in review. Added a week to the end date for reviews!&lt;/li&gt;
&lt;/ul&gt;


&lt;hr /&gt;
&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;2023-09-15: Set target date to 2023-09-29&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Remaining:&#160;
	&lt;ul&gt;
		&lt;li&gt;Handle interrupts and replace uninterruptible Lock&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Valentin has been doing some work for 4.11 release this week leading up to .local and will pick this back up&lt;/li&gt;
	&lt;li&gt;Bumped up Final Cost Est by a week&lt;/li&gt;
&lt;/ul&gt;


&lt;hr /&gt;
&lt;p&gt;2023-09-01: Set target date to 2023-09-08&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Work is proceeding&lt;/li&gt;
	&lt;li&gt;Remaining:&#160;
	&lt;ul&gt;
		&lt;li&gt;Fix handling of InterruptedExceptions/SocketExceptions&lt;/li&gt;
		&lt;li&gt;Investigation of ThreadLocalRandom&apos;s interaction w/ virtual threads&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;hr /&gt;
&lt;p&gt;2023-08-18: Set target date to 2023-09-01&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Work started&lt;/li&gt;
	&lt;li&gt;Removal of synchronized blocks and methods in production code in progress&lt;/li&gt;
&lt;/ul&gt;
</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10257" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Documentation Changes</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10250"><![CDATA[Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14266" key="com.atlassian.jira.plugin.system.customfieldtypes:textarea">
                        <customfieldname>Documentation Changes Summary</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>We should mention in What&amp;#39;s new that we updated the codebase to avoid unnecessary pinning of virtual threads (&lt;a href=&quot;https://openjdk.org/jeps/444&quot;&gt;https://openjdk.org/jeps/444&lt;/a&gt;) and to preserve interrupted status of a thread, as the latter matters for structured concurrency (&lt;a href=&quot;https://openjdk.org/jeps/453&quot;&gt;https://openjdk.org/jeps/453&lt;/a&gt;) where it is used for cancellation.</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14262" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>End date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 6 Oct 2023 00:00:00 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10860" key="com.pyxis.greenhopper.jira:gh-epic-color">
                        <customfieldname>Epic Colour</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>ghx-label-8</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10858" key="com.pyxis.greenhopper.jira:gh-epic-label">
                        <customfieldname>Epic Name</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Virtual Threads Support</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10859" key="com.pyxis.greenhopper.jira:gh-epic-status">
                        <customfieldname>Epic Status</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10642"><![CDATA[Done]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_20964" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Final Cost Estimate</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_21553" key="com.atlassian.jira.plugin.system.customfieldtypes:labels">
                        <customfieldname>Quarter</customfieldname>
                        <customfieldvalues>
                                        <label>FY24Q3</label>
    
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hr3mmh:0400000942rf1n</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_10856" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Scope Cost Estimate</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14261" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>Start date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Mon, 14 Aug 2023 00:00:00 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>