summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-12-06 13:50:22 +0100
committerTor Egge <Tor.Egge@online.no>2022-12-06 13:50:22 +0100
commit2e0d3a915283b98e86a9b5a2cb76a8d53f672f6a (patch)
treed570b48c100d95a2d16f2f0bb76404654721c1a3 /searchcore
parentb01ebe82c392cd08c2cfe736049ad3d61d91e2b5 (diff)
Wait for load done before providing transient resource usage.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/ddbstate.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.h1
3 files changed, 6 insertions, 2 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/ddbstate.h b/searchcore/src/vespa/searchcore/proton/server/ddbstate.h
index 5961ac4da62..20c0799c243 100644
--- a/searchcore/src/vespa/searchcore/proton/server/ddbstate.h
+++ b/searchcore/src/vespa/searchcore/proton/server/ddbstate.h
@@ -49,7 +49,7 @@ private:
static std::vector<vespalib::string> _stateNames;
static std::vector<vespalib::string> _configStateNames;
- void set_state(State state) noexcept { _state.store(state, std::memory_order_relaxed); }
+ void set_state(State state) noexcept { _state.store(state, std::memory_order_release); }
public:
DDBState();
@@ -67,7 +67,7 @@ public:
bool enterOnlineState();
void enterShutdownState();
void enterDeadState();
- State getState() const noexcept { return _state.load(std::memory_order_relaxed); }
+ State getState() const noexcept { return _state.load(std::memory_order_acquire); }
static vespalib::string getStateString(State state);
bool getClosed() const noexcept {
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
index 27a2db27369..6cd1a4ec728 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
@@ -113,6 +113,9 @@ public:
TransientResourceUsage get_transient_resource_usage() const override {
// Transient disk usage is measured as the total disk usage of all current fusion indexes.
// Transient memory usage is measured as the total memory usage of all memory indexes.
+ if (!_doc_db.get_state().get_load_done()) {
+ return {0, 0};
+ }
auto stats = _doc_db.getReadySubDB()->getSearchableStats();
return {stats.fusion_size_on_disk(), stats.memoryUsage().allocatedBytes()};
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
index ef885113079..29a25069367 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
@@ -422,6 +422,7 @@ public:
ExecutorThreadingService & getWriteService() { return _writeService; }
void set_attribute_usage_listener(std::unique_ptr<IAttributeUsageListener> listener);
+ const DDBState& get_state() const noexcept { return _state; }
};
} // namespace proton