<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 04:24:44 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-30705] Concurrent updates and FCV change can cause dbhash mismatch between primary and secondary</title>
                <link>https://jira.mongodb.org/browse/SERVER-30705</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;3.5.x versions of the server have two implementations of the update subsystem: the &quot;old&quot; (3.4 and earlier) system, and the new system in &lt;a href=&quot;https://github.com/mongodb/mongo/tree/master/src/mongo/db/update&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;src/mongo/db/update&lt;/a&gt; which is both more performant and supports more expressive array updates. The old and new systems have different behavior with respect to field ordering. In order to ensure that the field ordering is consistent across all nodes in the replica set, the primary and secondaries must use the same version of the update subsystem. The is achieved via the &lt;a href=&quot;https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;feature compatibility version&lt;/a&gt; mechanism. Users must set the feature compatibility version (FCV) to &quot;3.6&quot; in order to enable the new update system.&lt;/p&gt;

&lt;p&gt;The FCV check, however, does not guarantee that a given update uses the same version of the update code on every node. Consider the following sequence of events:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;A two node replica set is started. Both nodes are version 3.6 but have FCV &quot;3.4&quot;.&lt;/li&gt;
	&lt;li&gt;The client concurrently issues an update and setFeatureCompatibilityVersion(&quot;3.6&quot;). These operations take compatible locks, and therefore execute concurrently on the server.&lt;/li&gt;
	&lt;li&gt;The setFCV command writes its update to &lt;tt&gt;admin.system.version&lt;/tt&gt; to the oplog at optime &lt;em&gt;t&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;After this oplog entry is written but before the in-memory FCV state changes, the update is logged with some optime greater than &lt;em&gt;t&lt;/em&gt;. This uses the &lt;em&gt;old&lt;/em&gt; update system, since the FCV in-memory state has not yet been changed.&lt;/li&gt;
	&lt;li&gt;The two oplog entries are applied on the secondary. Since the &lt;tt&gt;admin.system.version&lt;/tt&gt; write has an earlier optime (and must be applied in its own batch), the update uses the &lt;em&gt;new&lt;/em&gt; update system.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;I was able to reproduce a dbhash mismatch against a two-node 3.5.x replica set by running two scripts concurrently from two shells connected to the primary node. The first script repeatedly issues an update with two &lt;tt&gt;$set&lt;/tt&gt;&apos;s, that will result in different field ordering depending on which version of the update implementation is used:&lt;/p&gt;

&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;(function() {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    &quot;use strict&quot;;&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    db.c.drop();&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    for (var i = 0; i &amp;lt; 1000; i++) {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;        assert.writeOK(db.c.insert({_id: i}));&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;        assert.writeOK(db.c.update({_id: i}, {$set: {b: 1, a: 1}}));&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    }&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;}());&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;

&lt;p&gt;The second script repeatedly sets the FCV from &quot;3.4&quot; to &quot;3.6&quot; and back again:&lt;/p&gt;

&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;(function() {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    &quot;use strict&quot;;&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    while (true) {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;        assert.commandWorked(db.adminCommand({setFeatureCompatibilityVersion: &quot;3.4&quot;}))&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;        assert.commandWorked(db.adminCommand({setFeatureCompatibilityVersion: &quot;3.6&quot;}))&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    }&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;}());&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;

&lt;p&gt;After the first script completes, running the &lt;tt&gt;dbHash&lt;/tt&gt; command against the &lt;tt&gt;test&lt;/tt&gt; database on each node should show different hashes for &lt;tt&gt;test.c&lt;/tt&gt;.&lt;/p&gt;</description>
                <environment></environment>
        <key id="417303">SERVER-30705</key>
            <summary>Concurrent updates and FCV change can cause dbhash mismatch between primary and secondary</summary>
                <type id="1" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14703&amp;avatarType=issuetype">Bug</type>
                                            <priority id="2" iconUrl="https://jira.mongodb.org/images/icons/priorities/critical.svg">Critical - P2</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="justin.seyster@mongodb.com">Justin Seyster</assignee>
                                    <reporter username="david.storch@mongodb.com">David Storch</reporter>
                        <labels>
                    </labels>
                <created>Wed, 16 Aug 2017 22:29:41 +0000</created>
                <updated>Mon, 30 Oct 2023 23:14:14 +0000</updated>
                            <resolved>Thu, 14 Sep 2017 16:37:45 +0000</resolved>
                                                    <fixVersion>3.6.0-rc0</fixVersion>
                                    <component>Querying</component>
                    <component>Write Ops</component>
                                        <votes>0</votes>
                                    <watches>8</watches>
                                                                                                                <comments>
                            <comment id="1673035" author="ramon.fernandez" created="Thu, 14 Sep 2017 17:11:37 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;username&apos;: u&apos;jseyster&apos;, &apos;name&apos;: u&apos;Justin Seyster&apos;, &apos;email&apos;: u&apos;justin.seyster@mongodb.com&apos;}
