Loading cloudcontrol/node/hypervisor/jobs.py +1 −57 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ import logging from os.path import exists as path_exists from time import sleep from hashlib import md5 from collections import deque from StringIO import StringIO from subprocess import CalledProcessError from xml.etree import ElementTree as et Loading @@ -15,7 +14,7 @@ import pyev from cloudcontrol.node.exc import TunnelError, DRBDAllocationError, DRBDError from cloudcontrol.node.jobs import BaseThreadedJob from cloudcontrol.node.utils import subproc_call from cloudcontrol.node.utils import SocketBuffer, subproc_call logger = logging.getLogger(__name__) Loading Loading @@ -249,61 +248,6 @@ class ExportVolume(BaseThreadedJob): self.clean_fds() class SocketBuffer(deque): """Holds bytes in a list. This class don't handle maximum size but instead give help like handling count automatically. """ def __init__(self, max_len=8 * 64 * 1024): deque.__init__(self) self.max_len = max_len self.current_len = 0 def append(self, x): deque.append(self, x) self.current_len += len(x) def appendleft(self, x): deque.appendleft(self, x) self.current_len += len(x) def clear(self): deque.clear(self) self.current_len = 0 def extend(self, iterable): raise NotImplementedError def extendleft(self, iterable): raise NotImplementedError def pop(self): elt = deque.pop(self) self.current_len -= len(elt) return elt def popleft(self): elt = deque.popleft(self) self.current_len -= len(elt) return elt def remove(value): raise NotImplementedError def reverse(self): raise NotImplementedError def rotate(self, n): raise NotImplementedError def is_full(self): return self.current_len >= self.max_len def is_empty(self): return self.current_len == 0 class TCPTunnel(object): """Handles a TCP tunnel.""" Loading cloudcontrol/node/utils.py +56 −0 Original line number Diff line number Diff line import subprocess from collections import deque def and_(iter): Loading @@ -25,3 +26,58 @@ def subproc_call(args, stdin=None): raise subprocess.CalledProcessError(proc.returncode, 'Error while executing command') return result class SocketBuffer(deque): """Holds bytes in a list. This class don't handle maximum size but instead give help like handling count automatically. """ def __init__(self, max_len=8 * 64 * 1024): deque.__init__(self) self.max_len = max_len self.current_len = 0 def append(self, x): deque.append(self, x) self.current_len += len(x) def appendleft(self, x): deque.appendleft(self, x) self.current_len += len(x) def clear(self): deque.clear(self) self.current_len = 0 def extend(self, iterable): raise NotImplementedError def extendleft(self, iterable): raise NotImplementedError def pop(self): elt = deque.pop(self) self.current_len -= len(elt) return elt def popleft(self): elt = deque.popleft(self) self.current_len -= len(elt) return elt def remove(value): raise NotImplementedError def reverse(self): raise NotImplementedError def rotate(self, n): raise NotImplementedError def is_full(self): return self.current_len >= self.max_len def is_empty(self): return self.current_len == 0 Loading
cloudcontrol/node/hypervisor/jobs.py +1 −57 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ import logging from os.path import exists as path_exists from time import sleep from hashlib import md5 from collections import deque from StringIO import StringIO from subprocess import CalledProcessError from xml.etree import ElementTree as et Loading @@ -15,7 +14,7 @@ import pyev from cloudcontrol.node.exc import TunnelError, DRBDAllocationError, DRBDError from cloudcontrol.node.jobs import BaseThreadedJob from cloudcontrol.node.utils import subproc_call from cloudcontrol.node.utils import SocketBuffer, subproc_call logger = logging.getLogger(__name__) Loading Loading @@ -249,61 +248,6 @@ class ExportVolume(BaseThreadedJob): self.clean_fds() class SocketBuffer(deque): """Holds bytes in a list. This class don't handle maximum size but instead give help like handling count automatically. """ def __init__(self, max_len=8 * 64 * 1024): deque.__init__(self) self.max_len = max_len self.current_len = 0 def append(self, x): deque.append(self, x) self.current_len += len(x) def appendleft(self, x): deque.appendleft(self, x) self.current_len += len(x) def clear(self): deque.clear(self) self.current_len = 0 def extend(self, iterable): raise NotImplementedError def extendleft(self, iterable): raise NotImplementedError def pop(self): elt = deque.pop(self) self.current_len -= len(elt) return elt def popleft(self): elt = deque.popleft(self) self.current_len -= len(elt) return elt def remove(value): raise NotImplementedError def reverse(self): raise NotImplementedError def rotate(self, n): raise NotImplementedError def is_full(self): return self.current_len >= self.max_len def is_empty(self): return self.current_len == 0 class TCPTunnel(object): """Handles a TCP tunnel.""" Loading
cloudcontrol/node/utils.py +56 −0 Original line number Diff line number Diff line import subprocess from collections import deque def and_(iter): Loading @@ -25,3 +26,58 @@ def subproc_call(args, stdin=None): raise subprocess.CalledProcessError(proc.returncode, 'Error while executing command') return result class SocketBuffer(deque): """Holds bytes in a list. This class don't handle maximum size but instead give help like handling count automatically. """ def __init__(self, max_len=8 * 64 * 1024): deque.__init__(self) self.max_len = max_len self.current_len = 0 def append(self, x): deque.append(self, x) self.current_len += len(x) def appendleft(self, x): deque.appendleft(self, x) self.current_len += len(x) def clear(self): deque.clear(self) self.current_len = 0 def extend(self, iterable): raise NotImplementedError def extendleft(self, iterable): raise NotImplementedError def pop(self): elt = deque.pop(self) self.current_len -= len(elt) return elt def popleft(self): elt = deque.popleft(self) self.current_len -= len(elt) return elt def remove(value): raise NotImplementedError def reverse(self): raise NotImplementedError def rotate(self, n): raise NotImplementedError def is_full(self): return self.current_len >= self.max_len def is_empty(self): return self.current_len == 0