On Wed, Jul 30, 2025 at 6:04 AM Felix Huettner via dev <ovs-dev@openvswitch.org> wrote: > > peer->next_index - raft->log_start might underflow if we did just > snapshot and therefor raft->log_start is greater than peer->next_index. > If we do not actually send data (e.g. on a heartbeat) that is fine for > now, however in all other cases we would actually need to send a > install_snapshot_request instead. > > Signed-off-by: Felix Huettner <felix.huettner@stackit.cloud> > --- > ovsdb/raft.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/ovsdb/raft.c b/ovsdb/raft.c > index 9694c94e6..9f09b0ede 100644 > --- a/ovsdb/raft.c > +++ b/ovsdb/raft.c > @@ -2858,6 +2858,12 @@ raft_send_append_request(struct raft *raft, > { > ovs_assert(raft->role == RAFT_LEADER); > > + /* If n > 0 then we need to have the data still available that the peer > + * needs next. If the data is gone due to compaction we should have send > + * an install_snapshot_request instead. */ > + ovs_assert(!n || raft->log_start <= peer->next_index); > + ovs_assert(!n || peer->next_index + n <= raft->log_end);
ovs_assert can be a NOP in some cases. Shouldn't this be either an ovs_fatal or returning an error code? -M > + > const union raft_rpc rq = { > .append_request = { > .common = { > @@ -2872,7 +2878,8 @@ raft_send_append_request(struct raft *raft, > - raft->log_start].term > : raft->snap.term), > .leader_commit = raft->commit_index, > - .entries = &raft->entries[peer->next_index - raft->log_start], > + .entries = n ? &raft->entries[ > + peer->next_index - raft->log_start] : NULL, > .n_entries = n, > }, > }; > -- > 2.43.0 > > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev