<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 05:54: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>[SERVER-62246] writeConcern all</title>
                <link>https://jira.mongodb.org/browse/SERVER-62246</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;If I want write to be acknowledged when all voting nodes have confirmed a write, I have to manually specify the number of nodes in my writeConcern (e.g. &quot;w: 3&quot; in a 3-node set).&lt;/p&gt;

&lt;p&gt;It would be helpful to support a &quot;w: all&quot; writeConcern that supports this behavior independent of replica set topology.&lt;/p&gt;

&lt;p&gt;We already do something similar with the &quot;votingMembers&quot; &lt;a href=&quot;https://docs.mongodb.com/manual/reference/method/db.collection.createIndexes/#std-label-createIndexes-method-commitQuorum&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;commitQuorum&lt;/a&gt; setting, so I would imagine we can do something similar for writeConcern as well.&lt;/p&gt;</description>
                <environment></environment>
        <key id="1956037">SERVER-62246</key>
            <summary>writeConcern all</summary>
                <type id="2" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14711&amp;avatarType=issuetype">New Feature</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="alan.zheng@mongodb.com">Alan Zheng</assignee>
                                    <reporter username="louis.williams@mongodb.com">Louis Williams</reporter>
                        <labels>
                    </labels>
                <created>Thu, 23 Dec 2021 16:32:46 +0000</created>
                <updated>Thu, 7 Apr 2022 17:57:10 +0000</updated>
                                                                                                <votes>0</votes>
                                    <watches>14</watches>
                                                                                                                <comments>
                            <comment id="4462243" author="judah.schvimer" created="Wed, 6 Apr 2022 18:36:49 +0000"  >&lt;p&gt;w:all wouldn&apos;t prevent a node from falling too far behind unless the high volume write clients used w:all to throttle themselves. Generally if one node is falling very far behind it&apos;s underprovisioned, overloaded, or degraded in some way. In those cases you probably don&apos;t want to slow down your writes, you&apos;d likely prefer to rebalance any imbalanced read load, or do maintenance to fix any degradation or imbalanced provisioning within the set. &lt;/p&gt;</comment>
                            <comment id="4461980" author="louis.williams" created="Wed, 6 Apr 2022 17:29:11 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=milkie&quot; class=&quot;user-hover&quot; rel=&quot;milkie&quot;&gt;milkie&lt;/a&gt;, good point! To provide more background, this came up while developing dbCheck. It&apos;s a potentially very expensive operation, and we wanted a way to prevent any secondary from falling too far behind. The dbCheck operation is not required for availability, so if a node crashes, it would be reasonable to stop until the crashed node re-joins the set. I expect users of w:all would be willing to make the same tradeoff.&lt;/p&gt;</comment>
                            <comment id="4461676" author="milkie" created="Wed, 6 Apr 2022 16:18:04 +0000"  >&lt;p&gt;It doesn&apos;t sound like having all writes use w:&quot;all&quot; would be a viable solution to the lack of majority-write availablity when a node goes down, since that&apos;s exactly the main disadvantage of w:&quot;all&quot; &amp;#8211; your writes stop working as soon as any &lt;span class=&quot;error&quot;&gt;&amp;#91;voting&amp;#93;&lt;/span&gt; node fails.&lt;/p&gt;</comment>
                            <comment id="4461316" author="louis.williams" created="Wed, 6 Apr 2022 14:58:52 +0000"  >&lt;p&gt;The original motivation was more of a stability/availability one: to ensure that no secondaries lag significantly behind the majority of the set. In a 3-node set, if two nodes are significantly ahead of the third, a failure of one of my good nodes could result in an extended period with a lack of majority write availability.&lt;/p&gt;</comment>
                            <comment id="4457648" author="schwerin" created="Tue, 5 Apr 2022 13:50:28 +0000"  >&lt;p&gt;If we&apos;re going to introduce an &quot;all&quot; write concern, I think we should be very thoughtful about its intended meaning. Let&apos;s suppose as proposed in the description that it means &quot;all voters&quot;. So, why do we want to wait for all voters to confirm a write? The only reason I know of so far is to ensure that reads sent to secondaries after the write is confirmed will definitely see the result of the write at &quot;majority&quot; or &quot;local&quot; read concern. With some extra work to ensure read-preference primary always ensures read-your-writes behavior for those read concerns, if we only consider voting nodes we could build this table:&lt;/p&gt;

