<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 06:38:09 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-78365] Investigate removing ignore_prepare=force</title>
                <link>https://jira.mongodb.org/browse/SERVER-78365</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;This option significantly complicates reasoning about behaviors around prepared transactions, so removing it should be high on our list of behaviors to remove.&lt;/p&gt;</description>
                <environment></environment>
        <key id="2375175">SERVER-78365</key>
            <summary>Investigate removing ignore_prepare=force</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="1" iconUrl="https://jira.mongodb.org/images/icons/statuses/open.png" description="">Open</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="gregory.noma@mongodb.com">Gregory Noma</assignee>
                                    <reporter username="geert.bosch@mongodb.com">Geert Bosch</reporter>
                        <labels>
                    </labels>
                <created>Thu, 22 Jun 2023 21:20:20 +0000</created>
                <updated>Tue, 6 Feb 2024 16:42:32 +0000</updated>
                                                                                                <votes>0</votes>
                                    <watches>7</watches>
                                                                                                                <comments>
                            <comment id="5893069" author="louis.williams" created="Mon, 20 Nov 2023 18:13:33 +0000"  >&lt;p&gt;I don&apos;t see a path forward to eliminate this API as long as we want a safety mechanism from WiredTiger to prevent us from introducing data corruption bugs.&lt;/p&gt;</comment>
                            <comment id="5847155" author="louis.williams" created="Wed, 1 Nov 2023 18:47:47 +0000"  >&lt;p&gt;There&apos;s quite a bit to discuss here. But first I&apos;ll just provide background.&lt;/p&gt;

&lt;p&gt;Data corruption bugs like &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39074&quot; title=&quot;Update outside transaction erasing update from committed prepared transaction&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39074&quot;&gt;&lt;del&gt;SERVER-39074&lt;/del&gt;&lt;/a&gt; made us realize that it was very risky to perform writes while ignoring prepared updates, and almost never safe. The ability to ignore prepared updates was just an optimization for read-only operations. This prompted us to ban this behavior by default (&lt;a href=&quot;https://jira.mongodb.org/browse/WT-4580&quot; title=&quot;Abort transactions that perform updates with ignore_prepare=true &quot; class=&quot;issue-link&quot; data-issue-key=&quot;WT-4580&quot;&gt;&lt;del&gt;WT-4580&lt;/del&gt;&lt;/a&gt;) and then use the ignore_prepare=force override for cases where we made sure it was safe to read and write while ignoring prepare conflicts.&lt;/p&gt;

&lt;p&gt;As of today, we have a few users of this override:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/d525995aa9620d228817edeb3788e3ccec3eaa0c/src/mongo/db/repl/oplog_applier_impl.cpp#L400-L401&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Oplog application&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;When &lt;a href=&quot;https://github.com/mongodb/mongo/blob/d525995aa9620d228817edeb3788e3ccec3eaa0c/src/mongo/db/repl/transaction_oplog_application.cpp#L635-L636&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;applying prepared transactions&lt;/a&gt; this is surprisingly not redundant with the above override (see &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-58183&quot; title=&quot;_applyPrepareTransaction does not ensure prepareConflictBehavior is kIgnoreConflictAcceptWrites on retry attempts&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-58183&quot;&gt;&lt;del&gt;SERVER-58183&lt;/del&gt;&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/d525995aa9620d228817edeb3788e3ccec3eaa0c/src/mongo/db/catalog/collection_validation.cpp#L625-L626&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Foreground collection validation&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/d525995aa9620d228817edeb3788e3ccec3eaa0c/src/mongo/db/service_entry_point_mongod.cpp#L103&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Queries that may or may not spill to the storage engine&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/100811c3e5cc533c922e23ede0e5935eabc5da0c/src/mongo/db/index_builds_coordinator.cpp#L2096&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Index builds&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This override is required unconditionally on secondaries due to the problems described in &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-40176&quot; title=&quot;Cursor seekExact should not use WT_CURSOR:search_near to avoid unintentional prepare conflicts&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-40176&quot;&gt;&lt;del&gt;SERVER-40176&lt;/del&gt;&lt;/a&gt; and &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-40167&quot; title=&quot;Index key removal should not encounter prepare conflicts on unrelated keys&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-40167&quot;&gt;&lt;del&gt;SERVER-40167&lt;/del&gt;&lt;/a&gt;. That is, we can hit prepare conflicts on secondaries that would not have happened on the primary, just by bad luck. We can accidentally find a key in a WT table that is next to a prepared update.&lt;/p&gt;

&lt;p&gt;If we don&apos;t like the current API, it seems like we need to rethink the API a bit to deliver something that works better for our current code. We still want to respect these requirements:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;We want to be able to ignore prepared updates for most read operations while also having safeguards to avoid future data corruption bugs.&lt;/li&gt;
	&lt;li&gt;Unless we only have queries spill in a new RecoveryUnit, we&apos;ll need to be able to read and write within a WT transaction that is ignoring prepare conflicts. This may actually become a reality with &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-81331&quot; title=&quot;Spilling in SBE may lead to read on destroyed catalog object&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-81331&quot;&gt;&lt;del&gt;SERVER-81331&lt;/del&gt;&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;Unless we want to re-open &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-40176&quot; title=&quot;Cursor seekExact should not use WT_CURSOR:search_near to avoid unintentional prepare conflicts&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-40176&quot;&gt;&lt;del&gt;SERVER-40176&lt;/del&gt;&lt;/a&gt; and &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-40167&quot; title=&quot;Index key removal should not encounter prepare conflicts on unrelated keys&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-40167&quot;&gt;&lt;del&gt;SERVER-40167&lt;/del&gt;&lt;/a&gt; to address prepare conflicts on unrelated keys, we will also need to continue ignoring prepare conflicts and allowing writes on secondaries&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="2001848">SERVER-64515</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2101267">SERVER-68380</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>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_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 1 Nov 2023 18:47:47 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        11 weeks, 2 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>gregory.noma@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            11 weeks, 2 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>geert.bosch@mongodb.com</customfieldvalue>
            <customfieldvalue>gregory.noma@mongodb.com</customfieldvalue>
            <customfieldvalue>louis.williams@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i2f273:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|i2dd6j:v</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="7181">Execution NAMR Team 2023-07-24</customfieldvalue>
    <customfieldvalue id="7182">Execution NAMR Team 2023-08-07</customfieldvalue>
    <customfieldvalue id="7564">Execution Team 2023-11-13</customfieldvalue>
    <customfieldvalue id="7565">Execution Team 2023-11-27</customfieldvalue>
    <customfieldvalue id="8286">Execution Team 2024-03-18</customfieldvalue>

                        </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|i2eocf:</customfieldvalue>

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