diff --git a/ovsdb/ovsdb.c b/ovsdb/ovsdb.c index 7e683e681..2da117cb3 100644 --- a/ovsdb/ovsdb.c +++ b/ovsdb/ovsdb.c @@ -502,6 +502,10 @@ ovsdb_get_memory_usage(const struct ovsdb *db, struct simap *usage) } simap_increase(usage, "cells", cells); + + if (db->storage) { + ovsdb_storage_get_memory_usage(db->storage, usage); + } } struct ovsdb_table * diff --git a/ovsdb/raft.c b/ovsdb/raft.c index 18f29973e..515eadab3 100644 --- a/ovsdb/raft.c +++ b/ovsdb/raft.c @@ -36,6 +36,7 @@ #include "ovsdb/log.h" #include "raft-rpc.h" #include "random.h" +#include "simap.h" #include "socket-util.h" #include "stream.h" #include "timeval.h" @@ -1014,6 +1015,21 @@ raft_get_sid(const struct raft *raft) return &raft->sid; } +/* Adds memory consumption info to 'usage' for later use by memory_report(). */ +void +raft_get_memory_usage(const struct raft *raft, struct simap *usage) +{ + struct raft_conn *conn; + int cnt = 0; + + LIST_FOR_EACH (conn, list_node, &raft->conns) { + simap_increase(usage, "raft-backlog", + jsonrpc_session_get_backlog(conn->js)); + cnt++; + } + simap_increase(usage, "raft-connections", cnt); +} + /* Returns true if 'raft' has completed joining its cluster, has not left or * initiated leaving the cluster, does not have failed disk storage, and is * apparently connected to the leader in a healthy way (or is itself the diff --git a/ovsdb/raft.h b/ovsdb/raft.h index 3d448995a..99d5307e5 100644 --- a/ovsdb/raft.h +++ b/ovsdb/raft.h @@ -67,6 +67,7 @@ struct json; struct ovsdb_log; struct raft; +struct simap; struct sset; #define RAFT_MAGIC "CLUSTER" @@ -113,6 +114,7 @@ const struct uuid *raft_get_cid(const struct raft *); const struct uuid *raft_get_sid(const struct raft *); bool raft_is_connected(const struct raft *); bool raft_is_leader(const struct raft *); +void raft_get_memory_usage(const struct raft *, struct simap *usage); /* Joining a cluster. */ bool raft_is_joining(const struct raft *); diff --git a/ovsdb/storage.c b/ovsdb/storage.c index e26252b06..7b4ad16f6 100644 --- a/ovsdb/storage.c +++ b/ovsdb/storage.c @@ -26,6 +26,7 @@ #include "ovsdb.h" #include "raft.h" #include "random.h" +#include "simap.h" #include "timeval.h" #include "util.h" @@ -188,6 +189,15 @@ ovsdb_storage_get_applied_index(const struct ovsdb_storage *storage) return storage->raft ? raft_get_applied_index(storage->raft) : 0; } +void +ovsdb_storage_get_memory_usage(const struct ovsdb_storage *storage, + struct simap *usage) +{ + if (storage->raft) { + raft_get_memory_usage(storage->raft, usage); + } +} + void ovsdb_storage_run(struct ovsdb_storage *storage) { diff --git a/ovsdb/storage.h b/ovsdb/storage.h index 8a9bbab70..a22396891 100644 --- a/ovsdb/storage.h +++ b/ovsdb/storage.h @@ -23,6 +23,7 @@ struct json; struct ovsdb_schema; struct ovsdb_storage; +struct simap; struct uuid; struct ovsdb_error *ovsdb_storage_open(const char *filename, bool rw, @@ -39,6 +40,8 @@ bool ovsdb_storage_is_leader(const struct ovsdb_storage *); const struct uuid *ovsdb_storage_get_cid(const struct ovsdb_storage *); const struct uuid *ovsdb_storage_get_sid(const struct ovsdb_storage *); uint64_t ovsdb_storage_get_applied_index(const struct ovsdb_storage *); +void ovsdb_storage_get_memory_usage(const struct ovsdb_storage *, + struct simap *usage); void ovsdb_storage_run(struct ovsdb_storage *); void ovsdb_storage_wait(struct ovsdb_storage *);