<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 04:54: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-40350] Create a ReplOperation/Durable class delineation to indicate fields not persisted to disk</title>
                <link>https://jira.mongodb.org/browse/SERVER-40350</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;h2&gt;&lt;a name=&quot;Background&quot;&gt;&lt;/a&gt;Background&lt;/h2&gt;
&lt;p&gt;When adding operations to an ongoing transaction, we add the operations in the form of a &lt;tt&gt;ReplOperation&lt;/tt&gt; struct. These &lt;tt&gt;ReplOperation&lt;/tt&gt; s &lt;a href=&quot;https://github.com/mongodb/mongo/blob/7eeda289a244e60154b9e969398bf5140ade1b78/src/mongo/db/repl/oplog_entry.idl#L50-L81&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;mirror the structure for future oplog entries&lt;/a&gt;. As a result, just like in an oplog entry, the &lt;tt&gt;o2&lt;/tt&gt; field in a &lt;tt&gt;ReplOperation&lt;/tt&gt; will possess the document&apos;s document key (_id + shard key). &lt;/p&gt;

&lt;p&gt;This document key is populated by extracting the correct fields from the update&apos;s postImage document. The document key that we retrieve is currently the same as the preImage document key &amp;#8211; since you can&apos;t change the &lt;tt&gt;_id&lt;/tt&gt; or the shard key, they are required to be the same. However, after this epic is complete, it will be possible for the pre- and post-Image document keys to be different. &lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;ProblemStatement&quot;&gt;&lt;/a&gt;Problem Statement&lt;/h2&gt;
&lt;p&gt;Currently, when we commit a transaction while a migration is running, the migration will observe &lt;tt&gt;ReplOperation&lt;/tt&gt; s to be applied from the transaction. As shown in &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39940&quot; title=&quot;Model a shard key update as a delete inside the chunk migration cloner if the document moves out of a currently-migrating chunk&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39940&quot;&gt;&lt;del&gt;SERVER-39940&lt;/del&gt;&lt;/a&gt;, we will need both the pre- and post-Image document keys to verify if an update has happened. Since we don&apos;t currently have a notion of a &lt;tt&gt;preImageDocumentKey&lt;/tt&gt; in a &lt;tt&gt;ReplOperation&lt;/tt&gt;, we will need to add it. We have the constraint of not wanting to change the actual oplog entries, &lt;em&gt;only&lt;/em&gt; the in-memory &lt;tt&gt;ReplOperation&lt;/tt&gt; structs. If we add additional information that only persists in-memory, we avoid any upgrade/downgrade issues.&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;ProposedSolution&quot;&gt;&lt;/a&gt;Proposed Solution&lt;/h2&gt;

&lt;ol&gt;
	&lt;li&gt;Create a new field &lt;tt&gt;preImageDocumentKey&lt;/tt&gt; in &lt;tt&gt;ReplOperation&lt;/tt&gt;.&lt;/li&gt;
	&lt;li&gt;Specify a custom serializer for &lt;tt&gt;preImageDocumentKey&lt;/tt&gt; that will be a no-op.&lt;/li&gt;
	&lt;li&gt;Specify a custom deserializer for &lt;tt&gt;preImageDocumentKey&lt;/tt&gt; that will invariant that &lt;tt&gt;preImageDocumentKey&lt;/tt&gt; was never set.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;This change will allow us to consume the &lt;tt&gt;preImageDocumentKey&lt;/tt&gt; in-memory for migrations, without ever changing the on-disk state of the oplog.&lt;/p&gt;</description>
                <environment></environment>
        <key id="723544">SERVER-40350</key>
            <summary>Create a ReplOperation/Durable class delineation to indicate fields not persisted to disk</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="blake.oler@mongodb.com">Blake Oler</assignee>
                                    <reporter username="blake.oler@mongodb.com">Blake Oler</reporter>
                        <labels>
                    </labels>
                <created>Tue, 26 Mar 2019 20:30:32 +0000</created>
                <updated>Sun, 29 Oct 2023 22:22:35 +0000</updated>
                            <resolved>Fri, 5 Apr 2019 13:59:11 +0000</resolved>
                                                    <fixVersion>4.1.10</fixVersion>
                                    <component>Sharding</component>
                                        <votes>0</votes>
                                    <watches>6</watches>
                                                                                                                <comments>
                            <comment id="2203243" author="xgen-internal-githook" created="Fri, 5 Apr 2019 13:58:51 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Blake Oler&apos;, &apos;username&apos;: &apos;BlakeIsBlake&apos;, &apos;email&apos;: &apos;blake.oler@mongodb.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-40350&quot; title=&quot;Create a ReplOperation/Durable class delineation to indicate fields not persisted to disk&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-40350&quot;&gt;&lt;del&gt;SERVER-40350&lt;/del&gt;&lt;/a&gt; Create a ReplOperation/Durable class delineation to indicate fields not persisted to disk&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/7a6a21915dcde1f232e7bbde5aa3738be69befd4&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/7a6a21915dcde1f232e7bbde5aa3738be69befd4&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="2195532" author="siyuan.zhou@10gen.com" created="Fri, 29 Mar 2019 06:58:58 +0000"  >&lt;p&gt;ReplOperation is designed to be part of OplogEntry, either by its own or as an operation in an applyOps command. It&apos;s meant to represent the data written to disk. I&apos;m wondering if it&apos;s possible to avoid adding the new field that only represent an in-memory state to the class.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                                                <inwardlinks description="is depended on by">
                                        <issuelink>
            <issuekey id="708830">SERVER-39940</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>2.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>Fri, 29 Mar 2019 06:58:58 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        4 years, 44 weeks, 5 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_10857" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>PM-1163</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>
                            4 years, 44 weeks, 5 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>blake.oler@mongodb.com</customfieldvalue>
            <customfieldvalue>xgen-internal-githook</customfieldvalue>
            <customfieldvalue>siyuan.zhou@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|huryin:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|huhjbr:</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="2863">Sharding 2019-04-08</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|hurkrz:</customfieldvalue>

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