&lt;p&gt;Message:&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-30705&quot; title=&quot;Concurrent updates and FCV change can cause dbhash mismatch between primary and secondary&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-30705&quot;&gt;&lt;del&gt;SERVER-30705&lt;/del&gt;&lt;/a&gt; Add $v field for update semantics in oplog updates.&lt;/p&gt;

&lt;p&gt;With the new UpdateNodes class hierarchy, there are two code paths for&lt;br/&gt;
applying an update to a document that have slightly different&lt;br/&gt;
semantics. The order of fields in the resulting document can vary&lt;br/&gt;
depending on which code path is used to apply an update. A difference&lt;br/&gt;
in ordering between documents in a replica set is considered a&lt;br/&gt;
&quot;mismatch,&quot; so we need to ensure that secondaries always apply updates&lt;br/&gt;
using the same update system that the primary uses.&lt;/p&gt;

&lt;p&gt;When an update executes as part of the application of an oplog entry,&lt;br/&gt;
the update is now allowed to have a $v field, which allows it to&lt;br/&gt;
specify which semantics were used by the operation that we are&lt;br/&gt;
replicating by applying the entry.  When the primary uses the new&lt;br/&gt;
semantics (because it is a 3.6 mongod with featureCompatibilityVersion&lt;br/&gt;
set to 3.6), it includes {$v: 1} in the oplog&apos;s update document to&lt;br/&gt;
indicate that the secondary should apply with the newer &apos;UpdateNode&apos;&lt;br/&gt;
semantics.&lt;/p&gt;

&lt;p&gt;There are two other places where we need this behavior:&lt;br/&gt;
  1) In role_graph_update.cpp, where the handleOplogUpdate observer&lt;br/&gt;
  needs to update its in-memory BSON representation of a role to&lt;br/&gt;
  reflect an update in the admin database and&lt;br/&gt;
  2) in the applyOps command, which is used for testing how oplog&lt;br/&gt;
  entries get applied.&lt;/p&gt;

