mirror of
https://github.com/apple/foundationdb.git
synced 2025-06-02 19:25:52 +08:00
Merge pull request #836 from etschannen/release-6.0
fix: the master proxy would log an OpCommit for empty commits to the txnStateStore
This commit is contained in:
commit
f19c0273d2
@ -27,6 +27,7 @@ Performance
|
||||
* Significantly improved the CPU efficiency of copy mutations to transaction logs during recovery. [6.0.2] `(PR #595) <https://github.com/apple/foundationdb/pull/595>`_
|
||||
* Significantly improved the CPU efficiency of generating status on the cluster controller. [6.0.11] `(PR #758) <https://github.com/apple/foundationdb/pull/758>`_
|
||||
* Reduced CPU cost of truncating files that are being cached. [6.0.12] `(PR #816) <https://github.com/apple/foundationdb/pull/816>`_
|
||||
* Significantly reduced master recovery times for clusters with large amounts of data. [6.0.14] `(PR #836) <https://github.com/apple/foundationdb/pull/836>`_
|
||||
|
||||
Fixes
|
||||
-----
|
||||
@ -55,7 +56,7 @@ Fixes
|
||||
* Restoring a backup to the exact version a snapshot ends did not apply mutations done at the final version. [6.0.12] `(PR #787) <https://github.com/apple/foundationdb/pull/787>`_
|
||||
* Excluding a process that was both the cluster controller and something else would cause two recoveries instead of one. [6.0.12] `(PR #784) <https://github.com/apple/foundationdb/pull/784>`_
|
||||
* Configuring from ``three_datacenter`` to ``three_datacenter_fallback`` would cause a lot of unnecessary data movement. [6.0.12] `(PR #782) <https://github.com/apple/foundationdb/pull/782>`_
|
||||
* Backup range tasks could sometimes but very rarely fail and be lost. [6.0.14] `(PR #837) <https://github.com/apple/foundationdb/pull/837>`_
|
||||
* Very rarely, backup snapshots would stop making progress. [6.0.14] `(PR #837) <https://github.com/apple/foundationdb/pull/837>`_
|
||||
|
||||
Fixes only impacting 6.0.0+
|
||||
---------------------------
|
||||
|
@ -164,27 +164,26 @@ public:
|
||||
fullSnapshot(data);
|
||||
resetSnapshot = true;
|
||||
committedWriteBytes = notifiedCommittedWriteBytes.get();
|
||||
overheadWriteBytes = 0;
|
||||
|
||||
if(disableSnapshot) {
|
||||
return Void();
|
||||
}
|
||||
log_op(OpCommit, StringRef(), StringRef());
|
||||
}
|
||||
else {
|
||||
int64_t bytesWritten = commit_queue(queue, !disableSnapshot, sequential);
|
||||
if(!disableSnapshot) {
|
||||
committedWriteBytes += bytesWritten + OP_DISK_OVERHEAD; //OP_DISK_OVERHEAD is for the following log_op(OpCommit)
|
||||
|
||||
if(disableSnapshot) {
|
||||
return Void();
|
||||
}
|
||||
|
||||
//If there have been no mutations since the last commit, do nothing
|
||||
if( notifiedCommittedWriteBytes.get() == committedWriteBytes )
|
||||
return Void();
|
||||
|
||||
notifiedCommittedWriteBytes.set(committedWriteBytes);
|
||||
}
|
||||
|
||||
if(disableSnapshot) {
|
||||
return Void();
|
||||
}
|
||||
|
||||
log_op(OpCommit, StringRef(), StringRef());
|
||||
if(!transactionIsLarge) {
|
||||
committedWriteBytes += log->getCommitOverhead();
|
||||
if(bytesWritten > 0 || committedWriteBytes > notifiedCommittedWriteBytes.get()) {
|
||||
committedWriteBytes += bytesWritten + overheadWriteBytes + OP_DISK_OVERHEAD; //OP_DISK_OVERHEAD is for the following log_op(OpCommit)
|
||||
notifiedCommittedWriteBytes.set(committedWriteBytes); //This set will cause snapshot items to be written, so it must happen before the OpCommit
|
||||
log_op(OpCommit, StringRef(), StringRef());
|
||||
overheadWriteBytes = log->getCommitOverhead();
|
||||
}
|
||||
}
|
||||
|
||||
auto c = log->commit();
|
||||
@ -347,6 +346,7 @@ private:
|
||||
IDiskQueue *log;
|
||||
Future<Void> recovering, snapshotting;
|
||||
int64_t committedWriteBytes;
|
||||
int64_t overheadWriteBytes;
|
||||
NotifiedVersion notifiedCommittedWriteBytes;
|
||||
Key recoveredSnapshotKey; // After recovery, the next key in the currently uncompleted snapshot
|
||||
IDiskQueue::location currentSnapshotEnd; //The end of the most recently completed snapshot (this snapshot cannot be discarded)
|
||||
@ -710,7 +710,7 @@ private:
|
||||
};
|
||||
|
||||
KeyValueStoreMemory::KeyValueStoreMemory( IDiskQueue* log, UID id, int64_t memoryLimit, bool disableSnapshot, bool replaceContent, bool exactRecovery )
|
||||
: log(log), id(id), previousSnapshotEnd(-1), currentSnapshotEnd(-1), resetSnapshot(false), memoryLimit(memoryLimit), committedWriteBytes(0),
|
||||
: log(log), id(id), previousSnapshotEnd(-1), currentSnapshotEnd(-1), resetSnapshot(false), memoryLimit(memoryLimit), committedWriteBytes(0), overheadWriteBytes(0),
|
||||
committedDataSize(0), transactionSize(0), transactionIsLarge(false), disableSnapshot(disableSnapshot), replaceContent(replaceContent), snapshotCount(0), firstCommitWithSnapshot(true)
|
||||
{
|
||||
recovering = recover( this, exactRecovery );
|
||||
|
Loading…
x
Reference in New Issue
Block a user