<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Wed Feb 07 21:14:46 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-2284] Invalidate generated BSON instead of freezing read and write concerns</title>
                <link>https://jira.mongodb.org/browse/CDRIVER-2284</link>
                <project id="10030" key="CDRIVER">C Driver</project>
                    <description>&lt;p&gt;Currently, read concern and write concern objects are frozen at the first time that &lt;tt&gt;_mongoc_read_concern_get_bson()&lt;/tt&gt; and &lt;tt&gt;_mongoc_write_concern_get_bson()&lt;/tt&gt; are called, respectively. Once frozen, the objects can no longer be modified via the public API (setter functions will fail). This effectively caches the generated BSON internally.&lt;/p&gt;

&lt;p&gt;Because freezing converts a mutable struct into an immutable value, libmongoc needs to copy user-supplied structs before attempting to convert them to BSON (see: &lt;a href=&quot;https://github.com/mongodb/mongo-c-driver/blob/1.8.0-rc0/src/mongoc/mongoc-write-command.c#L33&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;tt&gt;WRITE_CONCERN_DOC()&lt;/tt&gt;&lt;/a&gt;); however, there are still outstanding cases with collection-level write functions where we do not make copies and may inadvertently freeze the user&apos;s struct (as noted in &lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-2274&quot; title=&quot;_mongoc_write_command_init() may freeze const mongoc_write_concern_t&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-2274&quot;&gt;&lt;del&gt;CDRIVER-2274&lt;/del&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Consider removing the frozen state on these objects and instead have setter functions simply invalidate any previously generated BSON. Such a change would also let us remove the &lt;tt&gt;WRITE_CONCERN_DOC()&lt;/tt&gt; macro and resolve &lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-2274&quot; title=&quot;_mongoc_write_command_init() may freeze const mongoc_write_concern_t&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-2274&quot;&gt;&lt;del&gt;CDRIVER-2274&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
        <key id="427531">CDRIVER-2284</key>
            <summary>Invalidate generated BSON instead of freezing read and write concerns</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="13201">Fixed</resolution>
                                        <assignee username="jmikola@mongodb.com">Jeremy Mikola</assignee>
                                    <reporter username="jmikola@mongodb.com">Jeremy Mikola</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Sep 2017 16:10:38 +0000</created>
                <updated>Sat, 28 Oct 2023 11:30:27 +0000</updated>
                            <resolved>Thu, 23 Nov 2017 03:22:13 +0000</resolved>
                                    <version>1.7.0</version>
                                    <fixVersion>1.9.0</fixVersion>
                                    <component>libmongoc</component>
                                        <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                <comments>
                            <comment id="1733464" author="xgen-internal-githook" created="Thu, 23 Nov 2017 03:20:29 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Jeremy Mikola&apos;, &apos;username&apos;: &apos;jmikola&apos;, &apos;email&apos;: &apos;jmikola@gmail.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-2284&quot; title=&quot;Invalidate generated BSON instead of freezing read and write concerns&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-2284&quot;&gt;&lt;del&gt;CDRIVER-2284&lt;/del&gt;&lt;/a&gt; validate wtimeout before calling setter&lt;/p&gt;

&lt;p&gt;_mongoc_write_concern_new_from_iter must validate wtimeout before it&lt;br/&gt;
calls mongoc_write_concern_set_wtimeout, which ignores invalid&lt;br/&gt;
values.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-c-driver/commit/50c18313428ac95d80b8976d00683a3a1ddb63bb&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-c-driver/commit/50c18313428ac95d80b8976d00683a3a1ddb63bb&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="1733462" author="xgen-internal-githook" created="Thu, 23 Nov 2017 03:20:26 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Jeremy Mikola&apos;, &apos;username&apos;: &apos;jmikola&apos;, &apos;email&apos;: &apos;jmikola@gmail.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-2284&quot; title=&quot;Invalidate generated BSON instead of freezing read and write concerns&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-2284&quot;&gt;&lt;del&gt;CDRIVER-2284&lt;/del&gt;&lt;/a&gt; don&apos;t worry about freezing WC in find_and_modify_with_opts&lt;/p&gt;

&lt;p&gt;_mongoc_write_concern_get_bson() will no longer leave the write concern&lt;br/&gt;
immutable, so we can remove the macro for copying the write concern if&lt;br/&gt;
it was not already frozen.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-c-driver/commit/fe4ba77f67c0f2b3fbbd57c33c07e39b8b361b26&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-c-driver/commit/fe4ba77f67c0f2b3fbbd57c33c07e39b8b361b26&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="1733461" author="xgen-internal-githook" created="Thu, 23 Nov 2017 03:20:25 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Jeremy Mikola&apos;, &apos;username&apos;: &apos;jmikola&apos;, &apos;email&apos;: &apos;jmikola@gmail.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CDRIVER-2284&quot; title=&quot;Invalidate generated BSON instead of freezing read and write concerns&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CDRIVER-2284&quot;&gt;&lt;del&gt;CDRIVER-2284&lt;/del&gt;&lt;/a&gt; keep read and write concerns mutable&lt;/p&gt;

&lt;p&gt;Previously, converting a read or write concern to BSON would freeze the&lt;br/&gt;
struct for further modification. This repurposes the &quot;frozen&quot; boolean&lt;br/&gt;
to track whether the struct has changed since its BSON was compiled and&lt;br/&gt;
allows further modification to unfreeze the struct (i.e. invalidate the&lt;br/&gt;
compiled BSON).&lt;/p&gt;

&lt;p&gt;This also changes _mongoc_write_concern_new_from_iter() to use existing&lt;br/&gt;
new and setter functions to ensure that is_default is correctly&lt;br/&gt;
reported.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-c-driver/commit/3db74e6265aa75823ee5d58b8aa17efa5ab50c8c&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-c-driver/commit/3db74e6265aa75823ee5d58b8aa17efa5ab50c8c&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                            <outwardlinks description="duplicates">
                                        <issuelink>
            <issuekey id="426207">CDRIVER-2274</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="442731">CDRIVER-2318</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|ht6o2n:</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>