<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 04:51:00 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-39092] ReplicationStateTransitionLockGuard should be resilient to exceptions thrown before waitForLockUntil()</title>
                <link>https://jira.mongodb.org/browse/SERVER-39092</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;In&#160;ReplicationStateTransitionLockGuard destructor, we have an invariant which checks for&#160; &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/replication_state_transition_lock_guard.cpp#L95&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;lock result not equal to&#160;LOCK_WAITING&lt;/a&gt;&#160;before unlocking the rstl lock. But, for the below valid event sequence,&#160; we would be calling the ReplicationStateTransitionLockGuard destructor with _result set as &quot;LOCK_WAITING&quot; to unlock the rstl lock.&lt;/p&gt;

&lt;p&gt;1) Thread A&#160; issues stepdown cmd ( can be triggered either by heartbeat or user) .&lt;/p&gt;

&lt;p&gt;2) Thread B issues conditional stepdown triggered by the user.&lt;/p&gt;

&lt;p&gt;3) &lt;del&gt;Thread A marks thread B as killed.&lt;/del&gt;&#160; (&lt;b&gt;EDIT&lt;/b&gt; : One step down thread cannot mark another step down thread as killed, because during step down we currently kill only user operations that have taken global lock in X, IX and IS mode. Step down thread only try to take RSTL lock in X mode and not global lock.)&lt;/p&gt;

&lt;p&gt;3) Thread A acquires the rstl lock in X mode.&lt;/p&gt;

&lt;p&gt;4) Thread B enqueues the rstl lock and set the _&lt;em&gt;result as LOCK&lt;/em&gt;_WAITING.&lt;/p&gt;

&lt;p&gt;5) Thread B calls ReplicationStateTransitionLockGuard::waitForLockUntil with non-zero timeout.&lt;/p&gt;

