<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 04:50:10 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-38828] Replace uses of UninterruptibleLockGuard and MODE_X collection locks with uses of the CSRLock and MODE_IX collection locks where necessary.</title>
                <link>https://jira.mongodb.org/browse/SERVER-38828</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;Access to CollectionShardingRuntime state can be safeguarded by blocking on access to the mutex added to the CollectionShardingRuntime. This mutex is accessed by taking the new CSRLock. This will unblock these uses of the UninterruptibleLockGuard.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/collection_sharding_runtime.cpp#L190&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/collection_sharding_runtime.cpp#L190&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_destination_manager.cpp#L1150&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_destination_manager.cpp#L1150&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L444&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L444&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L480&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L480&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L679&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L679&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Functions that will now be protected by the CSRLock:&lt;/p&gt;

&lt;p&gt;CSS::enterCriticalSectionCatchUpPhase (Collection X Lock, CSR X Lock) &lt;br/&gt;
CSS::enterCriticalSectionCommitPhase (Collection X Lock, CSR X Lock)&lt;br/&gt;
CSS::exitCriticalSection (Collection &lt;del&gt;X&lt;/del&gt; &lt;b&gt;IX&lt;/b&gt; Lock, CSR X Lock)&lt;br/&gt;
CSS::getCurrentMetadataIfKnown (Collection &lt;del&gt;X&lt;/del&gt; &lt;b&gt;IS or IX&lt;/b&gt; Lock?, CSR IS Lock)* &lt;em&gt;Need further clarification on the collection locks necessary to be used here. Multiple cases use either IX or IS.&lt;/em&gt;&lt;br/&gt;
CSR::setFilteringMetadata (Collection X Lock, CSR X Lock)&lt;br/&gt;
CSR::clearFilteringMetadata (Collection &lt;del&gt;X&lt;/del&gt; &lt;b&gt;IX&lt;/b&gt; Lock, CSR X Lock)&lt;br/&gt;
CollectionCriticalSection::constructor (Collection X Lock, CSR X Lock)&lt;br/&gt;
CollectionCriticalSection::destructor (Collection &lt;del&gt;X&lt;/del&gt; &lt;b&gt;IX&lt;/b&gt; Lock, CSR X Lock)&lt;br/&gt;
CollectionCriticalSection::enterCommitPhase (Collection X Lock, CSR X Lock)&lt;/p&gt;

&lt;p&gt;*An exception will be made with a ..._withoutLock function for &lt;a href=&quot;https://github.com/mongodb/mongo/blob/6a0a21214dd96663c899cb8f2562d6121351ed3c/src/mongo/db/s/collection_sharding_state.cpp#L69-L85&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;CSS::CSSMap::report&lt;/a&gt;, because we already hold the CSSMap mutex here, and don&apos;t want to take collection locks for the general reporting of the state of the CSSMap.&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;Update1%2F22%2F18&quot;&gt;&lt;/a&gt;&lt;b&gt;Update 1/22/18&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;After discussion with &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=kaloian.manassiev&quot; class=&quot;user-hover&quot; rel=&quot;kaloian.manassiev&quot;&gt;kaloian.manassiev&lt;/a&gt; and &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; we have decided to back out of some of the intended changes. Since the CollectionShardingRuntime&apos;s &lt;tt&gt;_metadataManager&lt;/tt&gt; variable has an internal mutex, we do not need to take the CSRLock in cases where we are only interacting with that variable. We can simply downgrade the collection lock to MODE_IX in these cases. This includes:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mongodb/mongo/blob/037e88ee7332de0cefff7e6e4bfadfbdc90a4ac1/src/mongo/db/s/migration_destination_manager.cpp#L1205-L1218&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;MigrationDestinationManager::_forgetPending&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L445-L455&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;MigrationSourceManager::commitChunkMetadataOnConfig error handling section 1&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L481-L497&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;MigrationSourceManager::commitChunkMetadataOnConfig error handling section 2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;a href=&quot;https://github.com/mongodb/mongo/blob/dcf7e0dd89d34f58b592f1adb3d41e5edd6e2012/src/mongo/db/s/migration_source_manager.cpp#L680-L696&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;MigrationSourceManager::cleanup&lt;/a&gt; we will take the collection IX lock, and take the CSRLock in exclusive mode to protect changes to state variables (&lt;tt&gt;MigrationSourceManager&lt;/tt&gt;, &lt;tt&gt;CriticalSection&lt;/tt&gt;) on the CollectionShardingRuntime.&lt;/p&gt;

