<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 04:20:13 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-29215] Coordinate oplog truncate point with checkpoint timestamp</title>
                <link>https://jira.mongodb.org/browse/SERVER-29215</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;Once MongoDB switches to journaling only the oplog, it will be necessary to ensure that the oplog is not truncated to a point in time that is after the last completed checkpoint.&lt;/p&gt;

&lt;p&gt;MongoDB should track the timestamp for the last completed checkpoint, and ensure that oplog truncate doesn&apos;t remove any content newer than that point in time.&lt;/p&gt;</description>
                <environment></environment>
        <key id="383661">SERVER-29215</key>
            <summary>Coordinate oplog truncate point with checkpoint timestamp</summary>
                <type id="4" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14710&amp;avatarType=issuetype">Improvement</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="3">Duplicate</resolution>
                                        <assignee username="backlog-server-execution">Backlog - Storage Execution Team</assignee>
                                    <reporter username="alexander.gorrod@mongodb.com">Alexander Gorrod</reporter>
                        <labels>
                    </labels>
                <created>Mon, 15 May 2017 18:54:56 +0000</created>
                <updated>Tue, 6 Dec 2022 04:01:05 +0000</updated>
                            <resolved>Tue, 1 Aug 2017 18:51:44 +0000</resolved>
                                                                    <component>Storage</component>
                                        <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="1637861" author="daniel.gottlieb@10gen.com" created="Tue, 1 Aug 2017 18:51:44 +0000"  >&lt;p&gt;The cases this ticket is addressing are being tracked in &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-30460&quot; title=&quot;Grow the oplog when the replication commit point falls behind the back of where it would normally be truncated to&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-30460&quot;&gt;&lt;del&gt;SERVER-30460&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                            <comment id="1637778" author="spencer" created="Tue, 1 Aug 2017 17:58:29 +0000"  >&lt;p&gt;In the case of a single node falling off the back of its own oplog, there is actually still a way for that node to recover - it could completely clear its oplog then restart replication starting at the checkpointTimestamp.  The tricky part is that doing that automatically would probably not be acceptable as doing so can cause that node to temporarily lose writes it had previously acknowledged (though that is a problem if the node needs to resync as well).&lt;/p&gt;</comment>
                            <comment id="1637770" author="spencer" created="Tue, 1 Aug 2017 17:55:08 +0000"  >&lt;p&gt;This ticket is specifically about the issue where the checkpointTimestamp on a given node is behind the oldest oplog entry on that same node.  In that case, if that node needs to go into replication recovery, either due to being restarted or from going into ROLLBACK, then the node will be unable to recover as it won&apos;t have the oplog entries it needs to roll forward.  In that case the node will be stuck and need to be resynced.&lt;/p&gt;

&lt;p&gt;For the checkpointTimestamp on a node to fall behind the back of its own oplog, that means the replication majority commit point must also be behind the back of that same oplog.  The case of a majority of nodes falling off the back of the primary&apos;s oplog is already a problem today that can result in large volumes of data being rolled back, or the majority of the set needing to be resynced, resulting in loss of write availability.  I don&apos;t believe the issue of the primary falling off the back of its own oplog is significantly worse or meaningfully exacerbates the issue - if that node crashed it would wind up trying to rollback all the data since the checkpointTimestamp anyway, which as Dan points out is likely to be more data than the old rollback algorithm could wind up rolling back anyway.&lt;/p&gt;

&lt;p&gt;So I would agree with Dan that this ticket shouldn&apos;t be considered a required part of this epic, as &lt;b&gt;this project&lt;/b&gt; doesn&apos;t increase the problems meaningfully more than the problems that already exist with being in this situation.&lt;/p&gt;


&lt;p&gt;That said, I still think we should consider growing the oplog whenever the replication commit point falls behind the back of where it would otherwise be truncated to, but that should be considered as an independent improvement unrelated to the &quot;Recover to a timestamp&quot; project.  I filed &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-30460&quot; title=&quot;Grow the oplog when the replication commit point falls behind the back of where it would normally be truncated to&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-30460&quot;&gt;&lt;del&gt;SERVER-30460&lt;/del&gt;&lt;/a&gt; to track that work, though I ultimately think backpressure is probably the right fix for this class of issues.&lt;/p&gt;</comment>
                            <comment id="1631837" author="daniel.gottlieb@10gen.com" created="Wed, 26 Jul 2017 01:59:21 +0000"  >&lt;p&gt;This ticket is about extending the size of the oplog greater than its prescribed value. It&apos;s unclear how much leeway we really have from a behavior change standpoint. There&apos;s a risk that by not taking checkpoints as often in a lagged replica set as well as needing all the oplog from the stable timestamp to successfully recover, a replication rollback may introduce more cases of nodes falling off the oplog.&lt;/p&gt;

&lt;p&gt;I&apos;ll provide an argument that leaving oplog truncation behavior as-is, won&apos;t introduce many meaningful new cases of failing to have enough oplog.&lt;/p&gt;

&lt;p&gt;The most common replica set configuration is with 3 nodes. If the stable timestamp is beginning to lag far behind, then both secondaries are slow to replicate. Suppose there&apos;s an election that appoints one of these secondaries as the new primary. The former primary, when it can reconnect with its peers must now rollback. If the new recover to stable timestamp algorithm has truncated too much oplog off the old primary, I postulate the 3.4 rollback code would also find it cannot unwind the oplog far enough to recover either. Both cases ultimately requiring a resync.&lt;/p&gt;

&lt;p&gt;I don&apos;t think this scenario holds as well for 4+ node replica sets where the primary and 1+ other nodes (but still a minority) are mostly keeping up, but a majority are far behind. An election that appoints a relatively recent node as primary would be a small rollback in 3.4 for the former primary, but a large and perhaps impossible rollback(roll-forward) with the recover to stable timestamp algorithm if this oplog truncation change is not instituted.&lt;/p&gt;</comment>
                            <comment id="1571474" author="alexander.gorrod" created="Mon, 15 May 2017 19:02:47 +0000"  >&lt;p&gt;It&apos;s possible that this isn&apos;t necessary, but the idea of when it&apos;s safe to truncate the oplog deserves thought after the other work this ticket depends on has been implemented.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                            <outwardlinks description="depends on">
                                        <issuelink>
            <issuekey id="398977">SERVER-29891</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                            <outwardlinks description="duplicates">
                                        <issuelink>
            <issuekey id="411167">SERVER-30460</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>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_12751" key="com.atlassian.jira.plugin.system.customfieldtypes:multiselect">
                        <customfieldname>Assigned Teams</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="25136"><![CDATA[Storage Execution]]></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, 26 Jul 2017 01:59:21 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        6 years, 28 weeks, 1 day ago
    
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18254" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Dependencies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[<s><a href='https://jira.mongodb.org/browse/SERVER-29891'>SERVER-29891</a></s>]]></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>alexander.golin@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            6 years, 28 weeks, 1 day ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>alexander.gorrod@mongodb.com</customfieldvalue>
            <customfieldvalue>backlog-server-execution</customfieldvalue>
            <customfieldvalue>daniel.gottlieb@mongodb.com</customfieldvalue>
            <customfieldvalue>spencer@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|ht7g5j:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|ht3j9r:</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_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|ht41tj:</customfieldvalue>

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