[ovs-dev] [PATCH] ovsdb-server: fix monitor counters reported by memory/show

Andy Zhou azhou at ovn.org
Thu Feb 4 05:35:36 UTC 2016


Commit 4c2809787cdbc774 (ovsdb-monitor: add json cache) introduced
an optimization that allows jsonrpc session to share monitors.
However, the memory/show implementation was not updated to match the
implementation; it still assumes that each jsonrpc session uses its
own monitor, thus are likely to over reporting the number.

This patch fix the bug and reports the actual number of monitor used
by the ovsdb-server.

Signed-off-by: Andy Zhou <azhou at ovn.org>
---
 ovsdb/jsonrpc-server.c | 1 -
 ovsdb/monitor.c        | 8 ++++++++
 ovsdb/monitor.h        | 2 ++
 ovsdb/ovsdb-server.c   | 2 ++
 4 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c
index 2065702..ee2026e 100644
--- a/ovsdb/jsonrpc-server.c
+++ b/ovsdb/jsonrpc-server.c
@@ -533,7 +533,6 @@ ovsdb_jsonrpc_session_get_memory_usage(const struct ovsdb_jsonrpc_session *s,
                                        struct simap *usage)
 {
     simap_increase(usage, "triggers", hmap_count(&s->triggers));
-    simap_increase(usage, "monitors", hmap_count(&s->monitors));
     simap_increase(usage, "backlog", jsonrpc_session_get_backlog(s->js));
 }
 
diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c
index 0dde54e..5ae9cdb 100644
--- a/ovsdb/monitor.c
+++ b/ovsdb/monitor.c
@@ -1145,6 +1145,14 @@ ovsdb_monitor_destroy_callback(struct ovsdb_replica *replica)
     }
 }
 
+/* Add some memory usage statics for monitors into 'usage', for use with
+ * memory_report().  */
+void
+ovsdb_monitor_get_memory_usage(struct simap *usage)
+{
+    simap_put(usage, "monitors", hmap_count(&ovsdb_monitors));
+}
+
 static const struct ovsdb_replica_class ovsdb_jsonrpc_replica_class = {
     ovsdb_monitor_commit,
     ovsdb_monitor_destroy_callback,
diff --git a/ovsdb/monitor.h b/ovsdb/monitor.h
index d6e9635..fb10435 100644
--- a/ovsdb/monitor.h
+++ b/ovsdb/monitor.h
@@ -77,4 +77,6 @@ bool ovsdb_monitor_needs_flush(struct ovsdb_monitor *dbmon,
                                uint64_t next_transaction);
 
 void ovsdb_monitor_get_initial(const struct ovsdb_monitor *dbmon);
+
+void ovsdb_monitor_get_memory_usage(struct simap *usage);
 #endif
diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c
index 231ba2f..fa662b1 100644
--- a/ovsdb/ovsdb-server.c
+++ b/ovsdb/ovsdb-server.c
@@ -35,6 +35,7 @@
 #include "jsonrpc-server.h"
 #include "list.h"
 #include "memory.h"
+#include "monitor.h"
 #include "ovsdb.h"
 #include "ovsdb-data.h"
 #include "ovsdb-types.h"
@@ -138,6 +139,7 @@ main_loop(struct ovsdb_jsonrpc_server *jsonrpc, struct shash *all_dbs,
 
             simap_init(&usage);
             ovsdb_jsonrpc_server_get_memory_usage(jsonrpc, &usage);
+            ovsdb_monitor_get_memory_usage(&usage);
             SHASH_FOR_EACH(node, all_dbs) {
                 struct db *db = node->data;
                 ovsdb_get_memory_usage(db->db, &usage);
-- 
1.9.1




More information about the dev mailing list