<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 08:24:36 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-2056] Require Drivers to raise errors for invalid URI Option Keys and Values</title>
                <link>https://jira.mongodb.org/browse/DRIVERS-2056</link>
                <project id="10980" key="DRIVERS">Drivers</project>
                    <description>&lt;p&gt;While &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=sara.golemon&quot; class=&quot;user-hover&quot; rel=&quot;sara.golemon&quot;&gt;sara.golemon&lt;/a&gt; was implementing &lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-2869&quot; title=&quot;Implement Unified URI Options&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-2869&quot;&gt;&lt;del&gt;CDRIVER-2869&lt;/del&gt;&lt;/a&gt;. she noticed that the &quot;Valid required tls options are parsed correctly&quot; test in &lt;a href=&quot;https://github.com/mongodb/specifications/blob/master/source/uri-options/tests/tls-options.json&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;tt&gt;tls-options.json&lt;/tt&gt;&lt;/a&gt; failed because the spec expects a valid URI string and a logged warning. That agrees with the last paragraph in &lt;a href=&quot;https://github.com/mongodb/specifications/blob/master/source/connection-string/connection-string-spec.rst#values&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Connection String Spec: Values&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Any invalid Values for a given key MUST be ignored and MUST log a WARN level message)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;That said, I&apos;m curious why we don&apos;t allow hard errors on such cases. The current spec behavior of logging a warning and ignoring the value could make it quite easy for users to miss the problem.&lt;/p&gt;

&lt;p&gt;Elsewhere in the connection string spec, warnings are suggested for using deprecated options (e.g. &quot;yes&quot; string for a boolean), which makes more sense as we&apos;re still applying the value and not ignoring it. In that case, there&apos;s no harm if the user misses a warning (hopefully they see the warning and fix the URI); however, if support for a deprecated option/value was ultimately dropped the driver would still only log a warning despite a likely behavioral change for the user&apos;s application.&lt;/p&gt;

&lt;p&gt;I&apos;d propose that we at least allow drivers to raise an error for invalid (not merely deprecated) values. This would require some care when updating the tests, since we wouldn&apos;t want to simply remove existing test cases with invalid values.&lt;/p&gt;</description>
                <environment></environment>
        <key id="781321">DRIVERS-2056</key>
            <summary>Require Drivers to raise errors for invalid URI Option Keys and Values</summary>
                <type id="11" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14707&amp;avatarType=issuetype">Epic</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</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="jmikola@mongodb.com">Jeremy Mikola</reporter>
                        <labels>
                    </labels>
                <created>Wed, 29 May 2019 21:04:15 +0000</created>
                <updated>Thu, 27 Jul 2023 14:48:35 +0000</updated>
                                                                <component>Connection String</component>
                    <component>URI Options</component>
                                        <votes>0</votes>
                                    <watches>11</watches>
                                                                                                                <comments>
                            <comment id="5435692" author="dbeng-pm-bot" created="Thu, 18 May 2023 17:57:51 +0000"  >&lt;p&gt;Alex Bevilacqua renamed project from &quot;Require drivers to raise errors for invalid URI option values&quot; to &quot;Require Drivers to raise errors for invalid URI Option Keys and Values&quot;&lt;/p&gt;</comment>
                            <comment id="2264592" author="david.golden" created="Wed, 29 May 2019 23:37:42 +0000"  >&lt;p&gt;The connection string and URI options specs are also inconsistent with the Read/Write concern spec tests, which say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;valid:: a boolean indicating if the write concern created from the document is valid.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Testing whether a URI is valid or not should simply be a matter of checking whether URI parsing raises an error or exception. &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;and has a case like this:&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; description: &quot;wtimeoutMS as an invalid number&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;        uri: &quot;mongodb://localhost/?wtimeoutMS=-500&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;        valid: false&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;        warning: ~&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;Per the connection string rules, an invalid (negative) wtimeeoutMS should not throw an exception.&lt;/p&gt;

&lt;p&gt;I&apos;m curious how the drivers that have implemented URI options already have addressed this inconsistency.&lt;/p&gt;</comment>
                            <comment id="2264478" author="david.golden" created="Wed, 29 May 2019 21:43:27 +0000"  >&lt;p&gt;Semi-related, from a bug I found in my work to match the spec behavior: we appear to have no test coverage for `&lt;tt&gt;mongodb://localhost/?readPreference=primaryPreferred&amp;amp;readPreferenceTags=dc:ny,rack:1&amp;amp;readPreferenceTags=dc:ny&amp;amp;readPreferenceTags=invalid&lt;/tt&gt;`, which per the spec should only ignore the last readPreferenceTags (and not all, as my buggy code did).&lt;/p&gt;

&lt;p&gt;I presume that also means we have no coverage for &lt;tt&gt;readPreferenceTags=dc:ny,invalid&amp;amp;readPreferenceTags=dc:va&lt;/tt&gt; &amp;#8211; which I think should ignore the first readPreferenceTags completely and not record it as &quot;dc:ny&quot;.&lt;/p&gt;

