10000 Do not delete ticks before counters (#6887) · mnemosdev/arangodb@05aa219 · GitHub
[go: up one dir, main page]

Skip to content

Commit 05aa219

Browse files
graetzerjsteemann
authored andcommitted
Do not delete ticks before counters (arangodb#6887)
1 parent 999603e commit 05aa219

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

arangod/RocksDBEngine/RocksDBSettingsManager.cpp

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -54,24 +54,27 @@
5454
#include <velocypack/velocypack-aliases.h>
5555

5656
namespace {
57-
arangodb::Result writeCounterValue(
58-
std::unordered_map<uint64_t, rocksdb::SequenceNumber>& syncedSeqNums,
59-
rocksdb::Transaction* rtrx, VPackBuilder& b,
60-
std::pair<uint64_t, arangodb::RocksDBSettingsManager::CMValue> const&
61-
pair) {
57+
std::pair<arangodb::Result, rocksdb::SequenceNumber>
58+
writeCounterValue(std::unordered_map<uint64_t, rocksdb::SequenceNumber> const& syncedSeqNums,
59+
rocksdb::Transaction* rtrx, VPackBuilder& b,
60+
std::pair<uint64_t, arangodb::RocksDBSettingsManager::CMValue> const& pair,
61+
rocksdb::SequenceNumber baseSeq) {
6262
using arangodb::Logger;
6363
using arangodb::Result;
6464
using arangodb::RocksDBColumnFamily;
6565
using arangodb::RocksDBKey;
6666
using arangodb::rocksutils::convertStatus;
6767

68+
rocksdb::SequenceNumber returnSeq = baseSeq;
69+
6870
// Skip values which we did not change
6971
auto const& it = syncedSeqNums.find(pair.first);
70-
7172
if (it != syncedSeqNums.end() && it->second == pair.second._sequenceNum) {
72-
return Result();
73+
// implication: no-one update the collection since the last sync,
74+
// we do not need to keep the log entries for this counter
75+
return std::make_pair(Result(), returnSeq);
7376
}
74-
77+
7578
b.clear();
7679
pair.second.serialize(b);
7780

@@ -81,14 +84,14 @@ arangodb::Result writeCounterValue(
8184
rocksdb::Status s =
8285
rtrx->Put(RocksDBColumnFamily::definitions(), key.string(), value);
8386
if (!s.ok()) {
84-
rtrx->Rollback();
85-
auto rStatus = convertStatus(s);
8687
LOG_TOPIC(WARN, Logger::ENGINES)
87-
<< "writing counters failed: " << rStatus.errorMessage();
88-
return rStatus;
88+
<< "writing counter for collection with objectId '" << pair.first << "' failed: "
89+
<< s.ToString();
90+
return std::make_pair(convertStatus(s), returnSeq);
8991
}
9092

91-
return Result();
93+
returnSeq = std::min(returnSeq, pair.second._sequenceNum);
94+
return std::make_pair(Result(), returnSeq);
9295
}
9396
} // namespace
9497

@@ -124,11 +127,8 @@ arangodb::Result writeSettings(rocksdb::Transaction* rtrx, VPackBuilder& b,
124127
rtrx->Put(RocksDBColumnFamily::definitions(), key.string(), value);
125128

126129
if (!s.ok()) {
127-
auto rStatus = arangodb::rocksutils::convertStatus(s);
128-
LOG_TOPIC(WARN, Logger::ENGINES)
129-
<< "writing settings failed: " << rStatus.errorMessage();
130-
rtrx->Rollback();
131-
return rStatus;
130+
LOG_TOPIC(WARN, Logger::ENGINES) << "writing settings failed: " << s.ToString();
131+
return arangodb::rocksutils::convertStatus(s);
132132
}
133133

134134
return Result();
@@ -455,17 +455,22 @@ Result RocksDBSettingsManager::sync(bool force) {
455455
_builder.clear();
456456

457457
for (std::pair<uint64_t, CMValue> const& pair : copy) {
458-
Result res = writeCounterValue(_syncedSeqNums, rtrx.get(), _builder, pair);
458+
Result res;
459+
rocksdb::SequenceNumber returnSeq;
460+
461+
std::tie(res, returnSeq) = writeCounterValue(_syncedSeqNums, rtrx.get(),
462+
_builder, pair, seqNumber);
459463
if (res.fail()) {
460464
return res;
461465
}
466+
seqNumber = std::min(seqNumber, returnSeq);
462467

463-
auto writeResult =
468+
std::tie(res, returnSeq) =
464469
writeIndexEstimatorsAndKeyGenerator(rtrx.get(), pair, seqNumber);
465-
if (writeResult.first.fail()) {
466-
return writeResult.first;
470+
if (res.fail()) {
471+
return res;
467472
}
468-
seqNumber = std::min(seqNumber, writeResult.second);
473+
seqNumber = std::min(seqNumber, returnSeq);
469474
}
470475

471476
Result res = writeSettings(rtrx.get(), _builder, seqNumber);

0 commit comments

Comments
 (0)
0