mirror of https://gitee.com/bigwinds/arangodb
write settings on shutdown
This commit is contained in:
parent
b9e87d2619
commit
c716fcacd3
|
@ -51,8 +51,6 @@ void RocksDBBackgroundThread::run() {
|
||||||
guard.wait(static_cast<uint64_t>(_interval * 1000000.0));
|
guard.wait(static_cast<uint64_t>(_interval * 1000000.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
_engine->counterManager()->writeSettings();
|
|
||||||
|
|
||||||
if (!isStopping()) {
|
if (!isStopping()) {
|
||||||
_engine->counterManager()->sync(false);
|
_engine->counterManager()->sync(false);
|
||||||
}
|
}
|
||||||
|
@ -67,5 +65,5 @@ void RocksDBBackgroundThread::run() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_engine->counterManager()->writeSettings(); // final write on shutdown
|
_engine->counterManager()->sync(true); // final write on shutdown
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,10 +165,6 @@ void RocksDBCounterManager::removeCounter(uint64_t objectId) {
|
||||||
|
|
||||||
/// Thread-Safe force sync
|
/// Thread-Safe force sync
|
||||||
Result RocksDBCounterManager::sync(bool force) {
|
Result RocksDBCounterManager::sync(bool force) {
|
||||||
#if 0
|
|
||||||
writeSettings();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (force) {
|
if (force) {
|
||||||
while (true) {
|
while (true) {
|
||||||
bool expected = false;
|
bool expected = false;
|
||||||
|
@ -218,12 +214,34 @@ Result RocksDBCounterManager::sync(bool force) {
|
||||||
rocksdb::Status s = rtrx->Put(key.string(), value);
|
rocksdb::Status s = rtrx->Put(key.string(), value);
|
||||||
if (!s.ok()) {
|
if (!s.ok()) {
|
||||||
rtrx->Rollback();
|
rtrx->Rollback();
|
||||||
|
LOG_TOPIC(WARN, Logger::ENGINES) << "writing counters failed";
|
||||||
return rocksutils::convertStatus(s);
|
return rocksutils::convertStatus(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// now write global settings
|
||||||
|
b.clear();
|
||||||
|
b.openObject();
|
||||||
|
b.add("tick", VPackValue(std::to_string(TRI_CurrentTickServer())));
|
||||||
|
b.add("hlc", VPackValue(std::to_string(TRI_HybridLogicalClock())));
|
||||||
|
b.close();
|
||||||
|
|
||||||
|
VPackSlice slice = b.slice();
|
||||||
|
LOG_TOPIC(TRACE, Logger::ENGINES) << "writing settings: " << slice.toJson();
|
||||||
|
|
||||||
|
RocksDBKey key = RocksDBKey::SettingsValue();
|
||||||
|
rocksdb::Slice value(slice.startAs<char>(), slice.byteSize());
|
||||||
|
|
||||||
|
rocksdb::Status s = rtrx->Put(key.string(), value);
|
||||||
|
|
||||||
|
if (!s.ok()) {
|
||||||
|
LOG_TOPIC(WARN, Logger::ENGINES) << "writing settings failed";
|
||||||
|
rtrx->Rollback();
|
||||||
|
return rocksutils::convertStatus(s);
|
||||||
|
}
|
||||||
|
|
||||||
// we have to commit all counters in one batch
|
// we have to commit all counters in one batch
|
||||||
rocksdb::Status s = rtrx->Commit();
|
s = rtrx->Commit();
|
||||||
if (s.ok()) {
|
if (s.ok()) {
|
||||||
for (std::pair<uint64_t, CMValue> const& pair : copy) {
|
for (std::pair<uint64_t, CMValue> const& pair : copy) {
|
||||||
_syncedSeqNums[pair.first] = pair.second._sequenceNum;
|
_syncedSeqNums[pair.first] = pair.second._sequenceNum;
|
||||||
|
@ -252,6 +270,13 @@ void RocksDBCounterManager::readSettings() {
|
||||||
basics::VelocyPackHelper::stringUInt64(slice.get("tick"));
|
basics::VelocyPackHelper::stringUInt64(slice.get("tick"));
|
||||||
LOG_TOPIC(TRACE, Logger::ENGINES) << "using last tick: " << lastTick;
|
LOG_TOPIC(TRACE, Logger::ENGINES) << "using last tick: " << lastTick;
|
||||||
TRI_UpdateTickServer(lastTick);
|
TRI_UpdateTickServer(lastTick);
|
||||||
|
|
||||||
|
if (slice.hasKey("hlc")) {
|
||||||
|
uint64_t lastHlc =
|
||||||
|
basics::VelocyPackHelper::stringUInt64(slice.get("hlc"));
|
||||||
|
LOG_TOPIC(TRACE, Logger::ENGINES) << "using last hlc: " << lastHlc;
|
||||||
|
TRI_HybridLogicalClock(lastHlc);
|
||||||
|
}
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
LOG_TOPIC(WARN, Logger::ENGINES)
|
LOG_TOPIC(WARN, Logger::ENGINES)
|
||||||
<< "unable to read initial settings: invalid data";
|
<< "unable to read initial settings: invalid data";
|
||||||
|
@ -260,27 +285,6 @@ void RocksDBCounterManager::readSettings() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RocksDBCounterManager::writeSettings() {
|
|
||||||
RocksDBKey key = RocksDBKey::SettingsValue();
|
|
||||||
|
|
||||||
VPackBuilder builder;
|
|
||||||
builder.openObject();
|
|
||||||
builder.add("tick", VPackValue(std::to_string(TRI_CurrentTickServer())));
|
|
||||||
builder.close();
|
|
||||||
|
|
||||||
VPackSlice slice = builder.slice();
|
|
||||||
LOG_TOPIC(TRACE, Logger::ENGINES) << "writing settings: " << slice.toJson();
|
|
||||||
|
|
||||||
rocksdb::Slice value(slice.startAs<char>(), slice.byteSize());
|
|
||||||
|
|
||||||
rocksdb::Status status =
|
|
||||||
_db->Put(rocksdb::WriteOptions(), key.string(), value);
|
|
||||||
|
|
||||||
if (!status.ok()) {
|
|
||||||
LOG_TOPIC(TRACE, Logger::ENGINES) << "writing settings failed";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Parse counter values from rocksdb
|
/// Parse counter values from rocksdb
|
||||||
void RocksDBCounterManager::readCounterValues() {
|
void RocksDBCounterManager::readCounterValues() {
|
||||||
WRITE_LOCKER(guard, _rwLock);
|
WRITE_LOCKER(guard, _rwLock);
|
||||||
|
@ -311,10 +315,10 @@ struct WBReader : public rocksdb::WriteBatch::Handler {
|
||||||
uint64_t _maxTick = 0;
|
uint64_t _maxTick = 0;
|
||||||
uint64_t _maxHLC = 0;
|
uint64_t _maxHLC = 0;
|
||||||
|
|
||||||
explicit WBReader() : currentSeqNum(0) {}
|
WBReader() : currentSeqNum(0) {}
|
||||||
virtual ~WBReader() {
|
virtual ~WBReader() {
|
||||||
// update ticks after parsing wal
|
// update ticks after parsing wal
|
||||||
TRI_UpdateTickServer(std::max(_maxTick, TRI_CurrentTickServer()));
|
TRI_UpdateTickServer(_maxTick);
|
||||||
TRI_HybridLogicalClock(_maxHLC);
|
TRI_HybridLogicalClock(_maxHLC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,6 @@ class RocksDBCounterManager {
|
||||||
arangodb::Result sync(bool force);
|
arangodb::Result sync(bool force);
|
||||||
|
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void writeSettings();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
struct CMValue {
|
struct CMValue {
|
||||||
|
|
|
@ -204,7 +204,7 @@ void RocksDBEngine::start() {
|
||||||
_options.comparator = _cmp.get();
|
_options.comparator = _cmp.get();
|
||||||
// WAL_ttl_seconds needs to be bigger than the sync interval of the count
|
// WAL_ttl_seconds needs to be bigger than the sync interval of the count
|
||||||
// manager. Should be several times bigger counter_sync_seconds
|
// manager. Should be several times bigger counter_sync_seconds
|
||||||
_options.WAL_ttl_seconds = 600; //(uint64_t)(counter_sync_seconds * 2.0);
|
_options.WAL_ttl_seconds = 10; //600; //(uint64_t)(counter_sync_seconds * 2.0);
|
||||||
double counter_sync_seconds = 2.5;
|
double counter_sync_seconds = 2.5;
|
||||||
// TODO: prefix_extractior + memtable_insert_with_hint_prefix
|
// TODO: prefix_extractior + memtable_insert_with_hint_prefix
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue