summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-09-20 13:25:04 +0200
committerTor Egge <Tor.Egge@online.no>2022-09-20 13:25:04 +0200
commitac0e328d1a66a082b122be79055a5b7815743271 (patch)
treefc37834e7d98868da2ef81d9512b1feae35aa90f
parent5b894c7ae68032ad490a4c236c915be92f9b6c9d (diff)
Only save config needed for replay of transaction log.
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp13
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.h2
2 files changed, 9 insertions, 6 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
index 1df2f405e02..64b04967f3f 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
@@ -233,7 +233,7 @@ DocumentDB::DocumentDB(const vespalib::string &baseDir,
_feedHandler->init(_config_store->getOldestSerialNum());
_feedHandler->setBucketDBHandler(&_subDBs.getBucketDBHandler());
- saveInitialConfig(*configSnapshot);
+ saveInitialConfig(configSnapshot);
resumeSaveConfig();
SerialNum configSerial = _config_store->getPrevValidSerial(_feedHandler->getPrunedSerialNum() + 1);
assert(configSerial > 0);
@@ -473,15 +473,17 @@ DocumentDB::applyConfig(DocumentDBConfig::SP configSnapshot, SerialNum serialNum
const ReconfigParams params(cmpres);
// Save config via config manager if replay is done.
+ auto replay_config = DocumentDBConfig::makeReplayConfig(configSnapshot);
bool equalReplayConfig =
- *DocumentDBConfig::makeReplayConfig(configSnapshot) ==
+ *replay_config ==
*DocumentDBConfig::makeReplayConfig(_activeConfigSnapshot);
bool tlsReplayDone = _feedHandler->getTransactionLogReplayDone();
FeedHandler::CommitResult commit_result;
if (!equalReplayConfig && tlsReplayDone) {
sync(_feedHandler->getSerialNum());
serialNum = _feedHandler->inc_serial_num();
- _config_store->saveConfig(*configSnapshot, serialNum);
+ _config_store->saveConfig(*replay_config, serialNum);
+ replay_config.reset();
// save entry in transaction log
NewConfigOperation op(serialNum, *_config_store);
commit_result = _feedHandler->storeOperationSync(op);
@@ -632,7 +634,7 @@ DocumentDB::getNumActiveDocs() const
}
void
-DocumentDB::saveInitialConfig(const DocumentDBConfig &configSnapshot)
+DocumentDB::saveInitialConfig(std::shared_ptr<DocumentDBConfig> configSnapshot)
{
// Only called from ctor
@@ -657,7 +659,8 @@ DocumentDB::saveInitialConfig(const DocumentDBConfig &configSnapshot)
LOG(warning, "DocumentDB(%s): saveInitialConfig() failed pruning due to '%s'",
_docTypeName.toString().c_str(), e.what());
}
- _config_store->saveConfig(configSnapshot, confSerial);
+ auto replay_config = DocumentDBConfig::makeReplayConfig(configSnapshot);
+ _config_store->saveConfig(*replay_config, confSerial);
}
void
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
index 9a37af71bab..ef885113079 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
@@ -155,7 +155,7 @@ private:
*
* @param configSnapshot initial config snapshot.
*/
- void saveInitialConfig(const DocumentDBConfig &configSnapshot);
+ void saveInitialConfig(std::shared_ptr<DocumentDBConfig> configSnapshot);
/**
* Resume interrupted config save if needed.