Hi,
Thanks for the input and comments. This is really great.

I would like to propose the following staged development (enable to stabilize, test, and then optimize): 1. Stage 1 - have the agent detect a change, initially by polling. When the agent detects and update then it will contact the plugin for a detailed update about the network. 2. Stage 2 - Event driven support. One option is to have the operating system notify the agent (as suggested by Darragh) another is to have the VIF driver notify the agent. I am in favour of the latter. The VIF driver is essentially creating the new tap device or deleting the existing tap device. It seems logical that this would drive the update on the agent.

What I would like to do is a quick POC of the above and then write a detailed design of the flow so that we can all review. If it "compiles and runs" on paper then it will speed up the development, testing and deployment. It will also enable us to document for future reference. This will also save time with review and the ping/pong with the -1's.

Have a good weekend and thanks for the inputs and comments. Hopefully next week I'll have an update on the progress.
Thanks
Gary


On 05/11/2012 12:30 AM, Maru Newby wrote:
Thanks Darragh! That should cover kvm. And apparently it's possible to be notified of vif changes from xen/xcp too, a more xen-savvy co-worker is tracking down details.

Gary, it sounds like it will be possible to have the agent notified directly of device changes. What are you thoughts as to modifying your proposal to take this into account?

Cheers,


Maru


On 2012-05-10, at 2:06 PM, Darragh OReilly wrote:


maybe udev events rules/actions could be installed for add/remove tap device events
http://www.reactivated.net/writing_udev_rules.html#external-run

    ------------------------------------------------------------------------
    *From:* Maru Newby <mne...@internap.com <mailto:mne...@internap.com>>
    *To:* gkot...@redhat.com <mailto:gkot...@redhat.com>
    *Cc:* Christopher Wright <chr...@redhat.com
    <mailto:chr...@redhat.com>>; netstack@lists.launchpad.net
    <mailto:netstack@lists.launchpad.net>
    *Sent:* Thursday, 10 May 2012, 18:38
    *Subject:* Re: [Netstack] Scalable
    Agents(https://blueprints.launchpad.net/quantum/+spec/scalable-agent-comms)

    Hi Gary,

    I appreciate the effort you've put into condensing the options.

    I agree with your suggestion that option 1 is a good starting
    point.  How will the agent discover changes to tap devices?  Can
    an agent register for events from linux/kvm or xen, or would the
    agent just poll?  For all I know agents may do this already, so I
    apologize if this is a silly question.

    Regarding option 2, I still see no reason to have the vif driver
    talk to the agent directly.  Ensuring a single point of contact
    between quantum clients (of which the vif driver is one) and
    quantum, namely the rest interface, limits complexity and will be
    easier to maintain and test.  If and when performance or other
    concerns require direct vif driver to agent communication, we can
    go down that road, but as of now it's answering a question that
    hasn't been asked.  YAGNI.

    I would also argue that even RPC communication between the plugin
    and agent is gold-plating.  The problem at hand is that database
    polling doesn't scale well.  The simple answer is for the plugin
    and agent to communicate directly rather than through a database
    intermediary.  Adding RPC to the mix is an implementation detail,
    pure and simple, and is not cost-free.  RPC introduces queue
    dependency that can be problematic to debug and as we've seen in
    nova can cause performance issues all its own.

    I'm all for leaving us open going forward to introduce an RPC
    dependency, but I think the most important thing is to create a
    clean communication interface between plugin and agent.  The
    initial implementation can be something simple (and relatively
    dependency free) like secured http.  The semantics for
    implementing and debugging http communication are well-known to
    all of us.  If and when RPC becomes necessary, it will be
    straightforward to plug in a new transport driver.

    Let's keep it simple - distributed computing is complicated enough!

    Cheers,


    Maru

    On 2012-05-10, at 8:22 AM, Gary Kotton wrote:

    Hi,
    Below is a table that lists a number of options, a short
    description, their advantages and disadvantages. Hopefully this
    can give an idea of the scope and complexity.

    *Option*
        *Description*
        *Advantages*
        *Disadvantages*
    1 .Agent driving data retrieval from plugin
        The agent maintains a list of tap devices. If there is a new
    tap device then the agent will request the network information
    for this tap device from the quantum plugin. In the case of the
    open source ovs and lb (linuxbridge) plugins this is tap + 11
    letters of the attachment id.
    The agent will send an RCP update about the delta to the plugin.
    The plugin will answer accordingly. For example if one or more
    tap devices are detected then these are sent to the plugin. For
    each new tap device the plugin will sent the network information
    (tags etc) and set the database attachment as up. For deletion
    they will be removed (or set as down).
        Simple
    Self contained in Quantum
        If there is more than 1 attachment ID with the same prefix of
    11 characters then this will not work (this currently is a bug)
    The agent will still have to poll the network interfaces.
    2 .VIF driver driving retrieval from plugin
        The VIF driver updates the plugin about a change, which inturn
    updates the relevant agent (this was described in the link
    https://docs.google.com/document/d/1MbcBA2Os4b98ybdgAw2qe_68R1NG6KMh8zd
    )
        Event driven.
    No polling
        VIF driver and agents will need to share communication channels
    3. Plugin broadcasting
        When the plugin receives a change it broadcasts the change to
    all of the registered agents
        Relatively simple
        Lots of unnecessary messages to agents that do not need to deal
    with the traffic


    I think that option #1 is a good start. This can later be
    optimized to option #2.

    Thanks
    Gary

    On 05/10/2012 10:05 AM, Gary Kotton wrote:
    On 05/10/2012 12:55 AM, Sumit Naiksatam (snaiksat) wrote:
    Hi Gary,

    Thanks for initiating this. A couple of comments/questions -

    1. Do we really need the VIF driver to communicate the agent's
    identity;
    I am referring to the agent ID being sent by the VIF driver in
    the
    message? In general, I am not sure if there is a need to have
    the VIF
    driver send messages/notifications in the first place, but I
    perhaps
    it's being included as a capability in the framework?
    At the moment the open source plugins are not aware of the
    agents. The agents poll the data base for updates. The agent ID
    enables a agent to regsiter with the plugin, this in trrun
    enables the plugin to send a update to the specific agent. The
    update is initiated by the VIF driver. In my opinion this does
    the following:
    1. updates the agents as soon as possible regarding a network
    change
    2. limits traffic on the network
    3. removes the database interface from the agents
    2. One model I was thinking of (which is kind of inline with the
    existing agent implementations), is where the agents are
    smart, and they
    know what to do in response to changes in the state of the
    logical
    Quantum resources. In such cases, the Quantum plugin need not
    have to
    keep track of sending a message to a particular agent.
    Instead, can we
    have broadcast messages from the plugin to all the agents? If
    the plugin
    has to unicast messages to specific agents, then it needs to
    maintain a
    lot more state/topology information which should not be
    mandated for
    this sole reason.
    I too thought about this option. In a sense the above proposal
    is an optimization of what you mention. This comes at the cost
    of complexity. The broadcast option is nice when the number of
    agents is small. When this is large, then for each network
    update there will be NUMBER_OF_AGENT messages sent for each
    update. The advantage of what you mention is that the code is
    self contained in Quantum.

    It may be better to start with the broadcast and then deal with
    the optimizations afterwards.

    Thanks
    Gary

    Thanks,
    ~Sumit.

    -----Original Message-----
    From: netstack-bounces+snaiksat=cisco....@lists.launchpad.net
    <mailto:netstack-bounces+snaiksat=cisco....@lists.launchpad.net>
    [mailto:netstack-bounces+snaiksat=cisco....@lists.launchpad.net]
    On
    Behalf Of Gary Kotton
    Sent: Wednesday, May 09, 2012 4:27 AM
    To:<netstack@lists.launchpad.net>
    <mailto:netstack@lists.launchpad.net>
    Subject: [Netstack] Scalable
    Agents(https://blueprints.launchpad.net/quantum/+spec/scalable-agent-

    comms)

    Hi,
    I have added a very high level description on how to address the
    issue.
    This can be seen at:

    https://docs.google.com/document/d/1MbcBA2Os4b98ybdgAw2qe_68R1NG6KMh8zd

    ZKgOlpvg/edit
    Comments will be greatly appreciated.
    Questions:
    1. Do we want agents to be backward compatible (that is, still
    maintain
    the polling code)
    2. The generation of the Agent ID
    3. Any other ideas or thoughts about the matter?
    I'd like to go ahead with a POC and implement this.
    Thanks
    Gary

-- Mailing list: https://launchpad.net/~netstack
    <https://launchpad.net/%7Enetstack>
    Post to     : netstack@lists.launchpad.net
    <mailto:netstack@lists.launchpad.net>
    Unsubscribe : https://launchpad.net/~netstack
    <https://launchpad.net/%7Enetstack>
    More help   : https://help.launchpad.net/ListHelp



-- Mailing list: https://launchpad.net/~netstack
    <https://launchpad.net/%7Enetstack>
    Post to     : netstack@lists.launchpad.net
    <mailto:netstack@lists.launchpad.net>
    Unsubscribe : https://launchpad.net/~netstack
    <https://launchpad.net/%7Enetstack>
    More help   : https://help.launchpad.net/ListHelp


-- Mailing list: https://launchpad.net/~netstack
    <https://launchpad.net/%7Enetstack>
    Post to    : netstack@lists.launchpad.net
    <mailto:netstack@lists.launchpad.net>
    Unsubscribe : https://launchpad.net/~netstack
    <https://launchpad.net/%7Enetstack>
    More help  : https://help.launchpad.net/ListHelp




-- 
Mailing list: https://launchpad.net/~netstack
Post to     : netstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~netstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to