mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 01:21:03 +01:00
SERVER-34791 Free Mon Fix locking
This commit is contained in:
parent
c0d6b410b1
commit
004183f093
@ -137,7 +137,7 @@ class FreeMonWebServer {
|
||||
assert.soon(function() {
|
||||
const stats = qs();
|
||||
print("QS : " + tojson(stats));
|
||||
return stats.registers == count;
|
||||
return stats.registers >= count;
|
||||
}, "Failed to web server register", 60 * 1000);
|
||||
}
|
||||
|
||||
@ -152,7 +152,7 @@ class FreeMonWebServer {
|
||||
assert.soon(function() {
|
||||
const stats = qs();
|
||||
print("QS : " + tojson(stats));
|
||||
return stats.metrics == count;
|
||||
return stats.metrics >= count;
|
||||
}, "Failed to web server metrics", 60 * 1000);
|
||||
}
|
||||
}
|
||||
|
@ -32,8 +32,7 @@
|
||||
#include "mongo/base/string_data.h"
|
||||
#include "mongo/bson/bsonelement.h"
|
||||
#include "mongo/bson/bsonmisc.h"
|
||||
#include "mongo/db/concurrency/d_concurrency.h"
|
||||
#include "mongo/db/concurrency/lock_manager_defs.h"
|
||||
#include "mongo/db/db_raii.h"
|
||||
#include "mongo/db/namespace_string.h"
|
||||
#include "mongo/db/operation_context.h"
|
||||
#include "mongo/db/repl/replication_coordinator.h"
|
||||
@ -57,9 +56,7 @@ boost::optional<FreeMonStorageState> FreeMonStorage::read(OperationContext* opCt
|
||||
|
||||
auto storageInterface = repl::StorageInterface::get(opCtx);
|
||||
|
||||
Lock::DBLock dblk(opCtx, NamespaceString::kServerConfigurationNamespace.db(), MODE_IS);
|
||||
Lock::CollectionLock lk(
|
||||
opCtx->lockState(), NamespaceString::kServerConfigurationNamespace.ns(), MODE_IS);
|
||||
AutoGetCollectionForRead autoRead(opCtx, NamespaceString::kServerConfigurationNamespace);
|
||||
|
||||
auto swObj = storageInterface->findById(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace, elementKey);
|
||||
@ -82,18 +79,14 @@ void FreeMonStorage::replace(OperationContext* opCtx, const FreeMonStorageState&
|
||||
BSONObj obj = doc.toBSON();
|
||||
|
||||
auto storageInterface = repl::StorageInterface::get(opCtx);
|
||||
{
|
||||
Lock::DBLock dblk(opCtx, NamespaceString::kServerConfigurationNamespace.db(), MODE_IS);
|
||||
Lock::CollectionLock lk(
|
||||
opCtx->lockState(), NamespaceString::kServerConfigurationNamespace.ns(), MODE_IS);
|
||||
AutoGetCollection autoWrite(opCtx, NamespaceString::kServerConfigurationNamespace, MODE_IX);
|
||||
|
||||
if (repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace)) {
|
||||
auto swObj = storageInterface->upsertById(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace, elementKey, obj);
|
||||
if (!swObj.isOK()) {
|
||||
uassertStatusOK(swObj);
|
||||
}
|
||||
if (repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace)) {
|
||||
auto swObj = storageInterface->upsertById(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace, elementKey, obj);
|
||||
if (!swObj.isOK()) {
|
||||
uassertStatusOK(swObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -103,24 +96,20 @@ void FreeMonStorage::deleteState(OperationContext* opCtx) {
|
||||
BSONElement elementKey = deleteKey.firstElement();
|
||||
|
||||
auto storageInterface = repl::StorageInterface::get(opCtx);
|
||||
{
|
||||
Lock::DBLock dblk(opCtx, NamespaceString::kServerConfigurationNamespace.db(), MODE_IS);
|
||||
Lock::CollectionLock lk(
|
||||
opCtx->lockState(), NamespaceString::kServerConfigurationNamespace.ns(), MODE_IS);
|
||||
AutoGetCollection autoWrite(opCtx, NamespaceString::kServerConfigurationNamespace, MODE_IX);
|
||||
|
||||
if (repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace)) {
|
||||
if (repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace)) {
|
||||
|
||||
auto swObj = storageInterface->deleteById(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace, elementKey);
|
||||
if (!swObj.isOK()) {
|
||||
// Ignore errors about no document
|
||||
if (swObj.getStatus() == ErrorCodes::NoSuchKey) {
|
||||
return;
|
||||
}
|
||||
|
||||
uassertStatusOK(swObj);
|
||||
auto swObj = storageInterface->deleteById(
|
||||
opCtx, NamespaceString::kServerConfigurationNamespace, elementKey);
|
||||
if (!swObj.isOK()) {
|
||||
// Ignore errors about no document
|
||||
if (swObj.getStatus() == ErrorCodes::NoSuchKey) {
|
||||
return;
|
||||
}
|
||||
|
||||
uassertStatusOK(swObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -128,9 +117,7 @@ void FreeMonStorage::deleteState(OperationContext* opCtx) {
|
||||
boost::optional<BSONObj> FreeMonStorage::readClusterManagerState(OperationContext* opCtx) {
|
||||
auto storageInterface = repl::StorageInterface::get(opCtx);
|
||||
|
||||
Lock::DBLock dblk(opCtx, NamespaceString::kServerConfigurationNamespace.db(), MODE_IS);
|
||||
Lock::CollectionLock lk(
|
||||
opCtx->lockState(), NamespaceString::kServerConfigurationNamespace.ns(), MODE_IS);
|
||||
AutoGetCollectionForRead autoRead(opCtx, NamespaceString::kServerConfigurationNamespace);
|
||||
|
||||
auto swObj = storageInterface->findSingleton(opCtx, localClusterManagerNss);
|
||||
if (!swObj.isOK()) {
|
||||
|
Loading…
Reference in New Issue
Block a user