<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 04:49:23 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-38588] Hybrid index builds do not work when applied concurrently with prepared transactions on secondaries</title>
                <link>https://jira.mongodb.org/browse/SERVER-38588</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;Original text:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Test setup:&#160;&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Multi shard&#160;&lt;/li&gt;
	&lt;li&gt;collection is sharded with _id: hashed&#160;&lt;br/&gt;
 &#160;&lt;br/&gt;
 The evergreen validateCollection hook fails semi-frequently after running the background_index_multikey.js test. Based on initial investigation, it looks like one of the indexes in the secondary is missing a key entry. The primary appears to have passed the validation. Note: test is currently blacklisted.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because transactions yield their locks on secondaries (&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-37199&quot; title=&quot;Yield locks of transactions in secondary application&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-37199&quot;&gt;&lt;del&gt;SERVER-37199&lt;/del&gt;&lt;/a&gt;), a concurrent hybrid background index build can conflict in a way that leads to lost writes into building indexes (i.e. corruption) on secondaries.&lt;/p&gt;

&lt;p&gt;In this example, a background index build on {a: 1} is concurrent with an insert of a document {a: 0} in a transaction while applied on a secondary.&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;The background index build converts its X lock to an IX lock while collection scanning. It creates a temporary side-writes table to accept all index key insertions during the build.&lt;/li&gt;
	&lt;li&gt;A document {a: 0}is inserted in a transaction and prepared. The key for a: 0 is inserted into the side-writes table as part of the same transaction. When applied on a secondary, it drops its IX locks.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;The background index build takes an X lock, uncontested, and drains the side-writes table. Because the insert into the side-writes table was part of a prepared, but uncommitted transaction, it is invisible to the index builder. The table is then dropped on completion.&lt;/li&gt;
	&lt;li&gt;The transaction is finally committed, but its side-write is committed to a now-deleted table. The inserted key is now lost forever and the resulting index is corrupted.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;On a primary, our locks prevent this from happening, but because an index build can complete while a prepared transaction is active, we can lose writes into building indexes.&lt;/p&gt;

&lt;p&gt;edit:&#160;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=louis.williams&quot; class=&quot;user-hover&quot; rel=&quot;louis.williams&quot;&gt;louis.williams&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
        <key id="652186">SERVER-38588</key>
            <summary>Hybrid index builds do not work when applied concurrently with prepared transactions on secondaries</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="milkie@mongodb.com">Eric Milkie</assignee>
                                    <reporter username="randolph@mongodb.com">Randolph Tan</reporter>
                        <labels>
                            <label>open_todo_in_code</label>
                    </labels>
                <created>Wed, 12 Dec 2018 23:03:34 +0000</created>
                <updated>Sun, 29 Oct 2023 22:25:47 +0000</updated>
                            <resolved>Fri, 8 Mar 2019 17:22:52 +0000</resolved>
                                                    <fixVersion>4.1.9</fixVersion>
                                    <component>Index Maintenance</component>
                    <component>Storage</component>
                                        <votes>0</votes>
                                    <watches>7</watches>
                                                                                                                <comments>
                            <comment id="2175949" author="xgen-internal-githook" created="Fri, 8 Mar 2019 17:21:43 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Eric Milkie&apos;, &apos;email&apos;: &apos;milkie@10gen.com&apos;, &apos;username&apos;: &apos;milkie&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-38588&quot; title=&quot;Hybrid index builds do not work when applied concurrently with prepared transactions on secondaries&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-38588&quot;&gt;&lt;del&gt;SERVER-38588&lt;/del&gt;&lt;/a&gt; block application of prepare oplog entry on secondaries when a concurrent background index build is running&lt;/p&gt;

&lt;p&gt;This will prevent hybrid index builds from corrupting an index on secondary nodes if a prepared transaction becomes prepared during a build but commits after the index build commits.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/77742598f84ab1137514ae13824f7afa2c1e9804&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/77742598f84ab1137514ae13824f7afa2c1e9804&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="2166569" author="milkie" created="Thu, 28 Feb 2019 18:56:06 +0000"  >&lt;p&gt;Note that this work will in effect stall replication when a prepared transaction is encountered that conflicts with a background index build, until such build completes.&lt;/p&gt;</comment>
                            <comment id="2166565" author="milkie" created="Thu, 28 Feb 2019 18:55:18 +0000"  >&lt;p&gt;I removed this ticket from the Simultaneous Index Builds epic, as we came up with a different solution that will remove the dependency on that project&apos;s completion.&lt;/p&gt;

