[ovs-dev] [PATCH 13/15] ovsdb-idl: Add some more implementation comments.

Ben Pfaff blp at ovn.org
Thu Oct 6 03:16:50 UTC 2016


I wrote this code and if I have to rediscover how it works, it's time to
improve the commnts.

Signed-off-by: Ben Pfaff <blp at ovn.org>
---
 lib/ovsdb-idl-provider.h | 36 ++++++++++++++++++++++++++++++++++++
 lib/ovsdb-idl.c          |  4 ++--
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/lib/ovsdb-idl-provider.h b/lib/ovsdb-idl-provider.h
index bac7754..1e375de 100644
--- a/lib/ovsdb-idl-provider.h
+++ b/lib/ovsdb-idl-provider.h
@@ -25,6 +25,42 @@
 #include "openvswitch/shash.h"
 #include "uuid.h"
 
+/* A local copy of a row in an OVSDB table, replicated from an OVSDB server.
+ * This structure is used as a header for a larger structure that translates
+ * the "struct ovsdb_datum"s into easier-to-use forms, via the ->parse() and
+ * ->unparse functions in struct ovsdb_idl_column.  (Those functions are
+ * generated automatically via ovsdb-idlc.)
+ *
+ * When no transaction is in progress:
+ *
+ *     - 'old' points to the data committed to the database and currently
+ *       in the row.
+ *
+ *     - 'new == old'.
+ *
+ * When a transaction is in progress, the situation is a little different.  For
+ * a row inserted in the transaction, 'old' is NULL and 'new' points to the
+ * row's initial contents.  Otherwise:
+ *
+ *     - 'old' points to the data committed to the database and currently in
+ *       the row.  (This is the same as when no transaction is in progress.)
+ *
+ *     - If the transaction does not modify the row, 'new == old'.
+ *
+ *     - If the transaction modifies the row, 'new' points to the modified
+ *       data.
+ *
+ *     - If the transaction deletes the row, 'new' is NULL.
+ *
+ * Thus:
+ *
+ *     - 'old' always points to committed data, except that it is NULL if the
+ *       row is inserted within the current transaction.
+ *
+ *     - 'new' always points to the newest, possibly uncommitted version of the
+ *       row's data, except that it is NULL if the row is deleted within the
+ *       current transaction.
+ */
 struct ovsdb_idl_row {
     struct hmap_node hmap_node; /* In struct ovsdb_idl_table's 'rows'. */
     struct uuid uuid;           /* Row "_uuid" field. */
diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c
index a1fcd19..e1df634 100644
--- a/lib/ovsdb-idl.c
+++ b/lib/ovsdb-idl.c
@@ -88,8 +88,8 @@ struct ovsdb_idl {
     const struct ovsdb_idl_class *class;
     struct jsonrpc_session *session;
     struct uuid uuid;
-    struct shash table_by_name;
-    struct ovsdb_idl_table *tables; /* Contains "struct ovsdb_idl_table *"s.*/
+    struct shash table_by_name; /* Contains "struct ovsdb_idl_table *"s.*/
+    struct ovsdb_idl_table *tables; /* Array of ->class->n_tables elements. */
     unsigned int change_seqno;
     bool verify_write_only;
 
-- 
2.1.3




More information about the dev mailing list