&lt;div class=&apos;table-wrap&apos;&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;th class=&apos;confluenceTh&apos;&gt;Write Concern&lt;/th&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;Read Preference&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;ReadConcern&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;read-your-writes?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;1&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;primary&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;local&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;1&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;primary&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;majority&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;1&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;secondary&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;majority/local&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;majority&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;primary&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;majority/local&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;majority&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;secondary&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;majority/local&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;all&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;primary/secondary&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;majority/local&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;So if there are only voting nodes, or there is a &quot;any voter&quot; read preference, a write concern of &quot;all&quot; is  a way to wait on writes to ensure that all such readers will see the result of your writes. Is that the purpose of this read preference?&lt;/p&gt;</comment>
                            <comment id="4440330" author="judah.schvimer" created="Mon, 28 Mar 2022 23:18:15 +0000"  >&lt;p&gt;We also need to decide if w:all should wait for journaling on all nodes or just the primary, and the behavior with &quot;writeConcernMajorityJournalDefault&quot;.&lt;/p&gt;</comment>
                            <comment id="4274724" author="JIRAUSER1258884" created="Tue, 4 Jan 2022 19:22:26 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=alan.zheng&quot; class=&quot;user-hover&quot; rel=&quot;alan.zheng&quot;&gt;alan.zheng&lt;/a&gt; to look at this, thank you!&lt;/p&gt;</comment>
                            <comment id="4266179" author="judah.schvimer" created="Thu, 23 Dec 2021 17:03:54 +0000"  >&lt;p&gt;One tricky part here will be defining and ensuring the semantics of w:all in the face of concurrent reconfigs. &lt;/p&gt;

&lt;p&gt;We also have to decide if w:all refers only to voting nodes or not. IIRC, non-majority write concerns count non-voting nodes. I suspect w:all should be &quot;all nodes&quot; not &quot;all voting nodes&quot;, but since commitQuorum wanted &quot;all voting nodes&quot; we may want to surface both options.&lt;/p&gt;

&lt;p&gt;Users also may expect w:all to be &quot;stronger&quot; than w:majority. We should consider if w:all requires its optime to be majority committed in addition to being on all nodes.&lt;/p&gt;

&lt;p&gt;One last consideration will be, what do we do if a user has already defined a &lt;a href=&quot;https://docs.mongodb.com/manual/core/replica-set-write-concern/#custom-write-concerns&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;custom write concern&lt;/a&gt; with the same name?&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>8.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18555" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname># of Sprints</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>6.0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 23 Dec 2021 17:03:54 +0000</customfieldvalue>

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

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            1 year, 44 weeks ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>alan.zheng@mongodb.com</customfieldvalue>
            <customfieldvalue>schwerin@mongodb.com</customfieldvalue>
            <customfieldvalue>elizabeth.roytburd@mongodb.com</customfieldvalue>
            <customfieldvalue>milkie@mongodb.com</customfieldvalue>
            <customfieldvalue>judah.schvimer@mongodb.com</customfieldvalue>
            <customfieldvalue>louis.williams@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i0fih3:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hzypfr:</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_10557" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="5533">Replication 2022-01-24</customfieldvalue>
    <customfieldvalue id="5706">Replication 2022-02-07</customfieldvalue>
    <customfieldvalue id="5707">Repl 2022-02-21</customfieldvalue>
    <customfieldvalue id="5708">Repl 2022-03-07</customfieldvalue>
    <customfieldvalue id="5709">Repl 2022-03-21</customfieldvalue>
    <customfieldvalue id="5710">Repl 2022-04-04</customfieldvalue>

                        </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|i0f4mf:</customfieldvalue>

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