&lt;p&gt;Both these code paths set the fromOplogApplication flag, which&lt;br/&gt;
replaces the old fromReplication flag, and they also gain behavior&lt;br/&gt;
that used to be exclusive to oplog applications from&lt;br/&gt;
replication. (Specifically, they skip update validation checks, which&lt;br/&gt;
should have already passed before the oplog entry was created.)&lt;br/&gt;
Branch:master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/390e5f47f00dcf133f361e3f9027e4da7d08d628&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/390e5f47f00dcf133f361e3f9027e4da7d08d628&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="1651336" author="tess.avitabile" created="Fri, 18 Aug 2017 13:41:05 +0000"  >&lt;p&gt;I think it is unlikely we will do &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-5030&quot; title=&quot;Document equality should be independent of field insertion order&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-5030&quot;&gt;SERVER-5030&lt;/a&gt; and make the query language order-independent for 3.6 (though it is something to consider for future work on query language semantics), so I would be in favor of fixing this and &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-30470&quot; title=&quot;Update subsystem doesn&amp;#39;t preserve field-ordering on re-application of oplog entries&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-30470&quot;&gt;&lt;del&gt;SERVER-30470&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                            <comment id="1650990" author="spencer" created="Thu, 17 Aug 2017 22:02:11 +0000"  >&lt;p&gt;This brings up the bigger question about whether we consider field ordering a meaningful property of a document that we want to ensure stays consistent across replica set members.  This came up recently in &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-30470&quot; title=&quot;Update subsystem doesn&amp;#39;t preserve field-ordering on re-application of oplog entries&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-30470&quot;&gt;&lt;del&gt;SERVER-30470&lt;/del&gt;&lt;/a&gt; and is related to &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-5030&quot; title=&quot;Document equality should be independent of field insertion order&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-5030&quot;&gt;SERVER-5030&lt;/a&gt;, which is currently unscheduled.  If we decide that MongoDB provides no guarantees about field orderings (and thus decide to implement &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-5030&quot; title=&quot;Document equality should be independent of field insertion order&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-5030&quot;&gt;SERVER-5030&lt;/a&gt;), then this and &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-30470&quot; title=&quot;Update subsystem doesn&amp;#39;t preserve field-ordering on re-application of oplog entries&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-30470&quot;&gt;&lt;del&gt;SERVER-30470&lt;/del&gt;&lt;/a&gt; become irrelevant.  If not, then we probably need to fix both.&lt;/p&gt;</comment>
                            <comment id="1650572" author="david.storch" created="Thu, 17 Aug 2017 15:29:16 +0000"  >&lt;p&gt;Per our in-person discussion today, we plan to pursue &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=tess.avitabile&quot; class=&quot;user-hover&quot; rel=&quot;tess.avitabile&quot;&gt;tess.avitabile&lt;/a&gt;&apos;s idea for how to fix this, since it is much simpler to implement. &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;, we can definitely just throw the old version out once we branch for 3.8.&lt;/p&gt;</comment>
                            <comment id="1650088" author="schwerin" created="Wed, 16 Aug 2017 23:41:05 +0000"  >&lt;p&gt;If we do as &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=tess.avitabile&quot; class=&quot;user-hover&quot; rel=&quot;tess.avitabile&quot;&gt;tess.avitabile&lt;/a&gt; proposes first, and we have a performance problem, we can address it in a point release. If there is no problem, we can decide what to do in 3.8 separately. Perhaps the new update system will need an order-preserving mode, or perhaps we can just throw the old version out in 3.8.&lt;/p&gt;</comment>
                            <comment id="1650073" author="tess.avitabile" created="Wed, 16 Aug 2017 23:14:50 +0000"  >&lt;p&gt;An alternative is that secondaries always use the old system, which creates new fields in the order specified by the primary. The advantage is that this requires no changes to the oplog format, and the disadvantage is that secondaries do not get any perf improvement for updates. I&apos;m not sure which solution is better.&lt;/p&gt;

&lt;p&gt;I don&apos;t have much worked scheduled for next sprint--I think I&apos;ll be working on expressive lookup.&lt;/p&gt;</comment>
                            <comment id="1650052" author="david.storch" created="Wed, 16 Aug 2017 22:33:05 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=tess.avitabile&quot; class=&quot;user-hover&quot; rel=&quot;tess.avitabile&quot;&gt;tess.avitabile&lt;/a&gt;, after discussing with Andy, I think the problem here is that secondaries should never rely on FCV checks. Instead, the primary should explicitly log which update system it used in the oplog. The secondary should interpret this information and select the appropriate code path. This is akin to how we require primaries to explicitly include the index version in &lt;tt&gt;createIndex&lt;/tt&gt; oplog entries.&lt;/p&gt;

&lt;p&gt;I think this needs to be addressed in 3.5. Do you or &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=justin.seyster&quot; class=&quot;user-hover&quot; rel=&quot;justin.seyster&quot;&gt;justin.seyster&lt;/a&gt; have time to take it this or next sprint?&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="31149">SERVER-5030</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>7.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18555" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname># of Sprints</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>3.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, 16 Aug 2017 23:14:50 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        6 years, 21 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_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, 21 weeks, 6 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_10032" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Operating System</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10026"><![CDATA[ALL]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>schwerin@mongodb.com</customfieldvalue>
            <customfieldvalue>david.storch@mongodb.com</customfieldvalue>
            <customfieldvalue>justin.seyster@mongodb.com</customfieldvalue>
            <customfieldvalue>ramon.fernandez@mongodb.com</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|htd4tj:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hra1nj:</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="1823">Query 2017-08-21</customfieldvalue>
    <customfieldvalue id="1828">Query 2017-09-11</customfieldvalue>
    <customfieldvalue id="1896">Query 2017-10-02</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|htcqwf:</customfieldvalue>

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