Exemplo n.º 1
0
 def test_write(self, _open):
     request = Mock()
     path = '/tmp/123'
     Pending._write(request, path)
     _open.assert_called_once_with(path, 'w+')
     _open.return_value.write.assert_called_once_with(request.dump.return_value)
     _open.return_value.close.assert_called_once_with()
Exemplo n.º 2
0
 def test_commit_not_found(self, unlink):
     sn = '123'
     path = '/tmp/123'
     p = Pending('')
     p.journal = {sn: path}
     p.commit('invalid')
     self.assertFalse(unlink.called)
     self.assertEqual(p.journal, {sn: path})
Exemplo n.º 3
0
 def test_commit_not_found(self, unlink):
     sn = '123'
     path = '/tmp/123'
     p = Pending('')
     p.journal = {sn: path}
     p.commit('invalid')
     self.assertFalse(unlink.called)
     self.assertEqual(p.journal, {sn: path})
Exemplo n.º 4
0
 def test_commit(self, unlink):
     sn = '123'
     path = '/tmp/123'
     p = Pending('')
     p.journal = {sn: path}
     p.commit(sn)
     unlink.assert_called_once_with(path)
     self.assertEqual(p.journal, {})
Exemplo n.º 5
0
 def test_commit(self, unlink):
     sn = '123'
     path = '/tmp/123'
     p = Pending('')
     p.journal = {sn: path}
     p.commit(sn)
     unlink.assert_called_once_with(path)
     self.assertEqual(p.journal, {})
Exemplo n.º 6
0
 def __init__(self, plugin):
     """
     :param plugin: A plugin.
     :type plugin: gofer.agent.plugin.Plugin
     """
     Thread.__init__(self, name='scheduler:%s' % plugin.name)
     self.plugin = plugin
     self.pending = Pending(plugin.name)
     self.setDaemon(True)
Exemplo n.º 7
0
    def test_write(self, _open):
        def _enter():
            return _open.return_value

        def _exit(*unused):
            _open.return_value.close()

        _open.return_value.__enter__ = Mock(side_effect=_enter)
        _open.return_value.__exit__ = Mock(side_effect=_exit)
        request = Mock()
        path = '/tmp/123'
        Pending._write(request, path)
        _open.assert_called_once_with(path, 'w+')
        _open.return_value.write.assert_called_once_with(request.dump.return_value)
        _open.return_value.close.assert_called_once_with()
Exemplo n.º 8
0
    def test_write(self, _open):
        def _enter():
            return _open.return_value

        def _exit(*unused):
            _open.return_value.close()

        _open.return_value.__enter__ = Mock(side_effect=_enter)
        _open.return_value.__exit__ = Mock(side_effect=_exit)
        request = Mock()
        path = '/tmp/123'
        Pending._write(request, path)
        _open.assert_called_once_with(path, 'w+')
        _open.return_value.write.assert_called_once_with(
            request.dump.return_value)
        _open.return_value.close.assert_called_once_with()
Exemplo n.º 9
0
 def __init__(self, plugin):
     """
     :param plugin: A plugin.
     :type plugin: gofer.agent.plugin.Plugin
     """
     Thread.__init__(self, name='scheduler:%s' % plugin.name)
     self.plugin = plugin
     self.pending = Pending(plugin.name)
     self.setDaemon(True)
Exemplo n.º 10
0
class Scheduler(Thread):
    """
    The pending request scheduler.
    Processes the *pending* queue.
    """
    
    def __init__(self, plugin):
        """
        :param plugin: A plugin.
        :type plugin: gofer.agent.plugin.Plugin
        """
        Thread.__init__(self, name='scheduler:%s' % plugin.name)
        self.plugin = plugin
        self.pending = Pending(plugin.name)
        self.setDaemon(True)

    def run(self):
        """
        Read the pending queue and dispatch requests
        to the plugin thread pool.
        """
        while not Thread.aborted():
            request = self.pending.get()
            try:
                task = Task(self.plugin, request, self.pending.commit)
                self.plugin.pool.run(task)
            except Exception:
                self.pending.commit(request.sn)
                log.exception(request.sn)

    def add(self, request):
        """
        Add a request to be scheduled.
        :param request: A request to be scheduled.
        :rtype request: gofer.messaging.Document
        """
        self.pending.put(request)

    def shutdown(self):
        """
        Shutdown the scheduler.
        """
        self.abort()
