On Wed, Jul 31, 2024 at 4:20 PM Numan Siddique <num...@ovn.org> wrote: > > On Wed, Jul 31, 2024 at 11:48 AM Ilya Maximets <i.maxim...@ovn.org> wrote: > > > > On 7/31/24 17:05, Dumitru Ceara wrote: > > > On 7/31/24 16:40, Ilya Maximets wrote: > > >> On 7/31/24 16:17, Dumitru Ceara wrote: > > >>> On 7/31/24 16:07, Ilya Maximets wrote: > > >>>> On 7/31/24 16:04, Ilya Maximets wrote: > > >>>>> On 7/31/24 11:05, Dumitru Ceara wrote: > > >>>>>> This will represent a unified place to store IPFIX observation > > >>>>>> domain ID > > >>>>>> configurations for sampling applications (currently only drop > > >>>>>> sampling > > >>>>>> is supported as application but following commits will add more). > > >>>>>> > > >>>>>> Acked-by: Mark Michelson <mmich...@redhat.com> > > >>>>>> Signed-off-by: Dumitru Ceara <dce...@redhat.com> > > >>>>>> --- > > >>>>>> V4: > > >>>>>> - Addressed Ales' comments: > > >>>>>> - fix up indentation > > >>>>>> - bump NB schema version > > >>>>>> - Added Mark's ack. > > >>>>>> --- > > >>>>>> northd/automake.mk | 2 + > > >>>>>> northd/en-lflow.c | 5 ++ > > >>>>>> northd/en-sampling-app.c | 120 > > >>>>>> +++++++++++++++++++++++++++++++++++++++ > > >>>>>> northd/en-sampling-app.h | 51 +++++++++++++++++ > > >>>>>> northd/inc-proc-northd.c | 10 +++- > > >>>>>> northd/northd.h | 1 + > > >>>>>> ovn-nb.ovsschema | 23 +++++++- > > >>>>>> ovn-nb.xml | 17 ++++++ > > >>>>>> tests/ovn-northd.at | 17 ++++++ > > >>>>>> 9 files changed, 242 insertions(+), 4 deletions(-) > > >>>>>> create mode 100644 northd/en-sampling-app.c > > >>>>>> create mode 100644 northd/en-sampling-app.h > > >>>>> > > >>>>> <snip> > > >>>>> > > >>>>>> diff --git a/ovn-nb.xml b/ovn-nb.xml > > >>>>>> index 6376320d31..b96b0b34ed 100644 > > >>>>>> --- a/ovn-nb.xml > > >>>>>> +++ b/ovn-nb.xml > > >>>>>> @@ -5093,4 +5093,21 @@ or > > >>>>>> </column> > > >>>>>> </group> > > >>>>>> </table> > > >>>>>> + <table name="Sampling_App"> > > >>>>>> + <column name="name"> > > >>>>> > > >>>>> Maybe this should be 'type' instead of a 'name'? > > >>>>> 'name' makes me think that I can create multiple of them > > >>>>> with different parameters, but that's not the case. > > >>>>> > > >>> > > >>> I guess it depends a bit how you look at it. It's just a 1:1 mapping > > >>> between an "OVN application" (ACL, default drops) and an integer ID. > > >>> I'm not sure why you get the impression that you can create multiple of > > >>> them, there's an explicit index on 'name' that doesn't allow that. > > >> > > >> Index is rather indirect way of saying that there should be only one > > >> instance > > >> of each application. > > >> > > >> The word 'name' says to me that I can choose an arbitrary one, but there > > >> is a > > >> predefined list here. So, it is actually a type and not a name. > > >> > > > > > > Hmm, OK, I guess I can live with 'type'. > > > > > >>> > > >>> I could change it to 'type' but for me 'name' made more sense. > > >> > > >> Another way to represent the same thing is to have a table with a single > > >> row > > >> with a map from enum to an integer. But also, why is it a separate > > >> table at all? > > >> Why not a column in the NB_Global table? > > >> > > >> Something like: > > >> > > >> "NB_Global": { > > >> ... > > >> > > >> "sample_domain_ids": { > > >> "type": {"key": {"type": "string", > > >> "enum": ["set", ["drop", "acl-new", "acl-est"]]}, > > >> "value": {"type": "integer", > > >> "minInteger": 1, > > >> "maxInteger": 255}}} > > >> > > >> ? > > >> > > > > > > We could. > > > > > >> This way we don't need a table, don't need an index or strange column > > >> names, > > > > > > I think this is a matter of personal preference. To me it doesn't seem > > > "strange", it makes sense. But I wrote this code so I'm of course biased. > > > > > >> likely don't need a separate I-P node. We're just turning > > >> debug_drop_domain_id > > >> into a new column with a set. > > >> > > > > > > But we'd still need most of the logic that's currently in > > > en-sampling-app.c. That would have to move to en-global-config.c > > > because the "en_lflow" incremental processing node depends on > > > "en_global_config" whose data is built based on the "en_nb_nb_global" > > > database node. > > > > Sure, I just meant that we'd not need a separate node. We'll need > > the logic for the new column. > > > > > > > > So, with that in mind, in my opinion it seems cleaner if we have a > > > sampling_app table to define this kind of mapping instead of stuffing > > > more random feature-specific configuration fields in NB_Global. But I'm > > > open to discussion. > > > > NB_Global carries all sorts of global configuration including specific > > configuration for various features. Observation IDs for different > > sampling types is a global configuration, it doesn't depend on anything > > else. It would make some sense to have a separate table if there were > > more configuration options for each type, not only ID, but I'm not sure > > what else we would need there. Even then it would probably make more > > sense as a map in nb-global from type to a reference to a configuration > > table. > > > > > > > > Maybe others could share their opinion on this too. I'll wait a bit > > > with sending v5 until we clear this up. > > > > Sure. > > My 2 cents. > > 1. I'd prefer "type" instead of "name" as the column name in the > Sample_App table. > > Also I see in a few places, "name" and "type" are used interchangeably. > > For example, the below enum in this patch (defined in en-sampling-app.h) > > /* Supported sampling application types. */ > enum sampling_app_type { > SAMPLING_APP_DROP_DEBUG, > SAMPLING_APP_ACL_NEW_TRAFFIC, > SAMPLING_APP_ACL_EST_TRAFFIC, > SAMPLING_APP_MAX, > }; > > Also in patch 5, the documentation in the "metadata" column of the > "Sample" table > references this as type. > > 2. Regarding the discussion on separate Sample_App table vs a column > in NB_Global, > my preference would be to have a separate table which this patch proposes. > I think it's easier to manage the I-P handling this way. NB Global > engine node > is an input to northd, lflow, mac binding aging and fdb aging engine nodes. > Any change to nb_global due to Sample (although I expect very few > and less frequent > changes to Sample_App table) would also trigger handlers of these nodes > (which is not an issue and should not be a big deal to handle), > Whereas only lflow engine depends on Sample App engine node. >
With the column name change from "name" to "type" addressed: Acked-by: Numan Siddique <num...@ovn.org> Numan > > Thanks > Numan > > > > > > > > > > > > > > > >>> > > >>>>>> + The name of the application to be configured for sampling. > > >>>>>> Currently > > >>>>>> + supported options are: "drop-sampling", > > >>>>>> "acl-new-traffic-sampling", > > >>>>>> + "acl-est-traffic-sampling". > > >>>>> > > >>>>> Do we really need the '-sampling' part in here? There are types > > >>>> > > >>>> s/There/These/ > > >>>> > > >>>>> of the sampling application after all. Also, 'traffic' may also > > >>>> > > >>>> s/also// > > >>>> > > >>>>> not be needed as we're sampling traffic, there is nothing else > > >>>>> to sample. > > >>>>> > > >>> > > >>> OK, I'll change this to "drop"/ "acl-new" / "acl-est". > > >>> > > >>>>>> + </column> > > >>>>>> + <column name="id"> > > >>>>>> + The identifier to be encoded in the (IPFIX) samples generated > > >>>>>> for this > > >>>>> > > >>>>> IPFIX here may be confusing, because collector set may not use IPFIX. > > >>>>> > > > > > > When I initially wrote this patch there was only IPFIX, I'll update it. > > > > > >>>>>> + type of application. This identifier is used as part of the > > >>>>>> sample's > > >>>>>> + observation domain ID. > > >>>>>> + </column> > > >>>>>> + <group title="Common Columns"> > > >>>>>> + <column name="external_ids"> > > >>>>>> + See <em>External IDs</em> at the beginning of this document. > > >>>>>> + </column> > > >>>>>> + </group> > > >>>>>> + </table> > > >>>>>> </database> > > >>>>>> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at > > >>>>>> index 27e8ec3388..b31da0063f 100644 > > >>>>>> --- a/tests/ovn-northd.at > > >>>>>> +++ b/tests/ovn-northd.at > > >>>>>> @@ -12479,6 +12479,23 @@ check_engine_stats lflow recompute nocompute > > >>>>>> > > >>>>>> AT_CLEANUP > > >>>>>> > > >>>>>> +OVN_FOR_EACH_NORTHD_NO_HV([ > > >>>>>> +AT_SETUP([Sampling_App incremental processing]) > > >>>>>> + > > >>>>>> +ovn_start > > >>>>>> + > > >>>>>> +check as northd ovn-appctl -t ovn-northd inc-engine/clear-stats > > >>>>>> + > > >>>>>> +ovn-nbctl create Sampling_App name="acl-new-traffic-sampling" > > >>>>>> id="42" > > >>>>>> +check_row_count nb:Sampling_App 1 > > >>>>>> +check_engine_stats sampling_app recompute nocompute > > >>>>>> +check_engine_stats northd norecompute nocompute > > >>>>>> +check_engine_stats lflow recompute nocompute > > >>>>>> +CHECK_NO_CHANGE_AFTER_RECOMPUTE > > >>>>>> + > > >>>>>> +AT_CLEANUP > > >>>>>> +]) > > >>>>>> + > > >>>>>> OVN_FOR_EACH_NORTHD_NO_HV([ > > >>>>>> AT_SETUP([NAT with match]) > > >>>>>> ovn_start > > >>>>> > > >>>> > > >>> > > >>> Thanks, > > >>> Dumitru > > >>> > > >> > > > > > > > _______________________________________________ > > 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