Add timing based variants of ovsdb_idl_run() and ovsdb_idl_loop_run(), which accept an additional 'deadline' parameter.
This parameter instructs the ovsdb-cs and jsonrpc layers below to process messages as long as the deadline isn't reached, allowing clients to process more OVSDB updates in one batch. Signed-off-by: Martin Morgenstern <martin.morgenst...@cloudandheat.com> --- lib/ovsdb-idl.c | 24 ++++++++++++++++++++++-- lib/ovsdb-idl.h | 3 +++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c index 4c2a3e3aa..1d2d5f119 100644 --- a/lib/ovsdb-idl.c +++ b/lib/ovsdb-idl.c @@ -441,11 +441,21 @@ ovsdb_idl_clear(struct ovsdb_idl *db) * ovsdb_idl_get_seqno(). */ void ovsdb_idl_run(struct ovsdb_idl *idl) +{ + ovsdb_idl_run_until(idl, 0); +} + +void +ovsdb_idl_run_until(struct ovsdb_idl *idl, long long deadline) { ovs_assert(!idl->txn); struct ovs_list events; - ovsdb_cs_run(idl->cs, &events); + if (deadline) { + ovsdb_cs_run_until(idl->cs, &events, deadline); + } else { + ovsdb_cs_run(idl->cs, &events); + } struct ovsdb_cs_event *event; LIST_FOR_EACH_POP (event, list_node, &events) { @@ -4374,7 +4384,17 @@ ovsdb_idl_loop_destroy(struct ovsdb_idl_loop *loop) struct ovsdb_idl_txn * ovsdb_idl_loop_run(struct ovsdb_idl_loop *loop) { - ovsdb_idl_run(loop->idl); + return ovsdb_idl_loop_run_until(loop, 0); +} + +struct ovsdb_idl_txn * +ovsdb_idl_loop_run_until(struct ovsdb_idl_loop *loop, long long deadline) +{ + if (deadline) { + ovsdb_idl_run_until(loop->idl, deadline); + } else { + ovsdb_idl_run(loop->idl); + } /* See if the 'committing_txn' succeeded in the meantime. */ if (loop->committing_txn && loop->committing_txn->status == TXN_SUCCESS) { diff --git a/lib/ovsdb-idl.h b/lib/ovsdb-idl.h index 86fd2bd36..be9bf146d 100644 --- a/lib/ovsdb-idl.h +++ b/lib/ovsdb-idl.h @@ -74,6 +74,7 @@ void ovsdb_idl_destroy(struct ovsdb_idl *); void ovsdb_idl_set_leader_only(struct ovsdb_idl *, bool leader_only); void ovsdb_idl_run(struct ovsdb_idl *); +void ovsdb_idl_run_until(struct ovsdb_idl *, long long); void ovsdb_idl_wait(struct ovsdb_idl *); void ovsdb_idl_get_memory_usage(struct ovsdb_idl *, struct simap *usage); @@ -409,6 +410,8 @@ struct ovsdb_idl_loop { void ovsdb_idl_loop_destroy(struct ovsdb_idl_loop *); struct ovsdb_idl_txn *ovsdb_idl_loop_run(struct ovsdb_idl_loop *); +struct ovsdb_idl_txn *ovsdb_idl_loop_run_until(struct ovsdb_idl_loop *, + long long); int ovsdb_idl_loop_commit_and_wait(struct ovsdb_idl_loop *); /* Conditional Replication -- 2.45.2 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev