On 8/1/24 00:57, Numan Siddique wrote:
> On Wed, Jul 31, 2024 at 4:20 PM Numan Siddique <[email protected]> wrote:
>>
>> 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.
>>

Ack.

>> 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 <[email protected]>
> 

Thanks, Numan and Ilya!  I'll make these changes and post v5.

Regards,
Dumitru

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to