<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 04:27:42 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>[SERVER-31631] Bump minimum outgoing wire version for mongod when featureCompatibilityVersion is 3.6</title>
                <link>https://jira.mongodb.org/browse/SERVER-31631</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;A mongod with &lt;tt&gt;featureCompatibilityVersion&lt;/tt&gt; 3.6 should have minimum outgoing wire version equal to its maximum outgoing wire version. This means that when it receives an &lt;tt&gt;isMaster&lt;/tt&gt; response, it will close the connection if the response is not from a 3.6 (or higher) node. &lt;/p&gt;

&lt;p&gt;A 3.6 mongod also needs to close connections to 3.4 mongods that it initiated when it goes into upgrading state.&lt;/p&gt;

&lt;p&gt;This is will cause heartbeats to 3.4 replica set members to fail, so that the 3.4 member is not considered healthy. This will also prevent FCV=3.6 shards from establishing connections with 3.4 shards.&lt;/p&gt;</description>
                <environment></environment>
        <key id="447855">SERVER-31631</key>
            <summary>Bump minimum outgoing wire version for mongod when featureCompatibilityVersion is 3.6</summary>
                <type id="3" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14718&amp;avatarType=issuetype">Task</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="13201">Fixed</resolution>
                                        <assignee username="tess.avitabile@mongodb.com">Tess Avitabile</assignee>
                                    <reporter username="tess.avitabile@mongodb.com">Tess Avitabile</reporter>
                        <labels>
                    </labels>
                <created>Wed, 18 Oct 2017 21:46:16 +0000</created>
                <updated>Mon, 8 Jan 2024 15:23:11 +0000</updated>
                            <resolved>Thu, 9 Nov 2017 15:11:42 +0000</resolved>
                                                    <fixVersion>3.6.0-rc4</fixVersion>
                                    <component>Replication</component>
                                        <votes>0</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="1721492" author="xgen-internal-githook" created="Thu, 9 Nov 2017 15:11:21 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Tess Avitabile&apos;, &apos;username&apos;: &apos;tessavitabile&apos;, &apos;email&apos;: &apos;tess.avitabile@mongodb.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-31631&quot; title=&quot;Bump minimum outgoing wire version for mongod when featureCompatibilityVersion is 3.6&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-31631&quot;&gt;&lt;del&gt;SERVER-31631&lt;/del&gt;&lt;/a&gt; Bump minimum outgoing wire version for mongod when featureCompatibilityVersion is 3.6&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/271879b7a67c9d9b36778692f2a77e04c6403a1f&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/271879b7a67c9d9b36778692f2a77e04c6403a1f&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="1710257" author="tess.avitabile" created="Thu, 26 Oct 2017 17:09:41 +0000"  >&lt;p&gt;Per in-person discussion, we will add an extra field to &lt;tt&gt;replSetHeartbeat&lt;/tt&gt;, and we will not attempt to close outgoing connections to downgrade shards on FCV bump. In 3.8, it would be desirable to be able to tag and close outgoing connections to downgrade nodes on FCV bump.&lt;/p&gt;</comment>
                            <comment id="1709598" author="spencer" created="Wed, 25 Oct 2017 22:57:34 +0000"  >&lt;p&gt;Bummer.&lt;br/&gt;
It does look like heatbeats in 3.4 &lt;a href=&quot;https://github.com/mongodb/mongo/blob/v3.4/src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp#L60&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;validate&lt;/a&gt; that there are no unexpected fields, so that approach would work for heartbeats.  I&apos;m still a bit concerned that there&apos;ll be another case we&apos;re not thinking of, but not overwhelmingly so.&lt;/p&gt;

&lt;p&gt;The alternative would be to just close &lt;b&gt;all&lt;/b&gt; outgoing connections on FCV change, which would have an impact on any ongoing cross-mongod operations (chunk migration, mapReduce/agg maybe?), as well as adding a cost to re-establish all the pooled connections, but would be definitively safer, and wouldn&apos;t require us to add some random meaningless field to heartbeats that we&apos;d need to figure out what to do with in 3.8.&lt;/p&gt;

&lt;p&gt;I think tagging the outgoing connections with wireVersion is probably the best way, and also the most future-proof, but I don&apos;t know how hard it would be to implement.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=mira.carey%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;mira.carey@mongodb.com&quot;&gt;mira.carey@mongodb.com&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="1709571" author="esha.maharishi@10gen.com" created="Wed, 25 Oct 2017 22:00:05 +0000"  >&lt;p&gt;For inter-shard, I don&apos;t see a lot of risk beyond existing bugs in 3.6 (e.g., drop/recreate + migrations bugs), since the only &lt;b&gt;persisted&lt;/b&gt; state transferred across shards is indexes, collection options, and UUIDs on migrations. For this, if the recipient shard is v3.4, it will at least correctly propagate the UUID if/when it is upgraded. If the donor shard is v3.4, an fcv&amp;gt;3.4 recipient shard will fail the migration if it&apos;s receiving its first chunk for the collection and the donor doesn&apos;t return a UUID.&lt;/p&gt;

