mitogen icon indicating copy to clipboard operation
mitogen copied to clipboard

Cannot call a service on the node it was declared

Open sloonz opened this issue 4 years ago • 0 comments

No Ansible, pure mitogen. Also affects 0.2.x.

If I declare a simple service on the master node, I can call it in slave nodes but not on the master node :

import mitogen.utils
import mitogen.master
import mitogen.service

class EchoService(mitogen.service.Service):
    @mitogen.service.expose(policy=mitogen.service.AllowAny())
    @mitogen.service.arg_spec(spec={
        'message': str
    })
    def echo(self, message):
        return message[::-1]

def test_echo(service_context):
    return service_context.call_service(service_name=EchoService, method_name="echo", message="hello")

def main():
    mitogen.utils.log_to_file(level="DEBUG")
    broker = mitogen.master.Broker()
    try:
        router = mitogen.master.Router(broker)
        pool = mitogen.service.Pool(router, services=[
            EchoService(router),
        ])
        # print(router.ssh(hostname="localhost", username="root").call(test_echo, service_context=router.myself())) # works
        print(router.myself().call(test_echo, service_context=router.myself())) # don't work
        # test_echo(service_context=router.myself()) # don't work either, but not sure it's supposed to
    finally:
        broker.shutdown()
        broker.join()

if __name__ == "__main__":
    main()
Traceback (most recent call last):
  File "/opt/data/tmp/mtest/test.py", line 33, in <module>
    main()
  File "/opt/data/tmp/mtest/test.py", line 25, in main
    print(router.myself().call(test_echo, service_context=router.myself())) # don't work
  File "/opt/data/tmp/mtest/lib/python3.9/site-packages/mitogen/parent.py", line 2021, in call
    return self.default_call_chain.call(fn, *args, **kwargs)
  File "/opt/data/tmp/mtest/lib/python3.9/site-packages/mitogen/parent.py", line 1978, in call
    return receiver.get().unpickle(throw_dead=False)
  File "/opt/data/tmp/mtest/lib/python3.9/site-packages/mitogen/core.py", line 1181, in get
    msg._throw_dead()
  File "/opt/data/tmp/mtest/lib/python3.9/site-packages/mitogen/core.py", line 921, in _throw_dead
    raise ChannelError(self.data.decode('utf-8', 'replace'))
mitogen.core.ChannelError: invalid handle

log.txt

sloonz avatar May 20 '21 22:05 sloonz