&lt;p&gt;We will still need to modify function signatures around the critical section to offer synchronization with modification of the critical section. These changes still apply:&lt;/p&gt;

&lt;p&gt;CSS::enterCriticalSectionCatchUpPhase (Collection X Lock, CSR X Lock) &lt;br/&gt;
CSS::enterCriticalSectionCommitPhase (Collection X Lock, CSR X Lock)&lt;br/&gt;
CSS::exitCriticalSection (Collection &lt;del&gt;X&lt;/del&gt; &lt;b&gt;IX&lt;/b&gt; Lock, CSR X Lock)&lt;br/&gt;
CollectionCriticalSection::constructor (Collection X Lock, CSR X Lock)&lt;br/&gt;
CollectionCriticalSection::destructor (Collection &lt;del&gt;X&lt;/del&gt; &lt;b&gt;IX&lt;/b&gt; Lock, CSR X Lock)&lt;br/&gt;
CollectionCriticalSection::enterCommitPhase (Collection X Lock, CSR X Lock)&lt;/p&gt;

&lt;p&gt;as well as a CSRLock in MODE_IS in a section in &lt;a href=&quot;https://github.com/mongodb/mongo/blob/037e88ee7332de0cefff7e6e4bfadfbdc90a4ac1/src/mongo/db/s/collection_sharding_state.cpp#L210&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;CollectionShardingState::checkShardVersionOrThrow&lt;/a&gt; where we check the state of the critical section variable. &lt;/p&gt;
</description>
                <environment></environment>
        <key id="665077">SERVER-38828</key>
            <summary>Replace uses of UninterruptibleLockGuard and MODE_X collection locks with uses of the CSRLock and MODE_IX collection locks where necessary.</summary>
                <type id="3" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14718&amp;avatarType=issuetype">Task</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="blake.oler@mongodb.com">Blake Oler</assignee>
                                    <reporter username="blake.oler@mongodb.com">Blake Oler</reporter>
                        <labels>
                            <label>prepare_interruptibility</label>
                            <label>uninterruptibleLockGuardRemoval</label>
                    </labels>
                <created>Thu, 3 Jan 2019 20:48:55 +0000</created>
                <updated>Sun, 29 Oct 2023 22:25:23 +0000</updated>
                            <resolved>Thu, 21 Feb 2019 15:50:34 +0000</resolved>
                                    <version>4.1.6</version>
                                    <fixVersion>4.1.9</fixVersion>
                                    <component>Sharding</component>
                                        <votes>0</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="2159857" author="xgen-internal-githook" created="Fri, 22 Feb 2019 16:27:22 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Blake Oler&apos;, &apos;username&apos;: &apos;BlakeIsBlake&apos;, &apos;email&apos;: &apos;blake.oler@mongodb.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-38828&quot; title=&quot;Replace uses of UninterruptibleLockGuard and MODE_X collection locks with uses of the CSRLock and MODE_IX collection locks where necessary.&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-38828&quot;&gt;&lt;del&gt;SERVER-38828&lt;/del&gt;&lt;/a&gt; Use condition_variable::wait with a predicate to safeguard against spurious wakeups&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/5c25d74c596fcba4a3dee6a6f4294718bbd1cbd6&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/5c25d74c596fcba4a3dee6a6f4294718bbd1cbd6&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="2158461" author="xgen-internal-githook" created="Thu, 21 Feb 2019 15:48:00 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Blake Oler&apos;, &apos;email&apos;: &apos;blake.oler@mongodb.com&apos;, &apos;username&apos;: &apos;BlakeIsBlake&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-38828&quot; title=&quot;Replace uses of UninterruptibleLockGuard and MODE_X collection locks with uses of the CSRLock and MODE_IX collection locks where necessary.&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-38828&quot;&gt;&lt;del&gt;SERVER-38828&lt;/del&gt;&lt;/a&gt; Introduce CollectionShardingRuntimeLock usage to collection critical sections.&lt;/p&gt;

