<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 06:20:24 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-71946] Async RPC expects all executor shutdown errors to be in the &quot;cancellation&quot; category, but those from ScopedTaskExecutor may not be</title>
                <link>https://jira.mongodb.org/browse/SERVER-71946</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;The async_rpc library should not expose any errors other than RemoteCommandExecutionError, with additional information contained in the ErrorExtraInfo for that type. However, executor shutdown can prevent earlier continuations that should correctly process the error from running, so at the API boundary we re-write such executor shutdown errors before exiting the library.&#160;&lt;/p&gt;

&lt;p&gt;Because we rely on the internals of the library to append correct information to the EEI for non-executor-shutdown errors, we try to expect (in debug mode) that all errors recieved at this boundary are either RemoteCommandExecutionError, or executor shutdown errors. We best-effort check if an error is an executor-shutdown error by checking if it&apos;s in the Cancellation error category.&#160;&lt;/p&gt;

&lt;p&gt;However, ScopedTaskExecutor can use arbitrary error codes to reject work at shutdown, so it violates the assumption that &quot;executor shutdown errors are in the Cancellation category.&quot; One is example is it uses the (non-cancellation) InterruptedDueToReplStateChange when it is used in PrimaryOnlyService.&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;To fix this, we should consider either relaxing or removing the async_rpc expectation on executor-shutdown errors, or add InterruptedDueToReplStateChange to the &quot;cancellation&quot; error category and ensure future error codes used for ScopedTaskExecutorShutdown are in this category as well.&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="2205463">SERVER-71946</key>
            <summary>Async RPC expects all executor shutdown errors to be in the &quot;cancellation&quot; category, but those from ScopedTaskExecutor may not be</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="alex.li@mongodb.com">Alex Li</assignee>
                                    <reporter username="george.wangensteen@mongodb.com">George Wangensteen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 7 Dec 2022 21:16:17 +0000</created>
                <updated>Sun, 29 Oct 2023 21:29:32 +0000</updated>
                            <resolved>Fri, 3 Feb 2023 19:20:08 +0000</resolved>
                                                    <fixVersion>6.3.0-rc0</fixVersion>
                                                        <votes>0</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="5165006" author="xgen-internal-githook" created="Fri, 3 Feb 2023 08:55:36 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;Alex Li&apos;, &apos;email&apos;: &apos;alex.li@mongodb.com&apos;, &apos;username&apos;: &apos;lia394126&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-71946&quot; title=&quot;Async RPC expects all executor shutdown errors to be in the &amp;quot;cancellation&amp;quot; category, but those from ScopedTaskExecutor may not be&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-71946&quot;&gt;&lt;del&gt;SERVER-71946&lt;/del&gt;&lt;/a&gt; Add InterruptedDueToReplStateChange to the &quot;cancellation&quot; error category&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/f41bd0ce530ab890613c2f9b8760f9959c4055d3&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/f41bd0ce530ab890613c2f9b8760f9959c4055d3&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5156363" author="JIRAUSER1260427" created="Tue, 31 Jan 2023 21:14:09 +0000"  >&lt;p&gt;Changed kExecutorShutdownStatus (code &lt;a href=&quot;https://github.com/10gen/mongo/blob/451eb6b2a5c77b664db74ca966b9bf9706490e6b/src/mongo/db/repl/primary_only_service.cpp#L75&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;here&lt;/a&gt;) inside PrimaryOnlyService from InterruptedDueToReplStateChange to CallbackCanceled in order to &lt;a href=&quot;https://github.com/10gen/mongo/blob/fb5b99865843482a181993d761d9cf176848000b/src/mongo/executor/async_rpc.h#L287&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;pass an assertion placed in async_rpc::sendCommand&lt;/a&gt; that guarantees all non RemoteCommandExecutionErrors are CancellationErrors.&lt;/p&gt;

&lt;p&gt;An invariant was also placed on ScopedTaskExecutor to enforce CancellationError on shutdown.&lt;/p&gt;

&lt;p&gt;The change is supported by the fact that the current usage of InterruptedDueToReplStateChange in PrimaryOnlyService violates the OutOfLineExecutor::schedule contract that &lt;a href=&quot;#L104-L118&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;non OK statuses must be cancellation errors&lt;/a&gt;. Also, the kExecutorShutdownStatus change should not introduce any problems, because no PrimaryOnlyService can reliably predict whether it would get CallbackCanceled or InterruptedDueToReplStateChange at executor shutdown, so support for CallbackCanceled should already be in place.&lt;/p&gt;</comment>
                            <comment id="5119364" author="max.hirschhorn@10gen.com" created="Wed, 18 Jan 2023 00:05:29 +0000"  >&lt;p&gt;I like Alex&apos;s proposed change to ScopedTaskExecutor to verify the supplied &lt;tt&gt;shutdownStatus&lt;/tt&gt; is in the CancellationError category. The usage of InterruptedDueToReplStateChange by &lt;tt&gt;kExecutorShutdownStatus&lt;/tt&gt; in primary&amp;#95;only&amp;#95;service.cpp is currently a violation of &lt;a href=&quot;https://github.com/mongodb/mongo/blob/a2f874c89bbcc4944620863039aad27a58dd28a6/src/mongo/util/out_of_line_executor.h#L104-L118&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;the TaskExecutor::schedule() interface contract&lt;/a&gt;.&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;   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;* The Task will be passed a Status schedStatus that is either:&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&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;   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;* * schedStatus.isOK() &lt;/span&gt;&lt;span style=&quot;color: #006699; font-weight: bold; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;if&lt;/span&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; the function is run in an out-of-line context&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&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-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;* * isCancellationError(schedStatus.code()) &lt;/span&gt;&lt;span style=&quot;color: #006699; font-weight: bold; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;if&lt;/span&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; the function is run in an &lt;/span&gt;&lt;span style=&quot;color: #006699; font-weight: bold; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;inline&lt;/span&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; context&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;I also buy into, from TaskExecutor::schedule()&apos;s perspective, any error code is safe to add to the CancellationError category because the interface is about OK versus non&amp;#45;OK Statuses. (Interestingly, &lt;a href=&quot;https://github.com/mongodb/mongo/blob/a2f874c89bbcc4944620863039aad27a58dd28a6/src/mongo/db/s/shard_server_catalog_cache_loader.cpp#L980&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;ShardServerCatalogCacheLoader actually bothers to care a non-OK Status is in the CancellationError category&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;What I would be nervous about for growing the definition of the CancellationError category is ExecutorFutures mask the origin of the error for whether it came from TaskExecutor::schedule() or the callback itself. A relatively small number of commands internally run work on executors where an error Status in the CancellationError category has tended to be a &quot;local error&quot; and other errors are &quot;remote errors&quot;. This naturally isn&apos;t a precise definition but I worry about changes to that assumption.&lt;/p&gt;

&lt;p&gt;Given that PrimaryOnlyServices rely on CancellationToken and &lt;a href=&quot;https://github.com/mongodb/mongo/blob/fc086c8e3e28ababe2ef7eea6e3bb4f53a720c85/src/mongo/util/future_util.h#L782-L788&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;future&amp;#95;util::withCancellation() always uses CallbackCanceled&lt;/a&gt;, I claim no PrimaryOnlyService can reliably predict whether it would get CallbackCanceled or InterruptedDueToReplStateChange at executor shutdown. And that any robust service communicating with another server must retry on both errors to learn the definitive result (e.g. &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-55053&quot; title=&quot;Treat CallbackCanceled as a retryable error in TenantMigrationRecipientService&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-55053&quot;&gt;&lt;del&gt;SERVER-55053&lt;/del&gt;&lt;/a&gt;). What do you think about changing &lt;tt&gt;kExecutorShutdownStatus&lt;/tt&gt; to use CallbackCanceled to bring the usage ScopedTaskExecutor in alignment with the TaskExecutor::schedule() interface? (This probably needs confirmation from authors of PrimaryOnlyServices but feels more tractable to me than changing the Status type.)&lt;/p&gt;</comment>
                            <comment id="5112974" author="george.wangensteen" created="Fri, 13 Jan 2023 20:30:08 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=alex.li%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;alex.li@mongodb.com&quot;&gt;alex.li@mongodb.com&lt;/a&gt;&#160; and I spoke about this a bit today. &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=max.hirschhorn%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;max.hirschhorn@mongodb.com&quot;&gt;max.hirschhorn@mongodb.com&lt;/a&gt;&#160; , if I understand your concern correctly, you&apos;re worried that:&#160;&lt;/p&gt;

&lt;p&gt;-&amp;gt; We will add errors to the Cancellation category because it suits our needs here (and others may do so in the future)&lt;/p&gt;

&lt;p&gt;-&amp;gt; These changes may violate others&apos; expectations for what error codes can be used to mark cancellation/what the ErrorCategory::CancellationError means&lt;/p&gt;

&lt;p&gt;-&amp;gt; As a result, new or existing code based on those expectations will break - just as we saw bugs arise when people&apos;s/code&apos;s expectations for ErrorCategory::Interruption did not meet what codes were in the category after people (over time) added codes to the category to fix bugs, leading to &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-56251&quot; title=&quot;Alleviate problems that arise when OperationContext::markKilled is called with a non-Interruption error&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-56251&quot;&gt;SERVER-56251&lt;/a&gt;.&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;For context, the assertion that&apos;s failing here is meant to check that an error is originating from executor shutdown. The reason for this assertion is that we expect the API to re-write other errors into a particular code as appropriate; if that re-writing is unable to happen, it must because the executor refused to run the code that does the re-writing. We want to make sure that only executor-shutdown errors reach this point without being re-written; otherwise, we risk erroneously rewriting other errors here after we have potentially lost some context about them, when we should have done that rewriting earlier. I used &quot;CancellationError&quot; because I thought (based on comments in taskexecutor and others) that all executor-shutdown errors were cancellation error.&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;I think the concern about bloating CancellationError probably outweighs the risk of doing lossy rewriting of other errors due to some bug where those errors are escaping. So I think I&apos;d vote to just remove the assertion, accept that we can&apos;t currently tell if an error is an executor-shutdown error, and maybe file a ticket to create a new category of &quot;ExecutorShutdownError&quot; and add a TODO to the code. But some other options would be to:&#160;&lt;/p&gt;

&lt;p&gt;-&amp;gt; Accept that InterruptedDueToReplStateChange effectively is a cancellation error because it&apos;s used to cancel work; ensure other errors used by ScopedTaskExecutor in the future are already in this category, and add InterruptedDueToReplStateChange to the CancellationCategory (essentially Alex&apos; patch. My one concern here would be is there an issue with mixing Cancellation and Retryable errors ?)&#160;&lt;/p&gt;

&lt;p&gt;-&amp;gt; Add a special case to the assert saying InterruptedDueToReplStateChange is allowed because of ScopedTaskExecutor. This makes the BF go away, leaves the error category alone, but makes the code less obvious and potentially increases the maintenance burden very marginally (if people add new STE with custom shutdown codes and use them with this API, those codes will need to be special cased as well).&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=max.hirschhorn%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;max.hirschhorn@mongodb.com&quot;&gt;max.hirschhorn@mongodb.com&lt;/a&gt; , can you confirm I understood you correctly? Which of these solutions sounds the least concerning to you given that vs. the other concerns? Thanks for bringing this up!&#160;&#160;&lt;/p&gt;</comment>
                            <comment id="5108983" author="max.hirschhorn@10gen.com" created="Thu, 12 Jan 2023 14:29:55 +0000"  >&lt;p&gt;Are we at risk of ErrorCategory::CancellationError being like ErrorCategory::Interruption (&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-56251&quot; title=&quot;Alleviate problems that arise when OperationContext::markKilled is called with a non-Interruption error&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-56251&quot;&gt;SERVER-56251&lt;/a&gt;, &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-69496&quot; title=&quot;InterruptedAtShutdown can be thrown without the operation context being marked as killed&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-69496&quot;&gt;&lt;del&gt;SERVER-69496&lt;/del&gt;&lt;/a&gt;) or are there truly a limited set of error codes which can be used to mark cancellation?&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                                                <inwardlinks description="is depended on by">
                                                        </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_18555" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname># of Sprints</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4.0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_12751" key="com.atlassian.jira.plugin.system.customfieldtypes:multiselect">
                        <customfieldname>Assigned Teams</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="25132"><![CDATA[Service Arch]]></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>Thu, 12 Jan 2023 14:19:46 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        1 year, 5 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_17050" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Downstream Team Attention</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="16941"><![CDATA[Not Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_10857" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>PM-2399</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>luke.bonanomi@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            1 year, 5 days ago
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_16465" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Linked BF Score</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>10.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>alex.li@mongodb.com</customfieldvalue>
            <customfieldvalue>george.wangensteen@mongodb.com</customfieldvalue>
            <customfieldvalue>xgen-internal-githook</customfieldvalue>
            <customfieldvalue>max.hirschhorn@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i1lvu7:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|i14ggw:</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_22250" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Special Downgrade Instructions Required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="23343"><![CDATA[Not Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10557" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="6160">Service Arch 2022-12-26</customfieldvalue>
    <customfieldvalue id="6747">Service Arch 2023-01-09</customfieldvalue>
    <customfieldvalue id="6748">Service Arch 2023-01-23</customfieldvalue>
    <customfieldvalue id="6749">Service Arch 2023-02-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|i1lhzj:</customfieldvalue>

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