<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 08:22:16 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>[DRIVERS-746] Drivers should retry operations if connection handshake fails</title>
                <link>https://jira.mongodb.org/browse/DRIVERS-746</link>
                <project id="10980" key="DRIVERS">Drivers</project>
                    <description>&lt;p&gt;This ticket is intended to track the work required to make all drivers resilient to connection handshake network errors with respect to retryable reads and writes.&lt;/p&gt;

&lt;p&gt;Currently, the retryable reads and retryable writes specifications do not &lt;em&gt;require&lt;/em&gt; that operations are retried in the following case:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;the driver successfully selects a server for the operation&lt;/li&gt;
	&lt;li&gt;there is no idle connection already available in the pool&lt;/li&gt;
	&lt;li&gt;the driver attempts to open a new connection to the server and complete the connection handshake&lt;/li&gt;
	&lt;li&gt;the connection handshake fails with a network error&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Instead, the specifications allow drivers to fail the operation without retrying, even though retrying would be safe in this case for both reads and writes.&lt;/p&gt;

&lt;p&gt;One could read these specifications such that network errors during a connection handshake fall under &lt;a href=&quot;https://github.com/mongodb/specifications/blob/master/source/retryable-writes/retryable-writes.rst#terms&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;the definition of retryable error&lt;/a&gt;, but the specifications are not explicit that this applies to the handshake and in practice multiple drivers do not interpret it that way, and there are no tests defined to assert the behavior.&lt;/p&gt;

&lt;p&gt;Similarly, the &lt;a href=&quot;https://github.com/mongodb/specifications/blob/master/source/server-selection/server-selection.rst#what-happened-to-auto-retry&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;server selection spec&lt;/a&gt; states that&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After a server is selected, several error conditions could still occur that make the selected server unsuitable for sending the operation, such as:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;the server could have shutdown the socket (e.g. a primary stepping down),&lt;/li&gt;
	&lt;li&gt;a connection pool could be empty, requiring new connections; those connections could fail to connect or could fail the server handshake&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This specification does not require nor prohibit drivers from attempting automatic recovery for various cases where it might be considered reasonable to do so, such as:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;repeating server selection if, after selection, a socket is determined to be unsuitable before a message is sent on it&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;but note it&apos;s not a MUST in the specification so in practice drivers differ in the behavior.&lt;/p&gt;
</description>
                <environment></environment>
        <key id="967617">DRIVERS-746</key>
            <summary>Drivers should retry operations if connection handshake fails</summary>
                <type id="1" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14703&amp;avatarType=issuetype">Bug</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="13453" iconUrl="https://jira.mongodb.org/images/icons/status_generic.gif" description="">Implementing</status>
                    <statusCategory id="4" key="indeterminate" colorName="inprogress"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="neal.beeken@mongodb.com">Neal Beeken</assignee>
                                    <reporter username="jeff.yemin@mongodb.com">Jeffrey Yemin</reporter>
                        <labels>
                    </labels>
                <created>Fri, 11 Oct 2019 16:18:19 +0000</created>
                <updated>Mon, 12 Dec 2022 15:28:54 +0000</updated>
                                                                <component>Retryability</component>
                                        <votes>6</votes>
                                    <watches>32</watches>
                                                                                                                <comments>
                            <comment id="4793124" author="jmikola@gmail.com" created="Wed, 31 Aug 2022 19:47:41 +0000"  >&lt;p&gt;Updated downstream changes to add missing commit hash.&lt;/p&gt;</comment>
                            <comment id="4372241" author="xgen-internal-githook" created="Wed, 23 Feb 2022 18:28:39 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Neal Beeken&apos;, &apos;email&apos;: &apos;neal.beeken@mongodb.com&apos;, &apos;username&apos;: &apos;nbbeeken&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/DRIVERS-746&quot; title=&quot;Drivers should retry operations if connection handshake fails&quot; class=&quot;issue-link&quot; data-issue-key=&quot;DRIVERS-746&quot;&gt;DRIVERS-746&lt;/a&gt;: Make handshake errors retryable (#1115)&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/specifications/commit/082306075eb2d125c47503e94fabc42f00a16784&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/specifications/commit/082306075eb2d125c47503e94fabc42f00a16784&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="3549255" author="patrick.freed" created="Tue, 5 Jan 2021 18:11:52 +0000"  >&lt;p&gt;Following up the discussion in DRIVERS-1483: this ticket would be really nice for DRIVERS-781, since we now eagerly evict threads from the WaitQueue with an error. Since these threads would not have even attempted connection establishment when they get this error, they certainly could be retried assuming we treat &quot;connection handshake fails&quot; from the title as &quot;connection check out fails&quot;.&lt;/p&gt;

&lt;p&gt;If we could prioritize this such that drivers will implement it before they release any of their DRIVERS-781 changes, that would be great. If that won&apos;t be possible, please let me know so I can make the appropriate adjustments for DRIVERS-781,&#160;though ideally this could be done all at once.&lt;/p&gt;

