ovsdb-server: fix monitor counters reported by memory/show
[cascardo/ovs.git] / ovsdb / jsonrpc-server.c
index 53c97cd..ee2026e 100644 (file)
@@ -45,6 +45,10 @@ VLOG_DEFINE_THIS_MODULE(ovsdb_jsonrpc_server);
 struct ovsdb_jsonrpc_remote;
 struct ovsdb_jsonrpc_session;
 
+/* Set false to defeature monitor2, causing jsonrpc to respond to monitor2
+ * method with an error.  */
+static bool monitor2_enable__ = true;
+
 /* Message rate-limiting. */
 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
 
@@ -529,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));
 }
 
@@ -845,7 +848,7 @@ ovsdb_jsonrpc_session_got_request(struct ovsdb_jsonrpc_session *s,
             reply = execute_transaction(s, db, request);
         }
     } else if (!strcmp(request->method, "monitor") ||
-               !strcmp(request->method, "monitor2")) {
+               (monitor2_enable__ && !strcmp(request->method, "monitor2"))) {
         struct ovsdb *db = ovsdb_jsonrpc_lookup_db(s, request, &reply);
         if (!reply) {
             int l = strlen(request->method) - strlen("monitor");
@@ -1368,3 +1371,10 @@ ovsdb_jsonrpc_monitor_flush_all(struct ovsdb_jsonrpc_session *s)
         }
     }
 }
+
+void
+ovsdb_jsonrpc_disable_monitor2(void)
+{
+    /* Once disabled, it is not possible to re-enable it. */
+    monitor2_enable__ = false;
+}