An example I can think of is a multicast forwarding table with index columns:
- mcast address
- UUID list of outgoing interfaces (which are some sort of weak-refs to 
Interface table entries)

It may be desirable to have a mcast table entry garbage collected when when all 
its participating interfaces are deleted.
Maybe new category of weak refs can be employed - one that garbage collects an 
entry when it's self-to-many relationship is reduced to self-to-zero.


> -----Original Message-----
> From: Ben Pfaff [mailto:b...@ovn.org]
> Sent: Wednesday, January 20, 2016 1:46 PM
> To: Srivatsan, Srinivasan
> Cc: dev@openvswitch.org; disc...@openvswitch.org; Ansari, Shad
> Subject: Re: [ovs-dev] NTP support with OpenSwitch
> 
> The schema constraints that OVS supports certainly aren't perfect.
> There are plenty of situations where one can come up with better kinds
> of constraints.  Maybe you have come up with one.  If you're going to
> propose adding a new kind of constraint, then I think it would be
> worthwhile to think through whether it will be useful in many
> situations.  For example, do you have use cases beyond NTP?  If it's a
> useful general-purpose construct, then I'm more in favor of adding it.
> 
> On Wed, Jan 13, 2016 at 02:38:38AM +0000, Srivatsan, Srinivasan wrote:
> > +Adding Michael
> >
> > Regards
> > Srinivasan
> >
> >
> >
> >
> > On 1/12/16, 4:16 PM, "dev on behalf of Srivatsan, Srinivasan" <dev-
> boun...@openvswitch.org on behalf of srinivasan.srivat...@hpe.com> wrote:
> >
> > >Hi,
> > >
> > >I am Srinivasan and am trying to add Network Time Protocol support for
> OpenSwitch. Openswitch uses OVSDB as the central db for status/configuration
> and inter module communication. From the NTP point of view, we are trying to
> define how can modulate NTP to accommodate into the ovsdb schema design.
> > >
> > >About NTP client:
> > >NTP servers local/remote synchronize time information to the connected
> NTP clients. NTP clients are require to configure servers based on their 
> liking.
> What the NTP client configuration should allow is configuring of different NTP
> servers within different VRFs. So following configurations are correct in 
> terms of
> NTP client configuration "ntp server 1.1.1.1 use_vrf vrf1" and "ntp server 
> 1.1.1.1
> use_vrf vrf2".
> > >
> > >Schema Design:
> > >Now to define a schema, we have a top level System table which refers to
> NTP table. NTP table can have multiple rows of server
> configuration/associations. Each association should be able to support VRF
> configuration per server configuration. Lets say we have the following columns
> in the NTP table:
> > >- "ip_address" for referring to the server ip address and
> > >- "vrf" to refer to the vrf associated with this server.
> > >
> > >If we have weak references from NTP -> VRF then we should be able to use
> NTP:"ip_address" and NTP:”vrf" as the index for the NTP table. Overall it 
> looks
> like this:
> > >
> > >    +---------+
> > >    | SYSTEM  |
> > >    +---------+
> > >    |         |
> > >+---v-+    +--v--+
> > >| NTP +----> VRF |
> > >|     +---->     |
> > >+-----+    +——---+
> > >
> > >- Multiple NTP rows can refer to the same VRF reference.
> > >- Multiple NTP rows can have same NTP:"ip_address" but should have a
> different VRF:"reference"
> > >
> > >Pros of doing this schema:
> > >- Simpler model of mapping NTP -> VRF instead of using VRF -> NTP since we
> should not have the notion of time split per VRF.
> > >- Rest can be nicely integrated into system/ntp/vrf or system/ntp/*
> > >- vtysh cli/show/config implementation is easier to get all the information
> about NTP at one go.
> > >
> > >Issue:
> > >Step1: If we have 2 VRFs : "vrf1" and "vrf2", and if it maps to different 
> > >rows in
> the NTP table with same NTP:"ip_address".
> > >Step2: So the NTP table has two rows: 1st row with NTP:"ip_address" as
> 1.1.1.1 and NTP:"vrf" as uuid_of("vrf1") and 2nd row with NTP:"ip_address" as
> 1.1.1.1 and NTP:"vrf" as uuid_of("vrf2").
> > >Step3: Now lets say user deletes "vrf1" from the VRF table, which would
> trigger NTP:"vrf" for the 1st row to point to []. This command executes
> successfully and it removes the VRF reference and it invalidates entry within 
> the
> NTP table.
> > >Step4: Now the user chooses to delete "vrf2" from the VRF table, which
> would trigger a similar update to earlier but it would fail because you cannot
> have two entries with the same index ie NTP:"ip_address" and NTP:"vrf"
> combination.
> > >
> > >Unless the information within NTP table is cleared by a garbage collection
> program, it would not be possible for Step4 to be executed successfully.
> > >
> > >From what Michael points out, Today OVSDB schema has two modes of
> references
> > >1)      “Strong” – target row can’t be removed as long as it has strong
> references leading to it.
> > >2)      “Weak” – target row can be deleted and the referencing cell will by
> NULLed.
> > >We use “weak” references, where one of the inter-referenced tables has to
> be updated very frequently.
> > >The downside is that rows that get their cells NULLed are generally invalid
> rows and have to be garbage collected by somebody.
> > >Additionally NULLed cells might cause index constraints violations, in 
> > >which
> case, the target row would again not be deleted.
> > >
> > >Ideal Solution:
> > >What we would require in such a situation to support NTP is to have a 
> > >"weak-
> gc" that would allow the target row to be deleted instead of setting the
> reference to NULL.
> > >
> > >I would like to hear your thoughts on whether you've encountered features
> where we would want to support something similar to this. Do we know of any
> work-in-progress patches which we can use to do this ? Or is there a feature
> which has handled this differently.
> > >
> > >Thanks
> > >Srinivasan
> > >_______________________________________________
> > >dev mailing list
> > >dev@openvswitch.org
> > >http://openvswitch.org/mailman/listinfo/dev
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to