<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Wed Feb 07 21:18:35 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>[CDRIVER-3625] Multi-threaded scanning should scan servers independently</title>
                <link>https://jira.mongodb.org/browse/CDRIVER-3625</link>
                <project id="10030" key="CDRIVER">C Driver</project>
                    <description>&lt;p&gt;For a client pool, the background topology scanner runs a complete scan of all servers after heartbeatFrequencyMS has passed (or sooner, if a scan is requested).&lt;/p&gt;

&lt;p&gt;The background scan uses &lt;tt&gt;mongoc_topology_scan_once&lt;/tt&gt;. This fans out &quot;ismaster&quot; commands and waits for all responses before another scan can be scheduled.&lt;/p&gt;

&lt;p&gt;A big problem with this, is that a slow server could block the next scheduled scan of all other servers. The timeout of an &quot;ismaster&quot; in scanning is connectTimeoutMS, which may exceed heartbeatFrequencyMS. This scenario can easily happen:&lt;/p&gt;

&lt;p&gt;1.  Scan requested&lt;br/&gt;
2. &quot;ismaster&quot; is sent to servers X and Y&lt;br/&gt;
3. X responds quickly, but Y hangs for connectTimeoutMS.&lt;br/&gt;
4. The &quot;ismaster&quot; to X times out.&lt;br/&gt;
5. The background thread sees that more than heartbeatFrequencyMS has passed and starts a new complete scan.&lt;/p&gt;

&lt;p&gt;I&apos;ve reproduced this behavior by modifying example-sdam-monitoring.c. It overrides the stream initializer to simulate a slow connection to one server.&lt;br/&gt;
&lt;a href=&quot;https://gist.github.com/kevinAlbs/1eb3fd42a2b17d71f99e4d9389661069&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://gist.github.com/kevinAlbs/1eb3fd42a2b17d71f99e4d9389661069&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running it against a two node replica set shows the behavior:&lt;/p&gt;
&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;$ example-sdam-monitoring &quot;mongodb://localhost:27017,localhost:27018/?connectTimeoutMS=20000&amp;amp;heartbeatFrequencyMS=1000&quot;&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;...&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;2020/04/15 13:37:54.0521: [78700]:    DEBUG:       mongoc: localhost:27017 heartbeat started&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;2020/04/15 13:37:54.0524: [78700]:    DEBUG:       mongoc: localhost:27018 heartbeat started&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;...&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;2020/04/15 13:38:14.0633: [78700]:    DEBUG:       mongoc: localhost:27018 heartbeat failed: socket timeout calling ismaster on &apos;localhost:27018&apos;&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;2020/04/15 13:38:15.0137: [78700]:    DEBUG:       mongoc: localhost:27017 heartbeat started&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;

&lt;p&gt;The second heartbeat to localhost:27017 is blocked by the 20 second connection timeout.&lt;/p&gt;

&lt;p&gt;This behavior is unavoidable for single-threaded scans, but should not be the case for multi-threaded scans. Servers should be scanned at their own intervals (which also better aligns with the server monitoring spec).&lt;/p&gt;</description>
                <environment></environment>
        <key id="1316225">CDRIVER-3625</key>
            <summary>Multi-threaded scanning should scan servers independently</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="kevin.albertson@mongodb.com">Kevin Albertson</assignee>
                                    <reporter username="kevin.albertson@mongodb.com">Kevin Albertson</reporter>
                        <labels>
                    </labels>
                <created>Wed, 15 Apr 2020 17:53:40 +0000</created>
                <updated>Sat, 28 Oct 2023 11:28:48 +0000</updated>
                            <resolved>Fri, 29 May 2020 19:56:50 +0000</resolved>
                                                    <fixVersion>1.17.0-beta2</fixVersion>
                    <fixVersion>1.17.0</fixVersion>
                                    <component>SDAM</component>
                                        <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                <comments>
                            <comment id="3191335" author="kevin.albertson" created="Thu, 4 Jun 2020 21:52:21 +0000"  >&lt;p&gt;PR: &lt;a href=&quot;https://github.com/mongodb/mongo-c-driver/pull/607&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-c-driver/pull/607&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="3147116" author="xgen-internal-githook" created="Fri, 29 May 2020 21:19:59 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Kevin Albertson&apos;, &apos;email&apos;: &apos;kevin.albertson@mongodb.com&apos;, &apos;username&apos;: &apos;kevinAlbs&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-3625&quot; title=&quot;Multi-threaded scanning should scan servers independently&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-3625&quot;&gt;&lt;del&gt;CDRIVER-3625&lt;/del&gt;&lt;/a&gt; monitor with a thread-per-server&lt;/p&gt;

&lt;p&gt;For a client pool, servers are now scanned independently using a&lt;br/&gt;
separate thread per server.&lt;/p&gt;

&lt;p&gt;SRV polling is now done on a separate thread.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-c-driver/commit/370fc1855145ea06b1586286c99cdfc5d073a6ea&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-c-driver/commit/370fc1855145ea06b1586286c99cdfc5d073a6ea&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="3147111" author="xgen-internal-githook" created="Fri, 29 May 2020 21:19:08 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Kevin Albertson&apos;, &apos;email&apos;: &apos;kevin.albertson@mongodb.com&apos;, &apos;username&apos;: &apos;kevinAlbs&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-3625&quot; title=&quot;Multi-threaded scanning should scan servers independently&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-3625&quot;&gt;&lt;del&gt;CDRIVER-3625&lt;/del&gt;&lt;/a&gt; monitor with a thread-per-server&lt;/p&gt;

&lt;p&gt;For a client pool, servers are now scanned independently using a&lt;br/&gt;
separate thread per server.&lt;/p&gt;

&lt;p&gt;SRV polling is now done on a separate thread.&lt;br/&gt;
Branch: r1.17&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-c-driver/commit/c62098bb3ad25a1c2dbd199c0137eb293703c876&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-c-driver/commit/c62098bb3ad25a1c2dbd199c0137eb293703c876&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="3065885" author="kevin.albertson" created="Sat, 2 May 2020 14:58:54 +0000"  >&lt;p&gt;The following should be done as a part of this ticket or as a separate follow-on ticket:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Once&#160;&lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-3614&quot; title=&quot;SRV polling does not monitor newly found servers&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-3614&quot;&gt;&lt;del&gt;CDRIVER-3614&lt;/del&gt;&lt;/a&gt; if resolved, use a separate thread for SRV polling.&lt;/li&gt;
	&lt;li&gt;Remove functionality from the topology scanner that is specific to multi-threaded.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="3047072" author="april.schoffer" created="Mon, 20 Apr 2020 14:47:40 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-3535&quot; title=&quot;Reduce Client Time To Recovery On Topology Changes&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-3535&quot;&gt;&lt;del&gt;CDRIVER-3535&lt;/del&gt;&lt;/a&gt; will resolve this bug.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                                                <inwardlinks description="is depended on by">
                                        <issuelink>
            <issuekey id="1354702">CDRIVER-3678</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1144715">CDRIVER-3535</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="1371096">CDRIVER-3701</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1357431">CDRIVER-3682</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="1384054">CDRIVER-3722</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </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_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hx2zfz:</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>