summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Zhou <azhou@ovn.org>2017-02-06 12:43:35 -0800
committerAndy Zhou <azhou@ovn.org>2017-02-13 12:07:44 -0800
commit64fada26016c0d7ad8376d11c2cf653616d0db21 (patch)
tree88422ddf7af7ca40b0a0e83e675fc5e128ee3318
parentac5d315cd83a1b6a3610c0ddf2ffc847250b783d (diff)
downloadopenvswitch-64fada26016c0d7ad8376d11c2cf653616d0db21.tar.gz
ovsdb: Add OVSDB server per instance UUID.
Currently, there is no way for an OVSDB server to ID itself. This patch adds a UUID field that is populated every time OVSDB server runs. Later patch will make use this UUID to detect and stop and OVSDB server from replicating itself. Signed-off-by: Andy Zhou <azhou@ovn.org> Acked-by: Ben Pfaff <blp@ovn.org>
-rw-r--r--ovsdb/jsonrpc-server.c6
-rw-r--r--ovsdb/jsonrpc-server.h4
-rw-r--r--ovsdb/server.c2
-rw-r--r--ovsdb/server.h3
4 files changed, 15 insertions, 0 deletions
diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c
index fa589b5e6..5353ba743 100644
--- a/ovsdb/jsonrpc-server.c
+++ b/ovsdb/jsonrpc-server.c
@@ -1575,6 +1575,12 @@ ovsdb_jsonrpc_create_notify(const struct ovsdb_jsonrpc_monitor *m,
return jsonrpc_create_notify(method, params);
}
+const struct uuid *
+ovsdb_jsonrpc_server_get_uuid(const struct ovsdb_jsonrpc_server *s)
+{
+ return &s->up.uuid;
+}
+
static void
ovsdb_jsonrpc_monitor_flush_all(struct ovsdb_jsonrpc_session *s)
{
diff --git a/ovsdb/jsonrpc-server.h b/ovsdb/jsonrpc-server.h
index f72f88487..3cacbb6a0 100644
--- a/ovsdb/jsonrpc-server.h
+++ b/ovsdb/jsonrpc-server.h
@@ -22,6 +22,7 @@
struct ovsdb;
struct shash;
struct simap;
+struct uuid;
struct ovsdb_jsonrpc_server *ovsdb_jsonrpc_server_create(bool read_only);
bool ovsdb_jsonrpc_server_add_db(struct ovsdb_jsonrpc_server *,
@@ -71,6 +72,9 @@ bool ovsdb_jsonrpc_server_is_read_only(struct ovsdb_jsonrpc_server *);
void ovsdb_jsonrpc_server_get_memory_usage(const struct ovsdb_jsonrpc_server *,
struct simap *usage);
+const struct uuid *ovsdb_jsonrpc_server_get_uuid(
+ const struct ovsdb_jsonrpc_server *);
+
struct ovsdb_jsonrpc_monitor;
void ovsdb_jsonrpc_monitor_destroy(struct ovsdb_jsonrpc_monitor *);
void ovsdb_jsonrpc_disable_monitor_cond(void);
diff --git a/ovsdb/server.c b/ovsdb/server.c
index eca915150..2a775230d 100644
--- a/ovsdb/server.c
+++ b/ovsdb/server.c
@@ -19,6 +19,7 @@
#include "hash.h"
#include "ovsdb.h"
+#include "uuid.h"
/* Initializes 'session' as a session within 'server'. */
void
@@ -121,6 +122,7 @@ ovsdb_server_init(struct ovsdb_server *server)
{
shash_init(&server->dbs);
hmap_init(&server->locks);
+ uuid_generate(&server->uuid);
}
/* Adds 'db' to the set of databases served out by 'server'. Returns true if
diff --git a/ovsdb/server.h b/ovsdb/server.h
index c0bbb69ce..21bf1adde 100644
--- a/ovsdb/server.h
+++ b/ovsdb/server.h
@@ -19,6 +19,7 @@
#include "openvswitch/hmap.h"
#include "openvswitch/list.h"
#include "openvswitch/shash.h"
+#include "openvswitch/uuid.h"
struct ovsdb;
struct ovsdb_server;
@@ -79,6 +80,8 @@ bool ovsdb_lock_waiter_is_owner(const struct ovsdb_lock_waiter *);
struct ovsdb_server {
struct shash dbs; /* Maps from a db name to a "struct ovsdb *". */
struct hmap locks; /* Contains "struct ovsdb_lock"s indexed by name. */
+ struct uuid uuid; /* Server ID. Generated every time a server is
+ launched. */
};
void ovsdb_server_init(struct ovsdb_server *);