<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 03:30:32 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-13070] Including arbiters when calculating replica set majority can break balancing / prevents fault-tolerant majority writes</title>
                <link>https://jira.mongodb.org/browse/SERVER-13070</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;It seems like the change in replica set majority calculation introduced in &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-5351&quot; title=&quot;migrations should use better slave count to determine up-to-date&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-5351&quot;&gt;&lt;del&gt;SERVER-5351&lt;/del&gt;&lt;/a&gt; broke balancing on some existing cluster setups, since it bases the strict majority on the total number of members, not the number of non-arbiter ones.&lt;/p&gt;

&lt;p&gt;We recently upgraded a cluster from v2.2.4 to v2.4.9, and lost our ability to balance the cluster in its original setup.&lt;/p&gt;

&lt;p&gt;The cluster has 20 shards, and each shard is a replica set with four members: a primary, a secondary and an arbiter in one datacenter, and a non-voting, zero-priority, hidden secondary with a 12-hour replication delay in another datacenter.&lt;/p&gt;

&lt;p&gt;After the upgrade, balancing the cluster failed since it was waiting for the operations to replicate to a majority (3 out of 4) of the replica set members, rather than a majority of the non-arbiter members (2 out of 3). With the third non-arbiter member being on a 12-hour delay, that didn&apos;t go very well. I expect the same would happen on individual shards if either storage member had become unavailable.&lt;/p&gt;

&lt;p&gt;(As a temporary fix to get the balancing going again, we removed the replication delay to the off-site secondary.)&lt;/p&gt;

&lt;p&gt;Not sure if this is the same issue as &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-12386&quot; title=&quot;Use of arbiters prevents fault-tolerant w:majority writes&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-12386&quot;&gt;&lt;del&gt;SERVER-12386&lt;/del&gt;&lt;/a&gt;, or just related to it.&lt;/p&gt;</description>
                <environment></environment>
        <key id="118187">SERVER-13070</key>
            <summary>Including arbiters when calculating replica set majority can break balancing / prevents fault-tolerant majority writes</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="9">Done</resolution>
                                        <assignee username="backlog-server-repl">Backlog - Replication Team</assignee>
                                    <reporter username="filip@pingdom.com">Filip Salomonsson</reporter>
                        <labels>
                            <label>ElecENH</label>
                            <label>majority</label>
                    </labels>
                <created>Thu, 6 Mar 2014 10:21:43 +0000</created>
                <updated>Fri, 7 Apr 2023 14:33:02 +0000</updated>
                            <resolved>Mon, 21 Dec 2015 21:15:30 +0000</resolved>
                                    <version>2.4.9</version>
                                                    <component>Replication</component>
                                        <votes>1</votes>
                                    <watches>13</watches>
                                                                                                                <comments>
                            <comment id="1119864" author="milkie" created="Mon, 21 Dec 2015 21:15:31 +0000"  >&lt;p&gt;Only voting nodes are counted and can satisfy a majority now.&lt;/p&gt;</comment>
                            <comment id="1038553" author="asya" created="Mon, 21 Sep 2015 17:19:07 +0000"  >&lt;p&gt;I believe this problem in the described form would not exist in 3.0 as only voting nodes are counted for majority.  So in given example the delayed hidden node is non-voting and therefore majority would be 2, which two data holding non-hidden nodes can satisfy.&lt;/p&gt;
</comment>
                            <comment id="514076" author="milkie" created="Wed, 12 Mar 2014 11:35:51 +0000"  >&lt;p&gt;The goal is to do a write that will not be rolled back.  An arbiter can vote but does not take writes &amp;#8211; which means it can constitute part of a majority for election purposes but cannot assist with preventing rollbacks as part of that majority.&lt;/p&gt;</comment>
                            <comment id="514047" author="filip@pingdom.com" created="Wed, 12 Mar 2014 09:26:43 +0000"  >&lt;p&gt;Even if we disregard the delay and non-voting nodes, though &#8211; what&apos;s the reason for counting the arbiter(s) when the goal is writes, not votes?&lt;/p&gt;</comment>
                            <comment id="513326" author="milkie" created="Tue, 11 Mar 2014 15:40:46 +0000"  >&lt;p&gt;The previous calculation that the migration code was using was incorrect, and it could have resulted in writes being rolled back if part of the replica set failed.  The new calculation ensures that migrations cannot be rolled back.  Unfortunately, this means that in your case you need to have another data bearing node in order to satisfy the majority.&lt;br/&gt;
In the future, we may consider not counting delayed nodes that have 0 votes when calculating a majority, since such nodes cannot influence an election.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="106442">SERVER-12386</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="164842">SERVER-15764</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="144839">SERVER-14403</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="56517">SERVER-7681</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_12751" key="com.atlassian.jira.plugin.system.customfieldtypes:multiselect">
                        <customfieldname>Assigned Teams</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="25128"><![CDATA[Replication]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Sun, 9 Mar 2014 21:37:47 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        8 years, 8 weeks, 2 days 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>false</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10056" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last commenter</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>luke.bonanomi@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            8 years, 8 weeks, 2 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Old_Backport</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10000"><![CDATA[No]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10032" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Operating System</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10026"><![CDATA[ALL]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>asya.kamsky@mongodb.com</customfieldvalue>
            <customfieldvalue>backlog-server-repl</customfieldvalue>
            <customfieldvalue>milkie@mongodb.com</customfieldvalue>
            <customfieldvalue>filip@pingdom.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hrlznb:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hreiiv:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>104387</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10053" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time In Status</customfieldname>
                        <customfieldvalues>
                            
                        </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|hsh3m7:</customfieldvalue>

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