<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 06:20:26 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-71955] CollectionImpl::initFromExisting causes invariants to fail when _metadata.indexes doesn&apos;t match the existing collection</title>
                <link>https://jira.mongodb.org/browse/SERVER-71955</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;The durable catalog entry for a collection contains a list of indexes. &lt;/p&gt;

&lt;p&gt;The in-memory collection catalog contains CollectionImpl objects for each collection, and the CollectionImpl object contains a &lt;a href=&quot;https://github.com/10gen/mongo/blob/fbf449dc13f6521415a530d64f67db1f81edb722/src/mongo/db/catalog/collection_impl.h#L512&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;BSONCollectionCatalogEntry::MetaData object&lt;/a&gt;, which contains &lt;a href=&quot;https://github.com/10gen/mongo/blob/fbf449dc13f6521415a530d64f67db1f81edb722/src/mongo/db/storage/bson_collection_catalog_entry.h#L155&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;a vector of IndexMetaData objects&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;The CollectionImpl also contains an IndexCatalog, which contains an IndexCatalogEntry for each index, which in turn contains &lt;a href=&quot;https://github.com/10gen/mongo/blob/fbf449dc13f6521415a530d64f67db1f81edb722/src/mongo/db/catalog/index_catalog_entry_impl.h#L249&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;the offset of this entry in the IndexMetaData object&lt;/a&gt;, which is used to check/set &lt;a href=&quot;https://github.com/10gen/mongo/blob/fbf449dc13f6521415a530d64f67db1f81edb722/src/mongo/db/catalog/index_catalog_entry_impl.cpp#L405-L418&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;multikey options&lt;/a&gt; for the collection.&lt;/p&gt;

&lt;p&gt;When an index is removed for a collection, it is not actually removed from the Collection&apos;s &lt;tt&gt;_metadata::indexes&lt;/tt&gt; - instead, &lt;tt&gt;_metadata::indexes&lt;/tt&gt; is set to an empty object at the offset for the index. When this happens, &lt;tt&gt;_metadata::indexes.size()&lt;/tt&gt; will no longer match the number of indexes in the durable catalog - that is, they get out of sync.&lt;/p&gt;

&lt;p&gt;In CollectionImpl::initFromExisting, this is a problem because we initialize _metadata from the durable catalog, but &lt;a href=&quot;https://github.com/10gen/mongo/blob/d4414717f29790b47b798c5149b6e1c03d9a0cf1/src/mongo/db/catalog/collection_impl.cpp#L449&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;initialize the index catalog from the in-memory index catalog&lt;/a&gt;, and so the IndexCatalogEntry objects in the index catalog may have incorrect offsets for the Collection on which initFromExisting was called. I.e. if there were originally indexes &lt;tt&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;a, b, c&amp;#93;&lt;/span&gt;&lt;/tt&gt; and &lt;tt&gt;b&lt;/tt&gt; was removed, the durable catalog will have indexes &lt;tt&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;a, c&amp;#93;&lt;/span&gt;&lt;/tt&gt;, and the in-memory version might be &lt;tt&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;a, {}, c&amp;#93;&lt;/span&gt;&lt;/tt&gt;. The in-memory offset for index &lt;tt&gt;c&lt;/tt&gt; will be &lt;tt&gt;2&lt;/tt&gt; - but in the Collection on which &lt;tt&gt;initFromExisting&lt;/tt&gt; was called, &lt;tt&gt;_metadata.indexes&lt;/tt&gt; will be &lt;tt&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;a, c&amp;#93;&lt;/span&gt;]&lt;/tt&gt;, so that offset will be out of bounds.&lt;/p&gt;

&lt;p&gt;We account for this in &lt;a href=&quot;https://github.com/10gen/mongo/blob/d4414717f29790b47b798c5149b6e1c03d9a0cf1/src/mongo/db/catalog/collection_impl.cpp#L1578-L1596&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;CollectionImpl::setIndexIsMultiKey&lt;/a&gt; by adjusting one to match the other. We may have to do something similar here.&lt;/p&gt;</description>
                <environment></environment>
        <key id="2205549">SERVER-71955</key>
            <summary>CollectionImpl::initFromExisting causes invariants to fail when _metadata.indexes doesn&apos;t match the existing collection</summary>
                <type id="1" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14703&amp;avatarType=issuetype">Bug</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="matthew.saltz@mongodb.com">Matthew Saltz</assignee>
                                    <reporter username="matthew.saltz@mongodb.com">Matthew Saltz</reporter>
                        <labels>
                    </labels>
                <created>Wed, 7 Dec 2022 22:31:03 +0000</created>
                <updated>Sun, 29 Oct 2023 21:29:31 +0000</updated>
                            <resolved>Wed, 14 Dec 2022 18:21:56 +0000</resolved>
                                                    <fixVersion>6.3.0-rc0</fixVersion>
                                                        <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="5055209" author="xgen-internal-githook" created="Wed, 14 Dec 2022 18:08:55 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Matthew Saltz&apos;, &apos;email&apos;: &apos;matthew.saltz@mongodb.com&apos;, &apos;username&apos;: &apos;saltzm&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-71955&quot; title=&quot;CollectionImpl::initFromExisting causes invariants to fail when _metadata.indexes doesn&amp;#39;t match the existing collection&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-71955&quot;&gt;&lt;del&gt;SERVER-71955&lt;/del&gt;&lt;/a&gt; Only re-use the shared_ptr&amp;lt;Ident&amp;gt; for index entries in CollectionImpl::initFromExisting&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/a4b793f1118e775dd442c33d1bf5d5acc4437ee9&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/a4b793f1118e775dd442c33d1bf5d5acc4437ee9&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1.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_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>Fri, 9 Dec 2022 23:47:29 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        1 year, 8 weeks 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_17050" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Downstream Team Attention</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="16941"><![CDATA[Not Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_10857" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>PM-2218</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>
                            1 year, 8 weeks 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>xgen-internal-githook</customfieldvalue>
            <customfieldvalue>matthew.saltz@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i1lwdb:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|i14gzs:</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_22250" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Special Downgrade Instructions Required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="23343"><![CDATA[Not Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10557" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="6672">Execution Team 2022-12-26</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|i1liin:</customfieldvalue>

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