<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 05:23:06 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-50608] Split up PlanExecutor interface</title>
                <link>https://jira.mongodb.org/browse/SERVER-50608</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;The &lt;a href=&quot;https://github.com/mongodb/mongo/blob/6cae36cca963dbe148a33fe524250ebb9c8e8d62/src/mongo/db/query/plan_executor.h&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;tt&gt;PlanExecutor&lt;/tt&gt; interface&lt;/a&gt; is currently the mechanism by which all CRUD operations except for insert are executed. (The fact that &lt;tt&gt;PlanExecutor&lt;/tt&gt; is not used for inserts is surprising, and should probably be corrected either as part of this ticket or as its own work item.) This interface, however, is biased towards execution that produces a stream of documents. It features methods like &lt;a href=&quot;https://github.com/mongodb/mongo/blob/6cae36cca963dbe148a33fe524250ebb9c8e8d62/src/mongo/db/query/plan_executor.h#L229&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;tt&gt;getNext()&lt;/tt&gt;&lt;/a&gt; which are used to get either the next document in the stream or EOF. This is useful for commands like &lt;tt&gt;find&lt;/tt&gt; and &lt;tt&gt;aggregate&lt;/tt&gt;, as well as for internal callers that scan indexes or collections. However, it is not a useful interface for non-cursor CRUD operations, such as update, delete, count, distinct, and so on.&lt;/p&gt;

&lt;p&gt;We should split up the &lt;tt&gt;PlanExecutor&lt;/tt&gt; interface into multiple interfaces that better match the needs of callers. One idea would be to structure a hierarchy of interfaces like so:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;PlanExecutor
	&lt;ul&gt;
		&lt;li&gt;PlanExecutorCursor
		&lt;ul&gt;
			&lt;li&gt;PlanExecutorImpl&lt;/li&gt;
			&lt;li&gt;PlanExecutorSBE&lt;/li&gt;
			&lt;li&gt;PlanExecutorPipeline&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;PlanExecutorCount&lt;/li&gt;
		&lt;li&gt;PlanExecutorDelete&lt;/li&gt;
		&lt;li&gt;PlanExecutorUpdate&lt;/li&gt;
		&lt;li&gt;...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Here, the &lt;tt&gt;getNext()&lt;/tt&gt; method and other cursor-related methods would be moved down into the &lt;tt&gt;PlanExecutorCursor&lt;/tt&gt; interface. Most of the pre-existing &lt;tt&gt;PlanExecutor&lt;/tt&gt; implementations would now instead implement &lt;tt&gt;PlanExecutorCursor&lt;/tt&gt;, including &lt;tt&gt;PlanExecutorImpl&lt;/tt&gt; for classic PlanStage execution, &lt;tt&gt;PlanExecutorPipeline&lt;/tt&gt; for DocumentSource execution, and &lt;tt&gt;PlanExecutorSBE&lt;/tt&gt;. There would then be separate interfaces with new implementations for all the non-cursor commands. One challenge with this approach is having some kind of code sharing arrangement between implementations of the various new CRUD interfaces, as a lot of the logic around things like yielding and explain is common for all CRUD commands.&lt;/p&gt;

&lt;p&gt;Another idea of how to restructure the interface comes from &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=anton.korshunov&quot; class=&quot;user-hover&quot; rel=&quot;anton.korshunov&quot;&gt;anton.korshunov&lt;/a&gt;. He suggests splitting the interface into two, one called &lt;tt&gt;PlanExecutor&lt;/tt&gt; for reads and another called &lt;tt&gt;ModificationPlanExecutor&lt;/tt&gt; for writes. The &lt;tt&gt;PlanExecutor&lt;/tt&gt; would offer methods for executing find, aggregation, count, and so on, whereas the &lt;tt&gt;ModificationPlanExecutor&lt;/tt&gt; would offer methods for executing deletes, updates, and inserts.&lt;/p&gt;</description>
                <environment></environment>
        <key id="1455850">SERVER-50608</key>
            <summary>Split up PlanExecutor interface</summary>
                <type id="4" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14710&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="12300">Won&apos;t Do</resolution>
                                        <assignee username="backlog-query-execution">Backlog - Query Execution</assignee>
                                    <reporter username="david.storch@mongodb.com">David Storch</reporter>
                        <labels>
                            <label>qexec-team</label>
                    </labels>
                <created>Fri, 28 Aug 2020 16:23:18 +0000</created>
                <updated>Tue, 6 Dec 2022 02:10:37 +0000</updated>
                            <resolved>Tue, 22 Mar 2022 18:09:34 +0000</resolved>
                                                                    <component>Querying</component>
                                        <votes>0</votes>
                                    <watches>0</watches>
                                                                                                                <comments>
                            <comment id="4427578" author="kyle.suarez" created="Tue, 22 Mar 2022 18:09:35 +0000"  >&lt;p&gt;Per a discussion in the QE triage meeting, we&apos;re going to close this as Won&apos;t Do. CC &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=anton.korshunov&quot; class=&quot;user-hover&quot; rel=&quot;anton.korshunov&quot;&gt;anton.korshunov&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_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_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 28 Aug 2020 21:30:15 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        1 year, 46 weeks, 1 day 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>alexander.golin@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            1 year, 46 weeks, 1 day ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>backlog-query-execution</customfieldvalue>
            <customfieldvalue>david.storch@mongodb.com</customfieldvalue>
            <customfieldvalue>kyle.suarez@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hy2q7r:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hr27xr:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_23361" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Requested By</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10053" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time In Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_22870" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Triagers</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_14350" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>serverRank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hy2ch3:</customfieldvalue>

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