&lt;p&gt;cc &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=jmikola&quot; class=&quot;user-hover&quot; rel=&quot;jmikola&quot;&gt;jmikola&lt;/a&gt; &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=isabel.atkinson&quot; class=&quot;user-hover&quot; rel=&quot;isabel.atkinson&quot;&gt;isabel.atkinson&lt;/a&gt; &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=shane.harvey&quot; class=&quot;user-hover&quot; rel=&quot;shane.harvey&quot;&gt;shane.harvey&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10620">
                    <name>Issue split</name>
                                            <outwardlinks description="split to">
                                        <issuelink>
            <issuekey id="1902488">GODRIVER-2191</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902485">CDRIVER-4192</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902487">CSHARP-3919</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902494">RUBY-2815</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902495">RUST-1064</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902489">JAVA-4354</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902493">MOTOR-836</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902492">PYTHON-2951</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902491">PHPLIB-1042</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902486">CXX-2393</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1902490">NODE-3688</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="1965350">DRIVERS-2032</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2172051">DRIVERS-2489</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="1813429">DRIVERS-1842</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1466486">DRIVERS-1390</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2009504">DRIVERS-2247</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1680982">DRIVERS-2140</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                            <customfield id="customfield_13552" key="com.go2group.jira.plugin.crm:crm_generic_field">
                        <customfieldname>Case</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[[5002K00000hR9nkQAC, 5002K00000hvoM7QAI]]]></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_17052" key="com.atlassian.jira.plugin.system.customfieldtypes:textarea">
                        <customfieldname>Downstream Changes Summary</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>&lt;ul&gt;
	&lt;li&gt;Retryable reads tests now have a legacy and unified directories&lt;/li&gt;
	&lt;li&gt;Sync unified handshakeError retryable reads and retryable writes tests to &lt;a href=&quot;https://github.com/mongodb/specifications/commit/082306075eb2d125c47503e94fabc42f00a16784&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;mongodb/specifications@0823060&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Sync unified retryable-abort-handshake and retryable-commit-handshake transaction tests with &lt;a href=&quot;https://github.com/mongodb/specifications/commit/082306075eb2d125c47503e94fabc42f00a16784&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;mongodb/specifications@0823060&lt;/a&gt;. These have been written but are skipped pending &lt;a href=&quot;https://jira.mongodb.org/browse/DRIVERS-2032&quot; title=&quot;Clarify server pinning behavior and pausable pool workflow&quot; class=&quot;issue-link&quot; data-issue-key=&quot;DRIVERS-2032&quot;&gt;DRIVERS-2032&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10951" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Driver Changes</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10748"><![CDATA[Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_23952" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Driver Compliance</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[<style type='text/css'>
         #scriptField, #scriptField *{
                border: 1px solid black;
            }

            #scriptField{
                border-collapse: collapse;
            }

            #scriptField td {
                text-align: center; /* Center-align text in table cells */
            }

            #scriptField td.key {
                text-align: left; /* Left-align text in the Key column */
            }

            #scriptField a {
                text-decoration: none; /* Remove underlines from links */
                border: none; /* Remove border from links */
            }
            
            /* Add green background color to cells with FixVersion */
            #scriptField td.hasFixVersion {
                background-color: #00FF00; /* Green color code */
            }

            /* Center-align the first row headers */
            #scriptField th {
                text-align: center;
            }
        </style>
<table id='scriptField'>
  <tr>
    <th>Key</th>
    <th>Status/Resolution</th>
    <th>FixVersion</th>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/CDRIVER-4192'>CDRIVER-4192</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>1.24.0</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/CXX-2393'>CXX-2393</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>3.8.0</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/CSHARP-3919'>CSHARP-3919</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>2.15.0</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/GODRIVER-2191'>GODRIVER-2191</a>
    </td>
    <td>Blocked</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/JAVA-4354'>JAVA-4354</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>4.6.0</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/NODE-3688'>NODE-3688</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>4.6.0</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/PHPLIB-1042'>PHPLIB-1042</a>
    </td>
    <td>Blocked</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/PYTHON-2951'>PYTHON-2951</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>4.1</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/MOTOR-836'>MOTOR-836</a>
    </td>
    <td>Duplicate</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/RUBY-2815'>RUBY-2815</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>2.18.0</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/RUST-1064'>RUST-1064</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>2.2.0</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/SWIFT-1378'>SWIFT-1378</a>
    </td>
    <td>Fixed</td>
    <td class='hasFixVersion'>1.4.0</td>
  </tr>
</table>]]></customfieldvalue>


                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18362" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                        <customfieldname>Engineering Lead</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>jeff.yemin@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_18358" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                        <customfieldname>Product Manager</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>rachelle.palmer@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_21553" key="com.atlassian.jira.plugin.system.customfieldtypes:labels">
                        <customfieldname>Quarter</customfieldname>
                        <customfieldvalues>
                                        <label>FY23Q1</label>
    
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hvwqov:</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>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>