On Wed, Jul 31, 2024 at 11:48 AM Ilya Maximets <[email protected]> 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 <[email protected]>
> >>>>>> Signed-off-by: Dumitru Ceara <[email protected]>
> >>>>>> ---
> >>>>>> 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.


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
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to