<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 06:38:54 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-78650] Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite</title>
                <link>https://jira.mongodb.org/browse/SERVER-78650</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;When &lt;a href=&quot;https://github.com/mongodb/mongo/blob/02cbe1ff2da42eaed58b39d1083bd468b748bc90/src/mongo/db/pipeline/change_stream_rewrite_helpers.cpp#L1464-L1479&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;a &lt;tt&gt;$nor&lt;/tt&gt; is rewritten as part of the change stream oplog filter&lt;/a&gt; &lt;b&gt;and none of its children are eligible for a rewrite&lt;/b&gt;, an empty &lt;tt&gt;$nor&lt;/tt&gt; is left in the &lt;tt&gt;MatchExpression&lt;/tt&gt; tree. We do the same for &lt;tt&gt;$and&lt;/tt&gt;, but in that case &lt;a href=&quot;https://github.com/mongodb/mongo/blob/02cbe1ff2da42eaed58b39d1083bd468b748bc90/src/mongo/db/pipeline/document_source_change_stream_oplog_match.cpp#L111-L112&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;our subsequent call to &lt;tt&gt;MatchExpression::optimize&lt;/tt&gt;&lt;/a&gt; when the filter is complete &lt;a href=&quot;https://github.com/mongodb/mongo/blob/02cbe1ff2da42eaed58b39d1083bd468b748bc90/src/mongo/db/matcher/expression_tree.cpp#L209-L218&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;removes the empty &lt;tt&gt;$ands&lt;/tt&gt; (and any empty &lt;tt&gt;$ors&lt;/tt&gt;, though our rewrites do not produce these) from the tree&lt;/a&gt;. However, we don&apos;t perform any such optimization for empty &lt;tt&gt;$nor&lt;/tt&gt;. Therefore, when we subsequently run the rewritten filter through &lt;a href=&quot;https://github.com/mongodb/mongo/blob/02cbe1ff2da42eaed58b39d1083bd468b748bc90/src/mongo/db/matcher/expression_parser.cpp#L1285&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;tt&gt;parseTreeTopLevel&lt;/tt&gt;&lt;/a&gt;, we end up throwing when it sees the empty &lt;tt&gt;$nor&lt;/tt&gt; array.&lt;/p&gt;

&lt;p&gt;The symptoms are worsened by the fact that we &lt;a href=&quot;https://github.com/mongodb/mongo/blob/02cbe1ff2da42eaed58b39d1083bd468b748bc90/src/mongo/db/pipeline/change_stream_filter_helpers.cpp#L296-L305&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;also rewrite the user &lt;tt&gt;$match&lt;/tt&gt; into the &lt;tt&gt;buildTransactionFilter&lt;/tt&gt;&lt;/a&gt;, &lt;b&gt;but only a very limited set of fields&lt;/b&gt;. This means that even if the children of the &lt;tt&gt;$nor&lt;/tt&gt; are generally eligible for rewrites (e.g. &lt;tt&gt;operationType&lt;/tt&gt;), they may be excluded from this second rewrite, and thus will end up producing an empty &lt;tt&gt;$nor&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;The bug doesn&apos;t manifest if the &lt;tt&gt;$nor&lt;/tt&gt; only has a single child, because the initial optimization pass &lt;a href=&quot;https://github.com/mongodb/mongo/blob/02cbe1ff2da42eaed58b39d1083bd468b748bc90/src/mongo/db/matcher/expression_tree.cpp#L227-L233&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;will unwrap the &lt;tt&gt;$nor&lt;/tt&gt; into a &lt;tt&gt;$not&lt;/tt&gt; of the child predicate&lt;/a&gt;, and so we never attempt to rewrite the &lt;tt&gt;$nor&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;To fix this issue, we could perform a similar optimization-away of empty &lt;tt&gt;$nor&lt;/tt&gt; as is already done for &lt;tt&gt;$and&lt;/tt&gt; and &lt;tt&gt;$or&lt;/tt&gt;.&lt;/p&gt;</description>
                <environment></environment>
        <key id="2383006">SERVER-78650</key>
            <summary>Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite</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="milena.ivanova@mongodb.com">Milena Ivanova</assignee>
                                    <reporter username="bernard.gorman@mongodb.com">Bernard Gorman</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Jul 2023 23:32:10 +0000</created>
                <updated>Sun, 29 Oct 2023 21:19:16 +0000</updated>
                            <resolved>Tue, 15 Aug 2023 08:34:09 +0000</resolved>
                                    <version>6.0.0</version>
                    <version>7.0.0-rc0</version>
                                    <fixVersion>7.1.0-rc0</fixVersion>
                    <fixVersion>6.0.10</fixVersion>
                    <fixVersion>7.0.2</fixVersion>
                                                        <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="5658742" author="xgen-internal-githook" created="Fri, 25 Aug 2023 09:52:49 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;Peter Volk&apos;, &apos;email&apos;: &apos;peter.volk@mongodb.com&apos;, &apos;username&apos;: &apos;HCSPete&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-78650&quot; title=&quot;Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-78650&quot;&gt;&lt;del&gt;SERVER-78650&lt;/del&gt;&lt;/a&gt; Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite&lt;br/&gt;
Branch: v6.0&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/c632985995e35f7d3fc285901166b4c99a02c21b&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/c632985995e35f7d3fc285901166b4c99a02c21b&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5657360" author="xgen-internal-githook" created="Thu, 24 Aug 2023 18:32:03 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;Peter Volk&apos;, &apos;email&apos;: &apos;peter.volk@mongodb.com&apos;, &apos;username&apos;: &apos;HCSPete&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-78650&quot; title=&quot;Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-78650&quot;&gt;&lt;del&gt;SERVER-78650&lt;/del&gt;&lt;/a&gt; Change stream oplog rewrite of $nor hits empty-array validation&lt;/p&gt;

&lt;p&gt;if no children are eligible for rewrite&lt;br/&gt;
Branch: v7.0&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/19ef1b240adafb7fda568a2b6b140a668ffb3c51&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/19ef1b240adafb7fda568a2b6b140a668ffb3c51&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5606598" author="xgen-internal-githook" created="Wed, 2 Aug 2023 04:14:39 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;Milena Ivanova&apos;, &apos;email&apos;: &apos;milena.ivanova@mongodb.com&apos;, &apos;username&apos;: &apos;mivanova3&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-78650&quot; title=&quot;Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-78650&quot;&gt;&lt;del&gt;SERVER-78650&lt;/del&gt;&lt;/a&gt; Change stream oplog rewrite of $nor hits empty-array validation&lt;br/&gt;
if no children are eligible for rewrite&lt;/p&gt;

&lt;p&gt;Exclude test from multiversion lts suites&lt;br/&gt;
Branch: minh.luu-no_compile_sys-perf&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/1e00cf6a84c15444ed0df965fada1f3ca1526a9a&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/1e00cf6a84c15444ed0df965fada1f3ca1526a9a&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5606348" author="xgen-internal-githook" created="Tue, 1 Aug 2023 23:13:44 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;Milena Ivanova&apos;, &apos;email&apos;: &apos;milena.ivanova@mongodb.com&apos;, &apos;username&apos;: &apos;mivanova3&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-78650&quot; title=&quot;Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-78650&quot;&gt;&lt;del&gt;SERVER-78650&lt;/del&gt;&lt;/a&gt; Change stream oplog rewrite of $nor hits empty-array validation&lt;br/&gt;
if no children are eligible for rewrite&lt;/p&gt;

&lt;p&gt;Exclude test from multiversion lts suites&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/1e00cf6a84c15444ed0df965fada1f3ca1526a9a&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/1e00cf6a84c15444ed0df965fada1f3ca1526a9a&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5603752" author="xgen-internal-githook" created="Tue, 1 Aug 2023 01:37:37 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;Milena Ivanova&apos;, &apos;email&apos;: &apos;milena.ivanova@mongodb.com&apos;, &apos;username&apos;: &apos;mivanova3&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-78650&quot; title=&quot;Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-78650&quot;&gt;&lt;del&gt;SERVER-78650&lt;/del&gt;&lt;/a&gt; Change stream oplog rewrite of $nor hits empty-array validation&lt;br/&gt;
if no children are eligible for rewrite&lt;br/&gt;
Branch: minh.luu-no_compile_sys-perf&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/a70be4be932dec9024ae228c72b1d86330c6edb5&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/a70be4be932dec9024ae228c72b1d86330c6edb5&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5601715" author="xgen-internal-githook" created="Mon, 31 Jul 2023 13:19:43 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;Milena Ivanova&apos;, &apos;email&apos;: &apos;milena.ivanova@mongodb.com&apos;, &apos;username&apos;: &apos;mivanova3&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-78650&quot; title=&quot;Change stream oplog rewrite of $nor hits empty-array validation if no children are eligible for rewrite&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-78650&quot;&gt;&lt;del&gt;SERVER-78650&lt;/del&gt;&lt;/a&gt; Change stream oplog rewrite of $nor hits empty-array validation&lt;br/&gt;
if no children are eligible for rewrite&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/a70be4be932dec9024ae228c72b1d86330c6edb5&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/a70be4be932dec9024ae228c72b1d86330c6edb5&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10420">
                    <name>Backports</name>
                                            <outwardlinks description="backported by">
                                                        </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                                                <inwardlinks description="is depended on by">
                                                        </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10620">
                    <name>Issue split</name>
                                                                <inwardlinks description="split from">
                                                        </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_12751" key="com.atlassian.jira.plugin.system.customfieldtypes:multiselect">
                        <customfieldname>Assigned Teams</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="25125"><![CDATA[Query Execution]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12450" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Backport Requested</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="25578"><![CDATA[v7.0]]></customfieldvalue>
    <customfieldvalue key="23470"><![CDATA[v6.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>Tue, 25 Jul 2023 12:49:43 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        23 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_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-1951</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>
                            23 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>57.0</customfieldvalue>

                        </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>bernard.gorman@mongodb.com</customfieldvalue>
            <customfieldvalue>xgen-internal-githook</customfieldvalue>
            <customfieldvalue>milena.ivanova@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i2gehr:</customfieldvalue>

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

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