<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 08:26:18 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>[DRIVERS-2735] Add testing for the streamable monitoring protocol without exhaust support</title>
                <link>https://jira.mongodb.org/browse/DRIVERS-2735</link>
                <project id="10980" key="DRIVERS">Drivers</project>
                    <description>&lt;div class=&quot;panel&quot; style=&quot;background-color: #fafbfc;border-width: 1px;&quot;&gt;&lt;div class=&quot;panelContent&quot; style=&quot;background-color: #fafbfc;&quot;&gt;
&lt;h3&gt;&lt;a name=&quot;Summary&quot;&gt;&lt;/a&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/h3&gt;

&lt;p&gt;The SDAM spec outlines the following criteria for how a driver handles streamable hello responses (truncated so only the relevant bullet is shown):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A client follows these rules when processing the hello or legacy hello exhaust response:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;If the response is successful (includes &quot;ok:1&quot;) and does not include the OP_MSG moreToCome flag, then the client initiates a new awaitable hello or legacy hello with the topologyVersion field from the previous response.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are no tests that ensure drivers correctly re-initiate a new hello if the server responds with `moreToCome: false` when exhaust support is enabled.&#160; Additionally, there no tests at all that test that when exhaust support is disabled, a driver still correctly monitors the server using the streaming protocol.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://mongodb.slack.com/archives/C72LB5RPV/p1695418753196939&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;A recent slack thread&lt;/a&gt; highlighted the consequences of incorrectly handling either scenario: the driver may end up with a stale topology that will never be updated&lt;sup&gt;1&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;There is currently no known scenario where the server might respond to a streamable hello using exhaust_allowed with `moreToCome: false`, so this has not been an issue in practice.&#160; But this scenario could change, and we should add testing for it.&lt;/p&gt;

&lt;p&gt;Adding testing for the streaming protocol without exhaust support may also be valuable.&#160; This may not be an issue in practice though, since drivers (like Node) might unconditionally use exhaust support for the streaming protocol.&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;&#160;at least until the monitor&apos;s connections encounter an error and close, forcing the monitor to create a new monitoring connection and re-initiate the monitoring process.&#160; But until then, the driver has a perpetually stale topology.&lt;/p&gt;
&lt;h3&gt;&lt;a name=&quot;Motivation&quot;&gt;&lt;/a&gt;&lt;b&gt;Motivation&lt;/b&gt;&lt;/h3&gt;
&lt;h4&gt;&lt;a name=&quot;Whoistheaffectedenduser%3F&quot;&gt;&lt;/a&gt;Who is the affected end user?&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Potentially users, depending on server behavior.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color=&quot;#1a1a1a&quot;&gt;How does this affect the end user?&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Are they blocked? Are they annoyed? Are they confused?&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;Howlikelyisitthatthisproblemorusecasewilloccur%3F&quot;&gt;&lt;/a&gt;How likely is it that this problem or use case will occur?&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Main path? Edge case?&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;Iftheproblemdoesoccur%2Cwhataretheconsequencesandhowseverearethey%3F&quot;&gt;&lt;/a&gt;If the problem does occur, what are the consequences and how severe are they?&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;If the scenarios this ticket is testing are incorrectly implemented by drivers, this can result in stale topologies that are never updated.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For example, Node does not properly handle the streaming protocol when an a hello with `EXHAUST_ALLOWED` enabled returns `moreToCome: false`.&#160; If this scenario occurred with the Node driver, the driver&apos;s SDAM would hang indefinitely.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;There is currently no known scenario where this may occur but this could change.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color=&quot;#1a1a1a&quot;&gt;Is this issue urgent?&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;unknown.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;Isthisticketrequiredbyadownstreamteam%3F&quot;&gt;&lt;/a&gt;Is this ticket required by a downstream team?&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;nope.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;Isthisticketonlyfortests%3F&quot;&gt;&lt;/a&gt;Is this ticket only for tests?&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;yes.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a name=&quot;AcceptanceCriteria&quot;&gt;&lt;/a&gt;&lt;b&gt;Acceptance Criteria&lt;/b&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Add testing to ensure that drivers handle `moreToCome: false` properly when using the streaming protocol with exhaust support enabled.&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Determine if testing should be added for the streaming protocol without exhaust support.&#160; If tests are deemed valuable, add testing for the streaming protocol without exhaust support.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="2451708">DRIVERS-2735</key>
            <summary>Add testing for the streamable monitoring protocol without exhaust support</summary>
                <type id="14901" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14700&amp;avatarType=issuetype">Spec Change</type>
                                            <priority id="10300" iconUrl="https://jira.mongodb.org/images/icons/priorities/medium.svg">Unknown</priority>
                        <status id="10038" iconUrl="https://jira.mongodb.org/images/icons/subtask.gif" description="">Backlog</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="bailey.pearson@mongodb.com">Bailey Pearson</reporter>
                        <labels>
                            <label>FY25Q1</label>
                    </labels>
                <created>Tue, 26 Sep 2023 17:30:29 +0000</created>
                <updated>Mon, 20 Nov 2023 22:03:10 +0000</updated>
                                                                <component>SDAM</component>
                                        <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="5893784" author="shane.harvey" created="Mon, 20 Nov 2023 22:03:10 +0000"  >&lt;p&gt;Sure, FY25Q1 sounds fine. This is not an emergency issue since servers never send moreToCome: false on an hello exhaust stream but would be good to test regardless.&lt;/p&gt;</comment>
                            <comment id="5893416" author="JIRAUSER1259201" created="Mon, 20 Nov 2023 19:57:51 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=shane.harvey%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;shane.harvey@mongodb.com&quot;&gt;shane.harvey@mongodb.com&lt;/a&gt; Since the team QP plans for this quarter are already set, the best way to move this forward would be to add this ticket to the FY25Q1 planning whenever we do the next call for spec owner recommendations (I think you could also add the quarter label now and it will pop up in planning). Though if this is an emergency, feel free to send it through leads triage.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                                                <inwardlinks description="is depended on by">
                                        <issuelink>
            <issuekey id="2451746">NODE-5650</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="2451746">NODE-5650</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                            <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_10951" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Driver Changes</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10748"><![CDATA[Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|i2a3yc:</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>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>