&lt;p&gt;6) Thread B wait for rstl lock &lt;del&gt;is interrupted&lt;/del&gt; (or even for time out case) and lead to calling&#160;ReplicationStateTransitionLockGuard destructor with&#160;_&lt;em&gt;result as &quot;LOCK&lt;/em&gt;_WAITING&quot; leading to invariant failure. (&lt;b&gt;EDIT:&lt;/b&gt; Thread B can time out waiting for the lock).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; There is no need to worry that the rstl lock state won&apos;t be cleaned up, because &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L837-L853&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;unlockOnErrorGuard&lt;/a&gt;&#160;in LockerImpl::lockComplete will clean up the state in the lock manger and in the locker on any failed lock attempts.&#160;Effectively when we hit the ReplicationStateTransitionLockGuard destructor, there is nothing to clean up for the above scenario.&lt;/p&gt;</description>
                <environment></environment>
        <key id="674891">SERVER-39092</key>
            <summary>ReplicationStateTransitionLockGuard should be resilient to exceptions thrown before waitForLockUntil()</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="13201">Fixed</resolution>
                                        <assignee username="suganthi.mani@mongodb.com">Suganthi Mani</assignee>
                                    <reporter username="suganthi.mani@mongodb.com">Suganthi Mani</reporter>
                        <labels>
                    </labels>
                <created>Fri, 18 Jan 2019 19:00:50 +0000</created>
                <updated>Sun, 29 Oct 2023 22:24:58 +0000</updated>
                            <resolved>Thu, 7 Mar 2019 05:50:38 +0000</resolved>
                                                    <fixVersion>4.1.9</fixVersion>
                                    <component>Replication</component>
                                        <votes>0</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="2173782" author="xgen-internal-githook" created="Thu, 7 Mar 2019 05:50:16 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Suganthi Mani&apos;, &apos;email&apos;: &apos;suganthi.mani@mongodb.com&apos;, &apos;username&apos;: &apos;smani87&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39092&quot; title=&quot;ReplicationStateTransitionLockGuard should be resilient to exceptions thrown before waitForLockUntil()&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39092&quot;&gt;&lt;del&gt;SERVER-39092&lt;/del&gt;&lt;/a&gt; ReplicationStateTransitionLockGuard should be resilient to exceptions thrown before waitForLockUntil().&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/91daf30b31e60048025162663ccb4f40cc24a837&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/91daf30b31e60048025162663ccb4f40cc24a837&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="2167792" author="suganthi.mani" created="Fri, 1 Mar 2019 19:25:00 +0000"  >&lt;p&gt;Spoke to &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=siyuan.zhou&quot; class=&quot;user-hover&quot; rel=&quot;siyuan.zhou&quot;&gt;siyuan.zhou&lt;/a&gt;, we still need to be resilient thrown between ReplicationStateTransitionLockGuard::_enqueueLock and&#160;ReplicationStateTransitionLockGuard::waitForLockUntil, so reopening the ticket.&lt;/p&gt;</comment>
                            <comment id="2166885" author="siyuan.zhou@10gen.com" created="Thu, 28 Feb 2019 23:30:50 +0000"  >&lt;p&gt;Talked with &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=xiangyu.yao&quot; class=&quot;user-hover&quot; rel=&quot;xiangyu.yao&quot;&gt;xiangyu.yao&lt;/a&gt;, I don&apos;t think his work fixed all the problem.&#160;&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39425&quot; title=&quot;Lock acquisition timeout should always throw rather than fail silently with LOCK_TIMEOUT result&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39425&quot;&gt;&lt;del&gt;SERVER-39425&lt;/del&gt;&lt;/a&gt; only fixed the case where the exception is thrown from &lt;tt&gt;lockRSTLComplete()&lt;/tt&gt;. However, it&apos;s possible that an exception is thrown &lt;b&gt;before&lt;/b&gt; calling into &lt;tt&gt;waitForLockUntil()&lt;/tt&gt;. &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=suganthi.mani&quot; class=&quot;user-hover&quot; rel=&quot;suganthi.mani&quot;&gt;suganthi.mani&lt;/a&gt;&apos;s proposal above seems fine to me.&lt;/p&gt;</comment>
                            <comment id="2166790" author="suganthi.mani" created="Thu, 28 Feb 2019 22:08:14 +0000"  >&lt;p&gt;This problem got fixed as a part of this ticket&#160;&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39425&quot; title=&quot;Lock acquisition timeout should always throw rather than fail silently with LOCK_TIMEOUT result&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39425&quot;&gt;&lt;del&gt;SERVER-39425&lt;/del&gt;&lt;/a&gt;. And, the solution used to fix the problem is to reset the ReplicationStateTransitionLockGuard:_result to &lt;a href=&quot;https://github.com/mongodb/mongo/blob/acddc7f35f0373ccb2e8fe9d45f42304b2b74f95/src/mongo/db/concurrency/replication_state_transition_lock_guard.cpp#L67-L69&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;LOCK_INVALID&lt;/a&gt;&#160;before calling lockRSTLComplete. So, there is nothing to do for this ticket.&lt;/p&gt;</comment>
                            <comment id="2130075" author="siyuan.zhou@10gen.com" created="Mon, 28 Jan 2019 23:52:53 +0000"  >&lt;p&gt;Discussed with Geert. Suganthi&apos;s suggestion sounds good to him. He will be happy to review the patch.&lt;/p&gt;</comment>
                            <comment id="2121188" author="siyuan.zhou@10gen.com" created="Sat, 19 Jan 2019 03:38:39 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=geert.bosch&quot; class=&quot;user-hover&quot; rel=&quot;geert.bosch&quot;&gt;geert.bosch&lt;/a&gt;, does &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=suganthi.mani&quot; class=&quot;user-hover&quot; rel=&quot;suganthi.mani&quot;&gt;suganthi.mani&lt;/a&gt;&apos;s suggestion to always call &lt;tt&gt;unlock()&lt;/tt&gt; sound good to you? It would be easier if we can call unlock blindly without calling &lt;tt&gt;lockComplete()&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;Alternatively, as we discussed last time, we could call lockComplete() with 0 timeout in the destructor. This also means we need an ON_EXIT_GUARD in &lt;tt&gt;waitForLockUntil()&lt;/tt&gt; to reset &lt;tt&gt;_result&lt;/tt&gt; if &lt;tt&gt;waitForLockUntil()&lt;/tt&gt; throws any exception. Is lockComplete() exception-free if it&apos;s called in destructor?&lt;/p&gt;

&lt;p&gt;As Suganthi mentioned, two concurrent stepdown may trigger this scenario, so we probably need to backport the change of GlobalLock to earlier versions.&lt;/p&gt;</comment>
                            <comment id="2120924" author="suganthi.mani" created="Fri, 18 Jan 2019 21:06:40 +0000"  >&lt;p&gt;My solution to this problem would be removing the below checks that we currently have in&#160;ReplicationStateTransitionLockGuard destructor before unlocking the rstl lock resource.&lt;/p&gt;

&lt;p&gt;1) The &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/replication_state_transition_lock_guard.cpp#L95&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;invariant check&lt;/a&gt;&#160;that checks &lt;em&gt;result for LOCK&lt;/em&gt;_WAITING.&lt;/p&gt;

&lt;p&gt;2)&#160; And, &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/replication_state_transition_lock_guard.cpp#L96&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;isLocked()&lt;/a&gt; check.&lt;/p&gt;

&lt;p&gt;So, ReplicationStateTransitionLockGuard::_unlock in the destructor would be just calling&#160;&lt;b&gt;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/replication_state_transition_lock_guard.cpp#L97&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;LockerImpl::unlock&lt;/a&gt;&lt;/b&gt;. LOCK_WAITING invariant was added to avoid any exceptions between lock enqueue and waitForLockUntil. I don&apos;t know why we want to prevent this. Even if there is any exception happened between the _enqueue() and waitForLockUntil(), the ReplicationStateTransitionLockGuard destructor will be called&#160; and now since check no: 2 is removed, we would call &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L487&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;LockerImpl::unlock&lt;/a&gt;&#160;which would internally calls &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L922&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;LockerImpl::_unlockImpl&lt;/a&gt;&#160;that would clean the lock state in the locker and in the global lock manger.&#160;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L487&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;LockerImpl::unlock&lt;/a&gt;&#160;would avoid calling&#160;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L922&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;LockerImpl::_unlockImpl&lt;/a&gt;&#160;only in case we run ReplicationStateTransitionLockGuard in a &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L494&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;WriteUnitOfWork&lt;/a&gt;. But, currently I don&apos;t think of a case where ReplicationStateTransitionLockGuard runs in a WriteUnitOfWork. If that&apos;s the case, we are safe. Otherwise, I feel, it can lead to some issue wrt to this counter &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L496&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;_numResourcesToUnlockAtEndUnitOfWork&lt;/a&gt;. So, it would be good to add this invariant in the&#160;ReplicationStateTransitionLockGuard constructor.&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;   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;&#160;invariant(!inAWriteUnitOfWork());&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;Also, we don&apos;t want to worry about the unlock called being multiple times( like scenarios mentioned in the description where &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L837-L853&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;unlockOnErrorGuard&lt;/a&gt;&#160; might have cleaned the lock state) as we already have a &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/lock_state.cpp#L491-L492&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;check that prevents us from unlocking multiple times&lt;/a&gt;.&#160;&lt;/p&gt;

&lt;p&gt;FYI, I know rstl lock guard is modeled after global lock. But, even &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fe187bdf22a6c67d5ff6f035d51a308870255e10/src/mongo/db/concurrency/d_concurrency.h#L221-L234&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;global lock destructor does not have check 1&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=siyuan.zhou&quot; class=&quot;user-hover&quot; rel=&quot;siyuan.zhou&quot;&gt;siyuan.zhou&lt;/a&gt; /&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=boschg%40mac.com&quot; class=&quot;user-hover&quot; rel=&quot;boschg@mac.com&quot;&gt;boschg@mac.com&lt;/a&gt;, let me know your thoughts.&lt;/p&gt;</comment>
                            <comment id="2120810" author="suganthi.mani" created="Fri, 18 Jan 2019 19:39:36 +0000"  >&lt;p&gt;It seems &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=samy.lanka&quot; class=&quot;user-hover&quot; rel=&quot;samy.lanka&quot;&gt;samy.lanka&lt;/a&gt;&#160;got a&#160;BF-11847&#160;imitating the above scenario.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                                                <inwardlinks description="is depended on by">
                                                        </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                            <outwardlinks description="duplicates">
                                        <issuelink>
            <issuekey id="685617">SERVER-39425</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>8.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18555" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname># of Sprints</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2.0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10011" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Backwards Compatibility</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10038"><![CDATA[Fully Compatible]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 18 Jan 2019 21:23:59 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        4 years, 48 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_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>luke.bonanomi@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            4 years, 48 weeks, 6 days ago
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_16465" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Linked BF Score</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>58.0</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>xgen-internal-githook</customfieldvalue>
            <customfieldvalue>siyuan.zhou@mongodb.com</customfieldvalue>
            <customfieldvalue>suganthi.mani@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hujq2n:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hu9nqn:</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="2784">Repl 2019-02-25</customfieldvalue>
    <customfieldvalue id="2822">Repl 2019-03-11</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|hujcbz:</customfieldvalue>

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