Exemplo n.º 11
0
 def test_read(self, unlink, _open):
     body = '{"A": 1}'
     _open.return_value.read.return_value = body
     path = '/tmp/123'
     document = Pending._read(path)
     _open.assert_called_once_with(path)
     _open.return_value.read.assert_called_once_with()
     _open.return_value.close.assert_called_once_with()
     self.assertFalse(unlink.called)
     self.assertEqual(document.__dict__, {'A': 1})
Exemplo n.º 12
0
 def test_read_invalid_json(self, unlink, _open):
     body = '__invalid__'
     _open.return_value.read.return_value = body
     path = '/tmp/123'
     document = Pending._read(path)
     _open.assert_called_once_with(path)
     _open.return_value.read.assert_called_once_with()
     _open.return_value.close.assert_called_once_with()
     unlink.assert_called_once_with(path)
     self.assertEqual(document, None)
Exemplo n.º 13
0
class Scheduler(Thread):
    """
    The pending request scheduler.
    Processes the *pending* queue.
    """
    def __init__(self, plugin):
        """
        :param plugin: A plugin.
        :type plugin: gofer.agent.plugin.Plugin
        """
        Thread.__init__(self, name='scheduler:%s' % plugin.name)
        self.plugin = plugin
        self.pending = Pending(plugin.name)
        self.setDaemon(True)

    def run(self):
        """
        Read the pending queue and dispatch requests
        to the plugin thread pool.
        """
        while not Thread.aborted():
            request = self.pending.get()
            try:
                task = Task(self.plugin, request, self.pending.commit)
                self.plugin.pool.run(task)
            except Exception:
                self.pending.commit(request.sn)
                log.exception(request.sn)

    def add(self, request):
        """
        Add a request to be scheduled.
        :param request: A request to be scheduled.
        :rtype request: gofer.messaging.Document
        """
        self.pending.put(request)

    def shutdown(self):
        """
        Shutdown the scheduler.
        """
        self.abort()
Exemplo n.º 14
0
    def test_read_invalid_json(self, unlink, _open):
        def _enter():
            return _open.return_value

        def _exit(*unused):
            _open.return_value.close()

        _open.return_value.__enter__ = Mock(side_effect=_enter)
        _open.return_value.__exit__ = Mock(side_effect=_exit)
        body = '__invalid__'
        _open.return_value.read.return_value = body
        path = '/tmp/123'
        document = Pending._read(path)
        _open.assert_called_once_with(path)
        _open.return_value.read.assert_called_once_with()
        _open.return_value.close.assert_called_once_with()
        unlink.assert_called_once_with(path)
        self.assertEqual(document, None)
Exemplo n.º 15
0
    def test_read(self, unlink, _open):
        def _enter():
            return _open.return_value

        def _exit(*unused):
            _open.return_value.close()

        _open.return_value.__enter__ = Mock(side_effect=_enter)
        _open.return_value.__exit__ = Mock(side_effect=_exit)
        body = '{"A": 1}'
        _open.return_value.read.return_value = body
        path = '/tmp/123'
        document = Pending._read(path)
        _open.assert_called_once_with(path)
        _open.return_value.read.assert_called_once_with()
        _open.return_value.close.assert_called_once_with()
        self.assertFalse(unlink.called)
        self.assertEqual(document.__dict__, {'A': 1})
Exemplo n.º 16
0
    def test_read_invalid_json(self, unlink, _open):
        def _enter():
            return _open.return_value

        def _exit(*unused):
            _open.return_value.close()

        _open.return_value.__enter__ = Mock(side_effect=_enter)
        _open.return_value.__exit__ = Mock(side_effect=_exit)
        body = '__invalid__'
        _open.return_value.read.return_value = body
        path = '/tmp/123'
        document = Pending._read(path)
        _open.assert_called_once_with(path)
        _open.return_value.read.assert_called_once_with()
        _open.return_value.close.assert_called_once_with()
        unlink.assert_called_once_with(path)
        self.assertEqual(document, None)
