Commit bea6f023 authored by Thibault VINCENT's avatar Thibault VINCENT
Browse files

add missing files in repo

parent 71bd770a
Loading
Loading
Loading
Loading

ccnode/utils.py

0 → 100644
+52 −0
Original line number Diff line number Diff line
# -*- coding: utf-8 -*-

from threading import Lock

class RWLock(object):
    '''
    '''
    def __init__(self):
        self._mutex = Lock()
        self._writemutex = Lock()
        self._readers = 0
        self._writers = 0
        self.read = self._RLock(self)
        self.write = self._WLock(self)
    
    class _Lock(object):
        '''
        '''
        def __init__(self, rwlock):
            self._parent = rwlock
    
    class _WLock(_Lock):
        '''
        '''
        def __enter__(self):
            with self._parent._mutex:
                self._parent._writers += 1
            self._parent._writemutex.acquire()
        
        def __exit__(self, exc_type, exc_value, traceback):
            with self._parent._mutex:
                self._parent._writers -= 1
            self._parent._writemutex.release()
    
    class _RLock(_Lock):
        '''
        '''
        def __enter__(self):
            self._parent._mutex.acquire()
            if self._parent._writers > 0 or self._parent._readers == 0:
                self._parent._mutex.release()
                self._parent._writemutex.acquire()
                self._parent._mutex.acquire()
            self._parent._readers += 1
            self._parent._mutex.release()
        
        def __exit__(self, exc_type, exc_value, traceback):
            self._parent._mutex.acquire()
            self._parent._readers -= 1
            if self._parent._readers == 0:
                self._parent._writemutex.release()
            self._parent._mutex.release()

ccnode/xen.py

0 → 100644
+28 −0
Original line number Diff line number Diff line
# -*- coding: utf-8 -*-

from libvirtwrapper import LibvirtHypervisor


class XenHypervisor(LibvirtHypervisor):
    '''
    Base class of a Xen Hypervisor
    '''
    _instance = None
    
    def __init__(self):
        '''
        '''
        super(XenHypervisor, self).__init__('xen')
    
    def __new__(cls, *args, **kwargs):
        '''
        .. note::
            We use singleton design pattern to force only a single instance
            of our libvirt hypervisor handle, it's essential since we connect
            with libvirt only on localhost so we must assure one single 
            connection to the hypervisor
        '''
        if cls._instance is None:
            cls._instance = super(XenHypervisor, cls).__new__(cls, *args,
                                                                    **kwargs)
        return cls._instance