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.

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.

Maybe others could share their opinion on this too.  I'll wait a bit
with sending v5 until we clear this up.

>>
>>>>> +      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

Reply via email to