+
+ if (ovsdb_base_type_is_strong_ref(base) && !refTable->is_root) {
+ /* We cannot allow a strong reference to a non-root table to be
+ * ephemeral: if it is the only reference to a row, then replaying the
+ * database log from disk will cause the referenced row to be deleted,
+ * even though it did exist in memory. If there are references to that
+ * row later in the log (to modify it, to delete it, or just to point
+ * to it), then this will yield a transaction error. */
+ column->persistent = true;
+ }
+
+ return NULL;
+}
+
+static bool
+is_valid_version(const char *s)
+{
+ int n = -1;
+ ignore(ovs_scan(s, "%*[0-9].%*[0-9].%*[0-9]%n", &n));
+ return n != -1 && s[n] == '\0';
+}
+
+/* Returns the number of tables in 'schema''s root set. */
+static size_t
+root_set_size(const struct ovsdb_schema *schema)
+{
+ struct shash_node *node;
+ size_t n_root = 0;
+
+ SHASH_FOR_EACH (node, &schema->tables) {
+ struct ovsdb_table_schema *table = node->data;
+
+ n_root += table->is_root;
+ }
+ return n_root;