&lt;p&gt;(The original Perl driver code would have thrown an error for any of these invalid cases.)&lt;/p&gt;</comment>
                            <comment id="2264443" author="david.golden" created="Wed, 29 May 2019 21:18:16 +0000"  >&lt;p&gt;If I understand correctly, there is also a security consideration:  `&lt;tt&gt;mongodb://localhost/?tls=1.2&lt;/tt&gt;`.  Per the spec, that would warn but proceed &lt;b&gt;without&lt;/b&gt; TLS, because the invalid &lt;tt&gt;tls&lt;/tt&gt; value results in &lt;tt&gt;tls&lt;/tt&gt; being ignored.&lt;/p&gt;

&lt;p&gt;Another example: `&lt;tt&gt;mongodb://localhost/?tls=&amp;amp;wtimeout=1000&lt;/tt&gt;`.  Is that a bad parse because &lt;tt&gt;tls&lt;/tt&gt; didn&apos;t have a value?  Is it parsed as the empty string?  If empty string, that would also warn and ignore &lt;tt&gt;tls&lt;/tt&gt;.&lt;/p&gt;</comment>
                            <comment id="2264433" author="jmikola@gmail.com" created="Wed, 29 May 2019 21:05:12 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=david.golden&quot; class=&quot;user-hover&quot; rel=&quot;david.golden&quot;&gt;david.golden&lt;/a&gt; provided some more context in Slack:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I&apos;m re-doing the Perl URI parsing to account for tests since the initial implementation and have been wondering the same thing.&lt;/p&gt;

&lt;p&gt;Another one I found annoying is &lt;tt&gt;mongodb://example.com/?readPreferenceTags=invalid&lt;/tt&gt; because &quot;invalid&quot; isn&apos;t in the &quot;x:y&quot; form that would represent a valid tag. Is that a structural problem that should error? Or an invalid value that should merely warn. Test says valid, but warn.&lt;/p&gt;

&lt;p&gt;The connection string spec is ambiguous whether an &quot;invalid value&quot; mean invalid type or invalid data or both.&lt;/p&gt;&lt;/blockquote&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                            <outwardlinks description="depends on">
                                        <issuelink>
            <issuekey id="2369824">DRIVERS-2655</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is depended on by">
                                                        </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                                        </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10620">
                    <name>Issue split</name>
                                            <outwardlinks description="split to">
                                        <issuelink>
            <issuekey id="2236188">CDRIVER-4558</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236190">CSHARP-4484</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236189">CXX-2639</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236191">GODRIVER-2738</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236192">JAVA-4847</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236194">MOTOR-1085</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236193">NODE-4972</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236196">PHPLIB-1067</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236195">PYTHON-3572</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236197">RUBY-3207</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="2236198">RUST-1572</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="787573">CDRIVER-3167</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="629329">CDRIVER-2869</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                            <customfield id="customfield_20965" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Cost Threshold %</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>100.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_20963" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Cost to Date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</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_23952" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Driver Compliance</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[<style type='text/css'>
         #scriptField, #scriptField *{
                border: 1px solid black;
            }

            #scriptField{
                border-collapse: collapse;
            }

            #scriptField td {
                text-align: center; /* Center-align text in table cells */
            }

            #scriptField td.key {
                text-align: left; /* Left-align text in the Key column */
            }

            #scriptField a {
                text-decoration: none; /* Remove underlines from links */
                border: none; /* Remove border from links */
            }
            
            /* Add green background color to cells with FixVersion */
            #scriptField td.hasFixVersion {
                background-color: #00FF00; /* Green color code */
            }

            /* Center-align the first row headers */
            #scriptField th {
                text-align: center;
            }
        </style>
<table id='scriptField'>
  <tr>
    <th>Key</th>
    <th>Status/Resolution</th>
    <th>FixVersion</th>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/CDRIVER-4558'>CDRIVER-4558</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/CXX-2639'>CXX-2639</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/CSHARP-4484'>CSHARP-4484</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/GODRIVER-2738'>GODRIVER-2738</a>
    </td>
    <td>Won't Fix</td>
    <td class='hasFixVersion'>2.0.0</td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/JAVA-4847'>JAVA-4847</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/NODE-4972'>NODE-4972</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/MOTOR-1085'>MOTOR-1085</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/PYTHON-3572'>PYTHON-3572</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/PHPLIB-1067'>PHPLIB-1067</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/RUBY-3207'>RUBY-3207</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/RUST-1572'>RUST-1572</a>
    </td>
    <td>Won't Fix</td>
    <td class=''></td>
  </tr>
  <tr>
    <td class='key'>
      <a href='https://jira.mongodb.org/browse/SWIFT-1693'>SWIFT-1693</a>
    </td>
    <td>Won't Do</td>
    <td class=''></td>
  </tr>
</table>]]></customfieldvalue>


                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_18362" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                        <customfieldname>Engineering Lead</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>daria.pardue@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10858" key="com.pyxis.greenhopper.jira:gh-epic-label">
                        <customfieldname>Epic Name</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Require Drivers to raise errors for invalid URI Option Keys and Values</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10859" key="com.pyxis.greenhopper.jira:gh-epic-status">
                        <customfieldname>Epic Status</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10640"><![CDATA[To Do]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_20964" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Final Cost Estimate</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_18358" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                        <customfieldname>Product Manager</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>alex.bevilacqua@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18359" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                        <customfieldname>Program Manager</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>jessica.sigafoos@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|i1ccm4:</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_10856" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Scope Cost Estimate</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14261" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>Start date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Mon, 20 Mar 2023 00:00:00 +0000</customfieldvalue>

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