<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 04:52:56 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-39726] Recovering the state of an uncommitted transaction should not block</title>
                <link>https://jira.mongodb.org/browse/SERVER-39726</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-37344&quot; title=&quot;Implement recovery token for retrying a commit command on a different mongos&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-37344&quot;&gt;&lt;del&gt;SERVER-37344&lt;/del&gt;&lt;/a&gt;&apos;s ticket description says:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;a shard that receives &apos;recoverTransaction&apos; returns NoSuchTransaction if the shard does not know about the transaction. otherwise, if the decision has been made, returns the decision; *&lt;b&gt;if the decision has not been made, decides to abort.&lt;/b&gt;*&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And the server design also says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the client is unable to reach the original router after having attempted to send commitTransaction to the original router, the client can send commitTransaction to a different router.&lt;br/&gt;
Doing so will never initiate committing the transaction. *&lt;b&gt;Instead, the recovery token in the request will be used to try to abort the transaction if a decision to commit has not already been made&lt;/b&gt;*, otherwise to recover the transaction&apos;s outcome.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;However the implementation of &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-37344&quot; title=&quot;Implement recovery token for retrying a commit command on a different mongos&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-37344&quot;&gt;&lt;del&gt;SERVER-37344&lt;/del&gt;&lt;/a&gt; says:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;commit recovery is best effort. If coordinateCommit was never sent to the coordinator, the recovery commit will timeout waiting for it.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;So I think the current implementation is incomplete. The abort optimization is important because it prevents applications from blocking for 60 seconds (or transactionLifetimeLimitSeconds) when the original commit attempt is lost.&lt;/p&gt;

&lt;p&gt;CC: &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=renctan&quot; class=&quot;user-hover&quot; rel=&quot;renctan&quot;&gt;renctan&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
        <key id="702161">SERVER-39726</key>
            <summary>Recovering the state of an uncommitted transaction should not block</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="3">Duplicate</resolution>
                                        <assignee username="randolph@mongodb.com">Randolph Tan</assignee>
                                    <reporter username="shane.harvey@mongodb.com">Shane Harvey</reporter>
                        <labels>
                    </labels>
                <created>Thu, 21 Feb 2019 19:23:02 +0000</created>
                <updated>Thu, 2 May 2019 19:03:15 +0000</updated>
                            <resolved>Thu, 2 May 2019 19:03:15 +0000</resolved>
                                    <version>4.1.8</version>
                                                                        <votes>0</votes>
                                    <watches>6</watches>
                                                                                                                <comments>
                            <comment id="2232644" author="renctan" created="Thu, 2 May 2019 19:03:03 +0000"  >&lt;p&gt;Changes in &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39349&quot; title=&quot;Recovering the state of a completed single-shard transaction should not block &quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39349&quot;&gt;&lt;del&gt;SERVER-39349&lt;/del&gt;&lt;/a&gt; made it such that commit recovery will abort the transaction coordinator if it has not yet started instead of trying to wait for it to time out.&lt;/p&gt;</comment>
                            <comment id="2162077" author="shane.harvey" created="Mon, 25 Feb 2019 19:58:51 +0000"  >&lt;blockquote&gt;&lt;p&gt;I think the distinction is that commitTransaction against a recovery router will abort the uncommitted transaction on the recovery shard, which guarantees the transaction will never commit. This is done so that NoSuchTransaction can be safely returned to the client.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Yes this is the behavior I would like to see implemented by this ticket. I linked  &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39692&quot; title=&quot;Make graceful MongoS shutdown drain all in-progress transactions&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39692&quot;&gt;&lt;del&gt;SERVER-39692&lt;/del&gt;&lt;/a&gt; because if commitTransaction can abort the uncommitted transaction on the recovery shard, then abortTransaction should also be able to abort the uncommitted transaction on the recovery shard.&lt;/p&gt;</comment>
                            <comment id="2161561" author="esha.maharishi@10gen.com" created="Mon, 25 Feb 2019 15:38:01 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=shane.harvey&quot; class=&quot;user-hover&quot; rel=&quot;shane.harvey&quot;&gt;shane.harvey&lt;/a&gt;, I think the distinction is that commitTransaction against a recovery router will abort the uncommitted transaction &lt;b&gt;on the recovery shard&lt;/b&gt;, which guarantees the transaction will never commit. This is done so that NoSuchTransaction can be safely returned to the client. However, it does not synchronously abort the transaction &lt;b&gt;on all participant shards&lt;/b&gt;, since the recoveryToken does not include the participant list.&lt;/p&gt;</comment>
                            <comment id="2159231" author="shane.harvey" created="Thu, 21 Feb 2019 23:27:06 +0000"  >&lt;p&gt;Linking&#160;&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39692&quot; title=&quot;Make graceful MongoS shutdown drain all in-progress transactions&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39692&quot;&gt;&lt;del&gt;SERVER-39692&lt;/del&gt;&lt;/a&gt; because these two tickets are very related. If commitTransaction can cause an uncommitted transaction to abort then abortTransaction should also be able to do the same.&lt;/p&gt;</comment>
                            <comment id="2159214" author="shane.harvey" created="Thu, 21 Feb 2019 23:07:02 +0000"  >&lt;p&gt;Interesting... can you explain why the recovery commitTransaction attempt cannot communicate with the coordinator to abort the transaction? What exactly is the race condition?&lt;/p&gt;</comment>
                            <comment id="2158913" author="renctan" created="Thu, 21 Feb 2019 20:03:55 +0000"  >&lt;p&gt;Note: design doc is not up to date. I don&apos;t think the abort was meant to be an optimization and it is also possible that it won&apos;t be used to get around this quirk. The issue is that making decisions without involving the transaction coordinator is racy.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                            <outwardlinks description="duplicates">
                                        <issuelink>
            <issuekey id="682274">SERVER-39349</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="610799">SERVER-37344</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="682274">SERVER-39349</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>6.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18555" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname># of Sprints</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>3.0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 21 Feb 2019 20:03:55 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        4 years, 40 weeks, 6 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_10857" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>PM-564</customfieldvalue>
                        </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>randolph@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            4 years, 40 weeks, 6 days ago
                        </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>esha.maharishi@mongodb.com</customfieldvalue>
            <customfieldvalue>randolph@mongodb.com</customfieldvalue>
            <customfieldvalue>shane.harvey@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|huob3j:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|huhe0v:</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="2863">Sharding 2019-04-08</customfieldvalue>
    <customfieldvalue id="2864">Sharding 2019-04-22</customfieldvalue>
    <customfieldvalue id="2917">Sharding 2019-05-06</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|hunxcv:</customfieldvalue>

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