+static void ovsdb_file_txn_init(struct ovsdb_file_txn *);
+static void ovsdb_file_txn_add_row(struct ovsdb_file_txn *,
+ const struct ovsdb_row *old,
+ const struct ovsdb_row *new);
+static struct ovsdb_error *ovsdb_file_txn_commit(struct json *,
+ const char *comment,
+ bool durable,
+ struct ovsdb_log *);
+
+static struct ovsdb_error *ovsdb_file_open__(const char *file_name,
+ const struct ovsdb_schema *,
+ bool read_only, struct ovsdb **);
+static struct ovsdb_error *ovsdb_file_txn_from_json(struct ovsdb *,
+ const struct json *,
+ bool converting,
+ struct ovsdb_txn **);
+static void ovsdb_file_replica_create(struct ovsdb *, struct ovsdb_log *);
+
+/* Opens database 'file_name' and stores a pointer to the new database in
+ * '*dbp'. If 'read_only' is false, then the database will be locked and
+ * changes to the database will be written to disk. If 'read_only' is true,
+ * the database will not be locked and changes to the database will persist
+ * only as long as the "struct ovsdb".
+ *
+ * On success, returns NULL. On failure, returns an ovsdb_error (which the
+ * caller must destroy) and sets '*dbp' to NULL. */
+struct ovsdb_error *
+ovsdb_file_open(const char *file_name, bool read_only, struct ovsdb **dbp)
+{
+ return ovsdb_file_open__(file_name, NULL, read_only, dbp);
+}