summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2014-10-22 10:14:46 -0400
committerEliot Horowitz <eliot@10gen.com>2014-10-22 10:16:49 -0400
commit0da60795c42f4e93cc0d8913c0fdd93dd670da41 (patch)
tree9e152224da0dbb98412877323c55dfff7cd0657c
parent3340ca09d383bcdf257402bc9b264529429ea97a (diff)
downloadmongo-0da60795c42f4e93cc0d8913c0fdd93dd670da41.tar.gz
SERVER-15711: revert changes to flush lock ordering an increase buffer size
-rw-r--r--src/mongo/db/concurrency/lock_mgr_new.cpp31
-rw-r--r--src/mongo/db/concurrency/lock_state.cpp13
-rw-r--r--src/mongo/db/storage/mmap_v1/dur.cpp2
-rw-r--r--src/mongo/db/storage/mmap_v1/dur.h2
4 files changed, 9 insertions, 39 deletions
diff --git a/src/mongo/db/concurrency/lock_mgr_new.cpp b/src/mongo/db/concurrency/lock_mgr_new.cpp
index dd211912116..7ce283cb6a7 100644
--- a/src/mongo/db/concurrency/lock_mgr_new.cpp
+++ b/src/mongo/db/concurrency/lock_mgr_new.cpp
@@ -251,15 +251,8 @@ namespace mongo {
if (request->status == LockRequest::STATUS_NEW) {
invariant(request->recursiveCount == 1);
- // The flush lock must be FIFO ordered or else we will starve the dur threads and not
- // block new writers. This means that if anyone is blocking on a mustFIFO resource we
- // must get in line, even if we don't conflict with the grantedModes and could take the
- // lock immediately.
- const bool mustFIFO = (resId.getType() == RESOURCE_MMAPV1_FLUSH);
-
// New lock request
- if (conflicts(mode, lock->grantedModes)
- || (mustFIFO && conflicts(mode, lock->conflictModes))) {
+ if (conflicts(mode, lock->grantedModes)) {
request->status = LockRequest::STATUS_WAITING;
request->mode = mode;
request->convertMode = MODE_NONE;
@@ -712,6 +705,7 @@ namespace mongo {
void LockHead::addToConflictQueue(LockRequest* request) {
invariant(request->next == NULL);
invariant(request->prev == NULL);
+
if (conflictQueueBegin == NULL) {
invariant(conflictQueueEnd == NULL);
@@ -724,24 +718,11 @@ namespace mongo {
else {
invariant(conflictQueueEnd != NULL);
- // durThread always jumps to the front of the queue
- const bool queueAtFront = (request->lock->resourceId.getType() == RESOURCE_MMAPV1_FLUSH)
- && (request->mode == MODE_X || request->mode == MODE_S);
- if (queueAtFront) {
- request->next = conflictQueueBegin;
- request->prev = NULL;
-
- conflictQueueBegin->prev = request;
- conflictQueueBegin = request;
- }
- else {
- request->prev = conflictQueueEnd;
- request->next = NULL;
-
- conflictQueueEnd->next = request;
- conflictQueueEnd = request;
- }
+ request->prev = conflictQueueEnd;
+ request->next = NULL;
+ conflictQueueEnd->next = request;
+ conflictQueueEnd = request;
}
}
diff --git a/src/mongo/db/concurrency/lock_state.cpp b/src/mongo/db/concurrency/lock_state.cpp
index 38d22f69138..480cd95ab9b 100644
--- a/src/mongo/db/concurrency/lock_state.cpp
+++ b/src/mongo/db/concurrency/lock_state.cpp
@@ -724,18 +724,7 @@ namespace mongo {
AutoAcquireFlushLockForMMAPV1Commit::AutoAcquireFlushLockForMMAPV1Commit(Locker* locker)
: _locker(locker) {
- int attempt = 0;
- while ( 1 ) {
- LockResult res = _locker->lock(resourceIdMMAPV1Flush, MODE_X, 10);
- if ( res == LOCK_OK )
- break;
- invariant( res == LOCK_TIMEOUT );
- if ( ++attempt % 100 == 0 ) {
- warning() << "AutoAcquireFlushLockForMMAPV1Commit has not gotten lock in "
- << attempt << " attempts";
- }
- sleepmillis(10);
- }
+ invariant(LOCK_OK == _locker->lock(resourceIdMMAPV1Flush, MODE_X, UINT_MAX));
}
AutoAcquireFlushLockForMMAPV1Commit::~AutoAcquireFlushLockForMMAPV1Commit() {
diff --git a/src/mongo/db/storage/mmap_v1/dur.cpp b/src/mongo/db/storage/mmap_v1/dur.cpp
index 47357b21141..9a997e5a237 100644
--- a/src/mongo/db/storage/mmap_v1/dur.cpp
+++ b/src/mongo/db/storage/mmap_v1/dur.cpp
@@ -645,7 +645,7 @@ namespace mongo {
if (commitJob._notify.nWaiting())
break;
- if (commitJob.bytes() > UncommittedBytesLimit / 2)
+ if (commitJob.bytes() > UncommittedBytesLimit / 10)
break;
}
diff --git a/src/mongo/db/storage/mmap_v1/dur.h b/src/mongo/db/storage/mmap_v1/dur.h
index 0c6bf9a3013..786926db14c 100644
--- a/src/mongo/db/storage/mmap_v1/dur.h
+++ b/src/mongo/db/storage/mmap_v1/dur.h
@@ -43,7 +43,7 @@ namespace mongo {
namespace dur {
// a smaller limit is likely better on 32 bit
- const unsigned UncommittedBytesLimit = (sizeof(void*)==4) ? 50 * 1024 * 1024 : 100 * 1024 * 1024;
+ const unsigned UncommittedBytesLimit = (sizeof(void*)==4) ? 50 * 1024 * 1024 : 512 * 1024 * 1024;
/** Call during startup so durability module can initialize
Throws if fatal error