&lt;p&gt;Allows us to reduce MODE_X collection locks to MODE_IX when under UninterruptibleLockGuards&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/5cbcc18f3c1f100deb7124d3d665901e473134b1&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/5cbcc18f3c1f100deb7124d3d665901e473134b1&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="2140975" author="blake.oler" created="Thu, 7 Feb 2019 14:52:57 +0000"  >&lt;p&gt;After discussion with &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=kaloian.manassiev&quot; class=&quot;user-hover&quot; rel=&quot;kaloian.manassiev&quot;&gt;kaloian.manassiev&lt;/a&gt; and &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; offline, we have decided the following:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Use a counter to track the outstanding onCommit handlers in the chunk cloner.&lt;/li&gt;
	&lt;li&gt;Wait on a condition variable in the chunk cloner&apos;s destructor (or in a separate &lt;tt&gt;drain()&lt;/tt&gt; method) so that we will block on the completion of commit handlers before we remove the cloner&apos;s memory.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Doing this will allow us to avoid using the CSRLock inside the cloner, which would be a layer violation.&lt;/p&gt;</comment>
                            <comment id="2140463" author="kaloian.manassiev" created="Wed, 6 Feb 2019 22:51:42 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=blake.oler&quot; class=&quot;user-hover&quot; rel=&quot;blake.oler&quot;&gt;blake.oler&lt;/a&gt;, does this problem only occur in cases where the migration chunk cloner source is being uninstalled due to error? (i.e., the migration never entered the critical section). What I want to make sure is that upon leaving of the critical section there are never &lt;tt&gt;onCommit&lt;/tt&gt; handlers registered, because that would imply there is a bug where we missed document changes &lt;b&gt;or&lt;/b&gt; we are registering onCommit handlers for updates not just for the chunk being moved.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;If we add use of the CSRLock to the onCommit callback handlers as well ...&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Does this mean that the migration chunk cloner source would know about the CSR lock? Because I think this is kind of a layering violation.&lt;/p&gt;

&lt;p&gt;How about adding a &lt;tt&gt;drain()&lt;/tt&gt; method to the cloner (or even to its destructor) to ensure that all registered &lt;tt&gt;onCommit&lt;/tt&gt; handlers have completed instead?&lt;/p&gt;</comment>
                            <comment id="2135930" author="blake.oler" created="Sat, 2 Feb 2019 19:54:58 +0000"  >&lt;h2&gt;&lt;a name=&quot;Discovery&quot;&gt;&lt;/a&gt;Discovery&lt;/h2&gt;

&lt;p&gt;After discussion with &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;, we discovered that a race condition exists (found in BF-11995 and the reason for the previous reversion).&lt;/p&gt;
&lt;h3&gt;&lt;a name=&quot;ProblemExplanation&quot;&gt;&lt;/a&gt;Problem Explanation&lt;/h3&gt;

&lt;p&gt;When we run a migration, we install a chunk cloner object on the source shard (in the &lt;tt&gt;MigrationSourceManager&lt;/tt&gt;). This object will listen for and queue up any operations to be done to the collection while it&apos;s migrating. As part of this process, when writes/updates/deletes are observed, a callback is registered on the &lt;tt&gt;RecoveryUnit&lt;/tt&gt;&apos;s commit handler. When the &lt;tt&gt;RecoveryUnit&lt;/tt&gt; registers commit, it will call into the chunk cloner to add said operation to the list of queued operations. In this callback, the &lt;tt&gt;RecoveryUnit&lt;/tt&gt; is handed a raw pointer to the chunk cloner object.&lt;/p&gt;

