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 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