On 4/4/24 17:52, Vladislav Odintsov wrote: > Thanks Dumitru! > I’m totally fine with your change. > Should I send backport patches with resolved conflicts for remaining branches > at least till 22.03, which is an LTS? >
Well, 24.03 is the most recent LTS. We don't really backport patches to 22.03 unless they fix critical issues. I'm not completely convinced that this is such a critical issue though. You need 4K logical datapaths with vxlan enabled before this gets hit. In any case, Mark, what do you think? Regards, Dumitru >> On 4 Apr 2024, at 18:26, Dumitru Ceara <dce...@redhat.com> wrote: >> >> On 4/1/24 16:27, Mark Michelson wrote: >>> Thanks Vladislav, >>> >>> Acked-by: Mark Michelson <mmich...@redhat.com <mailto:mmich...@redhat.com>> >>> >> >> Thanks, Vladislav and Mark! Applied to main and backported down to >> 23.06 with a minor test change, please see below. >> >>> On 4/1/24 08:15, Vladislav Odintsov wrote: >>>> In case if all tunnel ids are exhausted, ovn_allocate_tnlid() function >>>> iterates over tnlids indefinitely when *hint is outside of [min, max]. >>>> This is because when tnlid reaches max, next tnlid is min and for-loop >>>> never reaches exit condition for tnlid != *hint. >>>> >>>> This patch fixes mentioned issue and adds a testcase. >>>> >>>> Signed-off-by: Vladislav Odintsov <odiv...@gmail.com> >>>> --- >>>> lib/ovn-util.c | 10 +++++++--- >>>> tests/ovn-northd.at | 26 ++++++++++++++++++++++++++ >>>> 2 files changed, 33 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/lib/ovn-util.c b/lib/ovn-util.c >>>> index ee5cbcdc3..9f97ae2ca 100644 >>>> --- a/lib/ovn-util.c >>>> +++ b/lib/ovn-util.c >>>> @@ -693,13 +693,17 @@ uint32_t >>>> ovn_allocate_tnlid(struct hmap *set, const char *name, uint32_t min, >>>> uint32_t max, uint32_t *hint) >>>> { >>>> - for (uint32_t tnlid = next_tnlid(*hint, min, max); tnlid != *hint; >>>> - tnlid = next_tnlid(tnlid, min, max)) { >>>> + /* Normalize hint, because it can be outside of [min, max]. */ >>>> + *hint = next_tnlid(*hint, min, max); >>>> + >>>> + uint32_t tnlid = *hint; >>>> + do { >>>> if (ovn_add_tnlid(set, tnlid)) { >>>> *hint = tnlid; >>>> return tnlid; >>>> } >>>> - } >>>> + tnlid = next_tnlid(tnlid, min, max); >>>> + } while (tnlid != *hint); >>>> static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); >>>> VLOG_WARN_RL(&rl, "all %s tunnel ids exhausted", name); >>>> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at >>>> index cd53755b2..174dbacda 100644 >>>> --- a/tests/ovn-northd.at >>>> +++ b/tests/ovn-northd.at >>>> @@ -2822,6 +2822,32 @@ AT_CHECK([test $lsp02 = 3 && test $ls1 = 123]) >>>> AT_CLEANUP >>>> ]) >>>> +OVN_FOR_EACH_NORTHD_NO_HV([ >>>> +AT_SETUP([check tunnel ids exhaustion]) >>>> +ovn_start >>>> + >>>> +# Create a fake chassis with vxlan encap to lower MAX DP tunnel key >>>> to 2^12 >>>> +ovn-sbctl \ >>>> + --id=@e create encap chassis_name=hv1 ip="192.168.0.1" >>>> type="vxlan" \ >>>> + -- --id=@c create chassis name=hv1 encaps=@e >>>> + >>>> +cmd="ovn-nbctl --wait=sb" >>>> + >>>> +for i in {1..4097..1}; do >> >> This can be changed to: >> >> for i in {1..4097}; do >> >>>> + cmd="${cmd} -- ls-add lsw-${i}" >>>> +done >>>> + >>>> +eval $cmd >>>> + >>>> +check_row_count nb:Logical_Switch 4097 >>>> +wait_row_count sb:Datapath_Binding 4095 >>>> + >>>> +OVS_WAIT_UNTIL([grep "all datapath tunnel ids exhausted" >>>> northd/ovn-northd.log]) >>>> + >>>> +AT_CLEANUP >>>> +]) >>>> + >>>> + >>>> OVN_FOR_EACH_NORTHD_NO_HV([ >>>> AT_SETUP([Logical Flow Datapath Groups]) >>>> ovn_start >> >> Regards, >> Dumitru >> >> _______________________________________________ >> dev mailing list >> d...@openvswitch.org <mailto:d...@openvswitch.org> >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > Regards, > Vladislav Odintsov > > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev