On Thu, Mar 08, 2012 at 12:29:38PM +0900, FUJITA Tomonori wrote:
> On Thu, 8 Mar 2012 09:55:57 +0900
> FUJITA Tomonori <[email protected]> wrote:
> 
> > ryu is a distributed NOS, that is, multiple ryu instances work
> > together. They need to share some information (e.g. set of ports in a
> > logically L2 network) by using some kinda storage, KVS, database, NFS,
> > or something else.
> > 
> > This adds the simple memcached server feature to ryu so that you can
> > develop and test ryu without setting up Memcached.
> > 
> > Several NoSQL implementations support Memcached protocol so you can
> > switch to one of these real NoSQL implementations.
> > 
> > Signed-off-by: FUJITA Tomonori <[email protected]>
> > ---
> >  bin/ryu-manager           |    6 +++++
> >  ryu/app/fake_memcached.py |   49 
> > +++++++++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 55 insertions(+), 0 deletions(-)
> >  create mode 100644 ryu/app/fake_memcached.py
> 
> On the top of the above patch, I like to convert the simple_isolation
> stuff to use memcached in the following way.
> 
> We need an abstraction layer to hide storage protocols (memcached,
> rdb, whatever) but I like to start with the straight conversion first.
> 
> In addition, we need to think about the data structures of the simple
> isolation. The current data structures is not ideal for simple storage
> like KVS. But again, I like to start with the straight conversion.

Makes sense. 
Instead of creating client each request, the connection can be passed
to constructor. something like
class MacToNetwork(object):
    def __init__(self, mc)
        self.mc = mc

Or if we don't want to change the signature for now,

class MacToNetwork(object):
    def __init__(self, nw)
        self.mc = memcache.Client(['127.0.0.1:11211'])


> =
> >From c9e795088bd3fbe5aced90cb39315785fd3b4e45 Mon Sep 17 00:00:00 2001
> From: FUJITA Tomonori <[email protected]>
> Date: Wed, 7 Mar 2012 19:21:36 -0800
> Subject: [PATCH] convert MacToNetwork to use memcached
> 
> Signed-off-by: FUJITA Tomonori <[email protected]>
> ---
>  ryu/controller/mac_to_network.py |   18 ++++++++++++------
>  1 files changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/ryu/controller/mac_to_network.py 
> b/ryu/controller/mac_to_network.py
> index bc18929..4bfe8dc 100644
> --- a/ryu/controller/mac_to_network.py
> +++ b/ryu/controller/mac_to_network.py
> @@ -14,6 +14,7 @@
>  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  
>  import logging
> +import memcache
>  
>  from ryu.exception import MacAddressDuplicated
>  from ryu.lib.mac import haddr_to_str
> @@ -24,20 +25,24 @@ LOG = logging.getLogger('ryu.controller.mac_to_network')
>  class MacToNetwork(object):
>      def __init__(self, nw):
>          self.mac_to_net = {}
> -        self.dpid = {}
> -        self.nw = nw

eliminate mac_to_net?

>  
>      def get_network(self, mac, default=None):
> -        return self.mac_to_net.get(mac, default)
> +        mc = memcache.Client(['127.0.0.1:11211'])
> +        net = mc.get(mac)
> +        if net:
> +            return net
> +        else:
> +            default

return default

>  
>      def add_mac(self, mac, nw_id, nw_id_external=None):
> -        _nw_id = self.mac_to_net.get(mac)
> +        mc = memcache.Client(['127.0.0.1:11211'])
> +        _nw_id = mc.get(mac)
>          if _nw_id == nw_id:
>              return
>  
>          # allow changing from nw_id_external to known nw id
>          if _nw_id is None or _nw_id == nw_id_external:
> -            self.mac_to_net[mac] = nw_id
> +            mc.set(mac, new_id)
>              LOG.debug('overwrite nw_id: mac %s nw old %s new %s',
>                        haddr_to_str(mac), _nw_id, nw_id)
>              return
> @@ -53,4 +58,5 @@ class MacToNetwork(object):
>          raise MacAddressDuplicated(mac=mac)
>  
>      def del_mac(self, mac):
> -        del self.mac_to_net[mac]
> +        mc = memcache.Client(['127.0.0.1:11211'])
> +        mc.delete(mac)
> -- 
> 1.7.4.4
> 
> 
> ------------------------------------------------------------------------------
> Virtualization & Cloud Management Using Capacity Planning
> Cloud computing makes use of virtualization - but cloud computing 
> also focuses on allowing computing to be delivered as a service.
> http://www.accelacomm.com/jaw/sfnl/114/51521223/
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 

-- 
yamahata

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to