&lt;p&gt;The work for this ticket will be the following:&lt;br/&gt;
We should augment _applyPrepareTransactionOplogEntry() to do the following:&lt;br/&gt;
1. Extract all the unique namespace names from the ops in the applyOps command bson.&lt;br/&gt;
2. Call BackgroundOperation::inProgForNs() for each namespace in turn.  If any call returns true, call awaitNoBgOpInProgForNs() for that namespace.&lt;/p&gt;</comment>
                            <comment id="2105757" author="milkie" created="Fri, 4 Jan 2019 17:37:02 +0000"  >&lt;p&gt;Moved this ticket to the Simultaneous Index Builds epic, as that project will be the work to fix this problem completely.  The hybrid project has provided the interface for Simul. to call at the correct times.&lt;/p&gt;</comment>
                            <comment id="2090102" author="renctan" created="Thu, 13 Dec 2018 19:25:06 +0000"  >&lt;p&gt;Note: blacklisted background_index_multikey.js &lt;a href=&quot;https://github.com/mongodb/mongo/blob/ebde04df5e96d3d78263ae92e49b5f92e5c9e54c/buildscripts/resmokeconfig/suites/multi_shard_multi_stmt_txn_jscore_passthrough.yml#L181-L182&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;here&lt;/a&gt; and will also add it to new sharding suites as well. Will tag the comment with this ticket number when adding the new blacklists.&lt;/p&gt;</comment>
                            <comment id="2089114" author="renctan" created="Wed, 12 Dec 2018 23:05:37 +0000"  >&lt;p&gt;example failure:&lt;br/&gt;
&lt;a href=&quot;https://evergreen.mongodb.com/task/mongodb_mongo_master_ubuntu1604_debug_asan_multi_shard_multi_stmt_txn_jscore_passthrough_patch_cee9c4deed8bbf0c612b465be4625d5d0775d204_5c101aab2fbabe50f96caca3_18_12_11_20_15_03##%257B%2522compare%2522%253A%255B%257B%2522hash%2522%253A%2522cee9c4deed8bbf0c612b465be4625d5d0775d204%2522%257D%255D%257D&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://evergreen.mongodb.com/task/mongodb_mongo_master_ubuntu1604_debug_asan_multi_shard_multi_stmt_txn_jscore_passthrough_patch_cee9c4deed8bbf0c612b465be4625d5d0775d204_5c101aab2fbabe50f96caca3_18_12_11_20_15_03##%257B%2522compare%2522%253A%255B%257B%2522hash%2522%253A%2522cee9c4deed8bbf0c612b465be4625d5d0775d204%2522%257D%255D%257D&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=louis.williams&quot; class=&quot;user-hover&quot; rel=&quot;louis.williams&quot;&gt;louis.williams&lt;/a&gt; took a first look and suspects that there might be a race in replicating the background index build and replicating the documents.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                                                <inwardlinks description="is depended on by">
                                                        </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10320">
                    <name>Documented</name>
                                                                <inwardlinks description="is documented by">
                                        <issuelink>
            <issuekey id="714918">DOCS-12538</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10520">
                    <name>Problem/Incident</name>
                                            <outwardlinks description="causes">
                                                        </outwardlinks>
                                                                <inwardlinks description="is caused by">
                                        <issuelink>
            <issuekey id="606934">SERVER-37199</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="610532">SERVER-37336</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="683624">SERVER-39372</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="741394">SERVER-40723</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="649838">SERVER-38540</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="713609">SERVER-40041</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="940030">SERVER-43638</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="650144">SERVER-38550</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>6.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_13552" key="com.go2group.jira.plugin.crm:crm_generic_field">
                        <customfieldname>Case</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[[5006R00001lA377QAC]]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 13 Dec 2018 19:04:04 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        4 years, 48 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_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, 48 weeks, 5 days ago
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_16465" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Linked BF Score</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>22.0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>milkie@mongodb.com</customfieldvalue>
            <customfieldvalue>xgen-internal-githook</customfieldvalue>
            <customfieldvalue>randolph@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hufzdj:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hr7hwv:</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="2763">Storage NYC 2019-03-11</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|huflmv:</customfieldvalue>

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