&lt;p&gt;This previous process was fine before the changes in this ticket. However, in this ticket, we changed the collection locking from X to IX when removing the chunk cloner object from the source shard&apos;s &lt;tt&gt;MigrationSourceManager&lt;/tt&gt;. The exclusive lock would previously imply that we wait for all onCommit callback handlers to be called before removing the chunk cloner. The onCommit callback handlers take a lock on the collection, thus requiring the exclusive lock request to wait for all other users of the lock to finish before uninstalling the chunk cloner. With the change to the IX lock, it is possible to uninstall the chunk cloner before some onCommit callback handlers have run. In that case, it implies that the callback handler will have a stale (read: no longer existing) chunk cloner pointer.&lt;/p&gt;
&lt;h3&gt;&lt;a name=&quot;Solution&quot;&gt;&lt;/a&gt;Solution&lt;/h3&gt;

&lt;p&gt;As part of this ticket, we add more fine-grained synchronization with the CollectionShardingRuntimeLock (CSRLock). When we are uninstalling the chunk cloner, we require the CSRLock to be taken in exclusive mode. If we add use of the CSRLock to the onCommit callback handlers as well, we can prevent any memory issues. We can change the process to create two possible scenarios. New behavior will be marked in bold.&lt;/p&gt;

&lt;p&gt;Scenario One:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;The chunk cloner object still exists.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;An onCommit callback takes the CSRLock in intent shared mode&lt;/b&gt;.&lt;/li&gt;
	&lt;li&gt;The &lt;tt&gt;MigrationSourceManager&lt;/tt&gt; attempts to uninstall the chunk cloner. Because it needs the CSRLock in exclusive mode, it must wait for the onCommit callback to complete.&lt;/li&gt;
	&lt;li&gt;The onCommit callback &lt;b&gt;checks if the chunk cloner still exists&lt;/b&gt; (it does) and calls into the cloner to observe the operation. The onCommit callback completes.&lt;/li&gt;
	&lt;li&gt;The &lt;tt&gt;MigrationSourceManager&lt;/tt&gt; takes the CSRLock in exclusive mode and successfully uninstalls the chunk cloner.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Scenario Two:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;The chunk cloner object has been removed.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;An onCommit callback takes the CSRLock in intent shared mode&lt;/b&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;The onCommit callback sees that the chunk cloner does not exist, and backs out of the operation.&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;One might question the validity of backing out of observing an operation because the chunk cloner has been removed. However, this is perfectly fine for our use case. The scenario where the chunk cloner can be removed while writes are still coming into the collection is a scenario only ever found during error. In a successful migration, the &lt;tt&gt;MigrationSourceManager&lt;/tt&gt; will wait for the exclusive lock in order to enter the critical section, ensuring all previous writes are seen and preventing new writes from entering that collection. If we are cleaning up in-memory variables due to an error during cloning, we don&apos;t care if we miss observing writes. If the migration has been cancelled, these writes still exist on the original shard.&lt;/p&gt;
&lt;h3&gt;&lt;a name=&quot;NewDependencies&quot;&gt;&lt;/a&gt;New Dependencies&lt;/h3&gt;

&lt;p&gt;Introducing this new area of locking gives us a new dependency. We will now need to pass the &lt;tt&gt;opCtx&lt;/tt&gt; to the onCommit callback handlers. This is so the callbacks can access the &lt;tt&gt;CollectionShardingRuntime&lt;/tt&gt; and the corresponding CSRLock. This creates issues during multi-document transaction writes. The &lt;tt&gt;opCtx&lt;/tt&gt; variables during a given CRUD statement and then during commit will be different &lt;tt&gt;opCtx&#160;}}es completely &#8211; the former {{opCtx&lt;/tt&gt; es will go out of scope before the onCommit callback can be run. As such, we need to pass in only the transaction-commit-time &lt;tt&gt;opCtx&lt;/tt&gt;. This requires us to wait for &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39021&quot; title=&quot;Switch migrations to observe multi-statement transaction CRUD statements onCommit instead of onCRUD&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39021&quot;&gt;&lt;del&gt;SERVER-39021&lt;/del&gt;&lt;/a&gt; to go in. With &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-39021&quot; title=&quot;Switch migrations to observe multi-statement transaction CRUD statements onCommit instead of onCRUD&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-39021&quot;&gt;&lt;del&gt;SERVER-39021&lt;/del&gt;&lt;/a&gt;, we will be able to observe transactions, and pass in &lt;tt&gt;opCtx&lt;/tt&gt; es, at transaction commit time instead of CRUD operation time.&lt;/p&gt;</comment>
                            <comment id="2133821" author="xgen-internal-githook" created="Thu, 31 Jan 2019 19:37:32 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Blake Oler&apos;, &apos;email&apos;: &apos;blake.oler@mongodb.com&apos;, &apos;username&apos;: &apos;BlakeIsBlake&apos;}
&lt;p&gt;Message: Revert &quot;&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-38828&quot; title=&quot;Replace uses of UninterruptibleLockGuard and MODE_X collection locks with uses of the CSRLock and MODE_IX collection locks where necessary.&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-38828&quot;&gt;&lt;del&gt;SERVER-38828&lt;/del&gt;&lt;/a&gt; Introduce CollectionShardingRuntimeLock usage to collection critical sections.&quot;&lt;/p&gt;

&lt;p&gt;This reverts commit c2fb213da54e20a87a96816449e070623bdafe61.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/c15a40aa4eaee67e060ac63256998232deb97c38&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/c15a40aa4eaee67e060ac63256998232deb97c38&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="2133009" author="thomas.schubert" created="Thu, 31 Jan 2019 06:39:51 +0000"  >&lt;p&gt;Original fix:&lt;/p&gt;

&lt;p&gt;Author:&lt;/p&gt;
{&apos;username&apos;: &apos;BlakeIsBlake&apos;, &apos;email&apos;: &apos;blake.oler@mongodb.com&apos;, &apos;name&apos;: &apos;Blake Oler&apos;}

&lt;p&gt;Message: Introduce CollectionShardingRuntimeLock usage to collection critical sections.&lt;/p&gt;

&lt;p&gt;Allows us to reduce MODE_X collection locks to MODE_IX when under&lt;br/&gt;
UninterruptibleLockGuards.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/c2fb213da54e20a87a96816449e070623bdafe61&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/c2fb213da54e20a87a96816449e070623bdafe61&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="2132916" author="xgen-internal-githook" created="Thu, 31 Jan 2019 02:24:54 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;username&apos;: &apos;benety&apos;, &apos;email&apos;: &apos;benety@mongodb.com&apos;, &apos;name&apos;: &apos;Benety Goh&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-38828&quot; title=&quot;Replace uses of UninterruptibleLockGuard and MODE_X collection locks with uses of the CSRLock and MODE_IX collection locks where necessary.&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-38828&quot;&gt;&lt;del&gt;SERVER-38828&lt;/del&gt;&lt;/a&gt; fix lint&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/d3e18b2aa9105c2bba0f70f2fa4d446d63965ea2&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/d3e18b2aa9105c2bba0f70f2fa4d446d63965ea2&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="2107241" author="blake.oler" created="Mon, 7 Jan 2019 16:12:38 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=kaloian.manassiev&quot; class=&quot;user-hover&quot; rel=&quot;kaloian.manassiev&quot;&gt;kaloian.manassiev&lt;/a&gt; outlined planned functions to safeguard with the CSRLock in this ticket. LGTY?&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                            <outwardlinks description="depends on">
                                        <issuelink>
            <issuekey id="672920">SERVER-39021</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="504146">SERVER-33577</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                                        </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9.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_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>Tue, 22 Jan 2019 20:43:42 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        4 years, 50 weeks, 5 days ago
    
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18254" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Dependencies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[<s><a href='https://jira.mongodb.org/browse/SERVER-39021'>SERVER-39021</a></s>]]></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-1317</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>
                            4 years, 50 weeks, 5 days ago
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_16465" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Linked BF Score</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>blake.oler@mongodb.com</customfieldvalue>
            <customfieldvalue>xgen-internal-githook</customfieldvalue>
            <customfieldvalue>kaloian.manassiev@mongodb.com</customfieldvalue>
            <customfieldvalue>kelsey.schubert@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hui46v:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hu5onb:</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="2725">Sharding 2019-01-14</customfieldvalue>
    <customfieldvalue id="2726">Sharding 2019-01-28</customfieldvalue>
    <customfieldvalue id="2786">Sharding 2019-02-11</customfieldvalue>
    <customfieldvalue id="2787">Sharding 2019-02-25</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|huhqg7:</customfieldvalue>

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