&lt;p&gt;I agree that adding a feature in the networking layer to tag connections with the client&apos;s and server&apos;s binary version and FCV is an interesting idea &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.mongodb.org/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                            <comment id="1709498" author="tess.avitabile" created="Wed, 25 Oct 2017 21:13:03 +0000"  >&lt;p&gt;We do not have an easy way to tag &lt;em&gt;outgoing&lt;/em&gt; connections to be closed when the FCV is bumped, like we do for incoming connections. We can use the outgoing &lt;tt&gt;minWireVersion&lt;/tt&gt; to prevent &lt;em&gt;new&lt;/em&gt; connections to older-version nodes, but there is no good way to close &lt;em&gt;existing&lt;/em&gt; connections.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=spencer&quot; class=&quot;user-hover&quot; rel=&quot;spencer&quot;&gt;spencer&lt;/a&gt;: This means that we need another way for an FCV 3.6 primary will still incorrectly think that a 3.4 secondary is healthy. I think we had a backup plan of adding a field to the &lt;tt&gt;replSetHeartbeat&lt;/tt&gt; command that 3.4 nodes wouldn&apos;t recognize. What do you think about that plan?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=esha.maharishi&quot; class=&quot;user-hover&quot; rel=&quot;esha.maharishi&quot;&gt;esha.maharishi&lt;/a&gt;, &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=schwerin&quot; class=&quot;user-hover&quot; rel=&quot;schwerin&quot;&gt;schwerin&lt;/a&gt;: This means we do not have a way to stop inter-shard communications that are in progress when the FCV is bumped. I still think we should use the outgoing &lt;tt&gt;minWireVersion&lt;/tt&gt; to prevent new inter-shard connections, but I do not have an idea for handling existing connections. Do you have an idea for how to do this, or can you assess the risk? This seems less risky than the replica set case, since inter-shard connections are transient.&lt;/p&gt;</comment>
                            <comment id="1703290" author="tess.avitabile" created="Wed, 18 Oct 2017 22:05:46 +0000"  >&lt;p&gt;Yes, that sounds correct, &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=esha.maharishi&quot; class=&quot;user-hover&quot; rel=&quot;esha.maharishi&quot;&gt;esha.maharishi&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;No, I do not think we need to backport this work. We do not have the problem in mixed 3.4/3.2 replica set that the FCV 3.4 primary can think the 3.2 secondary is healthy. And I do not know of a danger in FCV 3.4 shards communicating with 3.2 shards.&lt;/p&gt;</comment>
                            <comment id="1703288" author="tess.avitabile" created="Wed, 18 Oct 2017 22:02:34 +0000"  >&lt;p&gt;A 3.6 mongod also needs to close connections to 3.4 mongods that it initiated when it goes into upgrading state.&lt;/p&gt;</comment>
                            <comment id="1703287" author="esha.maharishi@10gen.com" created="Wed, 18 Oct 2017 22:01:37 +0000"  >&lt;p&gt;Cool!&lt;/p&gt;

&lt;p&gt;So as part of this, we should do the following for 3.6?&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;b&gt;initialize&lt;/b&gt; the minimum outgoing version &lt;tt&gt;LATEST_WIRE_VERSION - 1&lt;/tt&gt;, which on v3.6 nodes is &lt;a href=&quot;https://github.com/mongodb/mongo/blob/r3.6.0-rc0/src/mongo/db/wire_version.h#L68&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;the 3.4-equivalent&lt;/a&gt; (COMMANDS_ACCEPT_WRITE_CONCERN)&lt;/li&gt;
	&lt;li&gt;on seeing the FCV document enter the &lt;b&gt;upgrading&lt;/b&gt; or &lt;b&gt;fully upgraded&lt;/b&gt; state, set the minimum outgoing version to &lt;tt&gt;LATEST_WIRE_VERSION&lt;/tt&gt;, which on v3.6 nodes is &lt;a href=&quot;https://github.com/mongodb/mongo/blob/r3.6.0-rc0/src/mongo/db/wire_version.h#L75&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;the 3.6-equivalent&lt;/a&gt; (SUPPORTS_OP_MSG)&lt;/li&gt;
	&lt;li&gt;on seeing the FCV document enter the &lt;b&gt;fully downgraded&lt;/b&gt; state, reset the minimum outgoing version to &lt;tt&gt;LATEST_WIRE_VERSION - 1&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Also, should we backport this behavior to 3.4? Unlike for v3.6, in v3.4, we will only be able to bump and reset the minimum wire version on upgrade end, rather than on upgrade start.&lt;/p&gt;</comment>
                            <comment id="1703282" author="tess.avitabile" created="Wed, 18 Oct 2017 21:57:40 +0000"  >&lt;p&gt;In fact, this should probably be done also when the mongod has a &lt;tt&gt;targetVersion&lt;/tt&gt; as well, to prevent connections with 3.4 nodes during upgrade or downgrade.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="413899">SERVER-30561</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18555" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname># of Sprints</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1.0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                            <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_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 18 Oct 2017 22:01:37 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        6 years, 13 weeks, 6 days ago
    
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18254" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Dependencies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[]]></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_14262" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>End date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 18 Oct 2017 00:00:00 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10057" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comment by Customer</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10056" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last commenter</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>luke.bonanomi@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            6 years, 13 weeks, 6 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>esha.maharishi@mongodb.com</customfieldvalue>
            <customfieldvalue>xgen-internal-githook</customfieldvalue>
            <customfieldvalue>spencer@mongodb.com</customfieldvalue>
            <customfieldvalue>tess.avitabile@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hti7uf:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hta2br:</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_23361" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Requested By</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_10557" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1952">Query 2017-11-13</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_14261" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>Start date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 18 Oct 2017 00:00:00 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10053" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time In Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_22870" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Triagers</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_14350" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>serverRank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hthty7:</customfieldvalue>

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