Exemplo n.º 17
0
    def test_read(self, unlink, _open):
        def _enter():
            return _open.return_value

        def _exit(*unused):
            _open.return_value.close()

        _open.return_value.__enter__ = Mock(side_effect=_enter)
        _open.return_value.__exit__ = Mock(side_effect=_exit)
        body = '{"A": 1}'
        _open.return_value.read.return_value = body
        path = '/tmp/123'
        document = Pending._read(path)
        _open.assert_called_once_with(path)
        _open.return_value.read.assert_called_once_with()
        _open.return_value.close.assert_called_once_with()
        self.assertFalse(unlink.called)
        self.assertEqual(document.__dict__, {'A': 1})
Exemplo n.º 18
0
Arquivo: rmi.py Projeto: roshan/gofer
class Scheduler(Thread):
    """
    The pending request scheduler.
    Processes the *pending* queue.
    """

    def __init__(self, plugin):
        """
        :param plugin: A plugin.
        :type plugin: gofer.agent.plugin.Plugin
        """
        Thread.__init__(self, name="scheduler:%s" % plugin.name)
        self.plugin = plugin
        self.pending = Pending(plugin.name)
        self.builtin = Builtin(plugin)
        self.setDaemon(True)

    def run(self):
        """
        Read the pending queue and dispatch requests
        to the plugin thread pool.
        """
        while not Thread.aborted():
            try:
                request = self.pending.get()
            except Empty:
                # aborted
                break
            try:
                plugin = self.select_plugin(request)
                transaction = Transaction(plugin, self.pending, request)
                task = Task(transaction)
                plugin.pool.run(task)
            except Exception:
                self.pending.commit(request.sn)
                log.exception(request.sn)

    def select_plugin(self, request):
        """
        Select the plugin based on the request.
        :param request: A request to be scheduled.
        :rtype request: gofer.messaging.Document
        :return: The appropriate plugin.
        :rtype: gofer.agent.plugin.Plugin
        """
        call = Document(request.request)
        if self.builtin.provides(call.classname):
            plugin = self.builtin
        else:
            plugin = self.plugin
        return plugin

    def add(self, request):
        """
        Add a request to be scheduled.
        :param request: A request to be scheduled.
        :rtype request: gofer.messaging.Document
        """
        self.pending.put(request)

    def shutdown(self):
        """
        Shutdown the scheduler.
        """
        self.builtin.shutdown()
        self.abort()
Exemplo n.º 19
0
class Scheduler(Thread):
    """
    The pending request scheduler.
    Processes the *pending* queue.
    """
    def __init__(self, plugin):
        """
        :param plugin: A plugin.
        :type plugin: gofer.agent.plugin.Plugin
        """
        Thread.__init__(self, name='scheduler:%s' % plugin.name)
        self.plugin = plugin
        self.pending = Pending(plugin.name)
        self.builtin = Builtin(plugin)
        self.setDaemon(True)

    def run(self):
        """
        Read the pending queue and dispatch requests
        to the plugin thread pool.
        """
        self.builtin.start()
        while not Thread.aborted():
            try:
                request = self.pending.get()
            except Empty:
                # aborted
                break
            try:
                plugin = self.select_plugin(request)
                transaction = Transaction(plugin, self.pending, request)
                task = Task(transaction)
                plugin.pool.run(task)
            except Exception:
                self.pending.commit(request.sn)
                log.exception(request.sn)

    def select_plugin(self, request):
        """
        Select the plugin based on the request.
        :param request: A request to be scheduled.
        :rtype request: gofer.messaging.Document
        :return: The appropriate plugin.
        :rtype: gofer.agent.plugin.Plugin
        """
        call = Document(request.request)
        if self.builtin.provides(call.classname):
            plugin = self.builtin
        else:
            plugin = self.plugin
        return plugin

    def add(self, request):
        """
        Add a request to be scheduled.
        :param request: A request to be scheduled.
        :rtype request: gofer.messaging.Document
        """
        self.pending.put(request)

    def shutdown(self):
        """
        Shutdown the scheduler.
        """
        self.builtin.shutdown()
        self.abort()