stencila/executa

fix(StdioClient): Respawn server if it exits prematurely.

Closed this issue ยท 1 comments

Below is the log from within a Docker container. The Python interpreter baulked at a CodeChunk that was sent to it and then exited. The StdioClient knows this and reports the error, but instead it should respawn the command, perhaps lazily, just-in-time before the next request.

> docker logs relaxed_leakey 
{"time":"2019-11-18T22:58:32.605Z","tag":"executa:executor","level":2,"message":"Starting servers: stdio"}
{"time":"2019-11-18T22:58:45.171Z","tag":"executa:executor","level":2,"message":"Discovering peers"}
{"time":"2019-11-18T22:58:45.182Z","tag":"executa:serve","level":2,"message":"Added manifest at /home/guest/.stencila/executors/javascript.json"}
{"time":"2019-11-18T22:58:45.182Z","tag":"executa:serve","level":2,"message":"Added manifest at /home/guest/.stencila/executors/py.json"}
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/__main__.py", line 56, in <module>
    main()
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/__main__.py", line 46, in main
    interpreter_listen()
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/__main__.py", line 32, in interpreter_listen
    start_stdio_interpreter()
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/listener.py", line 147, in start_stdio_interpreter
    InterpreterListener(sys.stdin.buffer, sys.stdout.buffer, Interpreter()).run_interpreter()
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/listener.py", line 130, in run_interpreter
    to_execute = simple_code_chunk_parse(code)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 121, in simple_code_chunk_parse
    cc_result = parser.parse(code)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 217, in parse
    self.parse_statement(statement)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 236, in parse_statement
    self._parse_assigns(statement)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 345, in _parse_assigns
    self.parse_statement(statement_value)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 238, in parse_statement
    self._parse_bin_op(statement)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 403, in _parse_bin_op
    self.parse_statement(statement.left)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 252, in parse_statement
    self.parse_statement(statement.elts)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 232, in parse_statement
    self.parse_statement(sub_statement)
  File "/usr/local/lib/python3.6/dist-packages/stencila/schema/code_parsing.py", line 274, in parse_statement
    raise TypeError('Unrecognized statement: {}'.format(statement))
TypeError: Unrecognized statement: <_ast.NameConstant object at 0x7f60695b1f28>
{"time":"2019-11-18T22:58:46.587Z","tag":"executa:stdio:client","level":0,"message":"Server exited prematurely with exit code 1 and signal null","stack":"Error\n    at ChildProcess.<anonymous> (/usr/lib/node_modules/@stencila/executa/dist/lib/stdio/StdioClient.js:26:48)\n    at ChildProcess.emit (events.js:210:5)\n    at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)"}

๐ŸŽ‰ This issue has been resolved in version 1.3.1 ๐ŸŽ‰

The release is available on:

Your semantic-release bot ๐Ÿ“ฆ๐Ÿš€