Ejemplo n.º 1
0
 def test_provides(self, dispatcher):
     name = 'test'
     dispatcher.__iadd__ = Mock()
     plugin = Mock()
     builtin = Builtin(plugin)
     p = builtin.provides(name)
     builtin.dispatcher.provides.assert_called_once_with(name)
     self.assertEqual(p, builtin.dispatcher.provides.return_value)
Ejemplo n.º 2
0
 def test_provides(self, dispatcher):
     name = 'test'
     dispatcher.__iadd__ = Mock()
     plugin = Mock()
     builtin = Builtin(plugin)
     p = builtin.provides(name)
     builtin.dispatcher.provides.assert_called_once_with(name)
     self.assertEqual(p, builtin.dispatcher.provides.return_value)
Ejemplo n.º 3
0
Archivo: rmi.py Proyecto: 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()
Ejemplo n.º 4
0
 def test_provides(self):
     name = 'Admin'
     plugin = Mock()
     builtin = Builtin(plugin)
     p = builtin.provides(name)
     self.assertTrue(p)
Ejemplo n.º 5
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()
Ejemplo n.º 6
0
 def test_provides(self):
     name = 'Admin'
     plugin = Mock()
     builtin = Builtin(plugin)
     p = builtin.provides(name)
     self.assertTrue(p)