#3605 closed defect (fixed)
IOError: [Errno 32] Broken pipe when rendering graph
Reported by: | Russ Brown | Owned by: | Christian Boos |
---|---|---|---|
Priority: | high | Component: | GraphvizPlugin |
Severity: | critical | Keywords: | |
Cc: | Trac Release: | 0.11 |
Description
The grahviz plugin used to work justfine for us, but at some point over the last few months it stopped doing so.
In that time we upgraded to 0.11, and also upgrade graphviz itself a number of times, so it it difficult to pinpoint exactly what caused the problem.
Anyway, the backtrace we are getting is as follows:
2008-08-25 15:52:41,487 Trac[main] ERROR: [Errno 32] Broken pipe Traceback (most recent call last): File "/usr/lib/python2.5/site-packages/trac/web/main.py", line 423, in _dispatch_request dispatcher.dispatch(req) File "/usr/lib/python2.5/site-packages/trac/web/main.py", line 219, in dispatch data, content_type) File "/usr/lib/python2.5/site-packages/trac/web/chrome.py", line 726, in render_template stream.render(method, doctype=doctype, out=buffer) File "/usr/lib/python2.5/site-packages/genshi/core.py", line 179, in render return encode(generator, method=method, encoding=encoding, out=out) File "/usr/lib/python2.5/site-packages/genshi/output.py", line 61, in encode for chunk in iterator: File "/usr/lib/python2.5/site-packages/genshi/output.py", line 311, in __call__ for kind, data, pos in stream: File "/usr/lib/python2.5/site-packages/genshi/output.py", line 753, in __call__ for kind, data, pos in stream: File "/usr/lib/python2.5/site-packages/genshi/output.py", line 592, in __call__ for kind, data, pos in stream: File "/usr/lib/python2.5/site-packages/genshi/output.py", line 698, in __call__ for kind, data, pos in chain(stream, [(None, None, None)]): File "/usr/lib/python2.5/site-packages/genshi/output.py", line 532, in __call__ for ev in stream: File "/usr/lib/python2.5/site-packages/genshi/core.py", line 283, in _ensure for event in stream: File "/usr/lib/python2.5/site-packages/genshi/core.py", line 283, in _ensure for event in stream: File "/usr/lib/python2.5/site-packages/trac/web/chrome.py", line 779, in _strip_accesskeys for kind, data, pos in stream: File "/usr/lib/python2.5/site-packages/genshi/core.py", line 283, in _ensure for event in stream: File "/usr/lib/python2.5/site-packages/trac/web/chrome.py", line 768, in _generate for kind, data, pos in stream: File "/usr/lib/python2.5/site-packages/genshi/core.py", line 283, in _ensure for event in stream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 569, in _include for event in stream: File "/usr/lib/python2.5/site-packages/genshi/template/markup.py", line 298, in _match ctxt, start=idx + 1, **vars): File "/usr/lib/python2.5/site-packages/genshi/template/markup.py", line 298, in _match ctxt, start=idx + 1, **vars): File "/usr/lib/python2.5/site-packages/genshi/template/markup.py", line 245, in _match for event in stream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 543, in _exec for event in stream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 533, in _eval for event in substream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 496, in _eval for kind, data, pos in stream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 551, in _flatten for event in stream: File "/usr/lib/python2.5/site-packages/genshi/core.py", line 283, in _ensure for event in stream: File "/usr/lib/python2.5/site-packages/genshi/path.py", line 141, in _generate subevent = stream.next() File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 569, in _include for event in stream: File "/usr/lib/python2.5/site-packages/genshi/template/markup.py", line 234, in _strip event = stream.next() File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 543, in _exec for event in stream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 533, in _eval for event in substream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 496, in _eval for kind, data, pos in stream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 551, in _flatten for event in stream: File "/usr/lib/python2.5/site-packages/genshi/core.py", line 283, in _ensure for event in stream: File "/usr/lib/python2.5/site-packages/genshi/path.py", line 141, in _generate subevent = stream.next() File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 569, in _include for event in stream: File "/usr/lib/python2.5/site-packages/genshi/template/markup.py", line 234, in _strip event = stream.next() File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 543, in _exec for event in stream: File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 520, in _eval result = _eval_expr(data, ctxt, **vars) File "/usr/lib/python2.5/site-packages/genshi/template/base.py", line 286, in _eval_expr retval = expr.evaluate(ctxt) File "/usr/lib/python2.5/site-packages/genshi/template/eval.py", line 180, in evaluate return eval(self.code, _globals, {'__data__': data}) File "/usr/lib/python2.5/site-packages/trac/wiki/templates/wiki_view.html", line 37, in <Expression u'wiki_to_html(context, page.text)'> ${wiki_to_html(context, page.text)} File "/usr/lib/python2.5/site-packages/trac/wiki/formatter.py", line 1095, in format_to_html return HtmlFormatter(env, context, wikidom).generate(escape_newlines) File "/usr/lib/python2.5/site-packages/trac/wiki/formatter.py", line 1054, in generate escape_newlines) File "/usr/lib/python2.5/site-packages/trac/wiki/formatter.py", line 833, in format self.handle_code_block(line) File "/usr/lib/python2.5/site-packages/trac/wiki/formatter.py", line 764, in handle_code_block processed = self.code_processor.process(code_text) File "/usr/lib/python2.5/site-packages/trac/wiki/formatter.py", line 179, in process text = self.processor(text) File "/usr/lib/python2.5/site-packages/trac/wiki/formatter.py", line 166, in _macro_processor text) File "build/bdist.linux-i686/egg/graphviz/graphviz.py", line 227, in expand_macro out, err = self.launch(cmd, content) File "build/bdist.linux-i686/egg/graphviz/graphviz.py", line 430, in launch p.stdin.write(input) IOError: [Errno 32] Broken pipe
Now, we do know that graphviz itself is installed and working properly on the server because it works just fine with the masterticket plugin: this only seems to affect the graphviz plugin.
Any help would be appreciated: we miss our graphs. :)
Attachments (0)
Change History (11)
comment:1 Changed 16 years ago by
comment:2 Changed 16 years ago by
Hi, thanks for your response.
We are running on gentoo linux with trac running through mod_python.
I enabled the debugging as requested and got the following output:
2008-09-24 14:23:40,273 Trac[graphviz] DEBUG: render_macro: render other image formats - running command [u'/usr/bin/dot', '', u'-Tpng', u'-o/var/tmp/trac/htdocs/graphviz/dbbc42700225787cb9bb6fb6f1dd75d24734b999.dot.png'] 2008-09-24 14:23:40,282 Trac[graphviz] ERROR: The command [u'/usr/bin/dot', '', u'-Tpng', u'-o/var/tmp/trac/htdocs/graphviz/dbbc42700225787cb9bb6fb6f1dd75d24734b999.dot.png'] failed with the the following output: Error: dot: can't open
/usr/bin/dot definitely exists and belongs to the graphviz package:
# /usr/bin/dot -V dot - Graphviz version 2.20.2 (Mon Aug 25 13:07:52 UTC 2008)
If I just run the comment given:
/usr/bin/dot -Tpng -o/var/tmp/trac/htdocs/graphviz/8ba4511395eb047b7d14f21f88f78738037acddd.dot.png
It just sits there, presumably waiting for data to be piped to it?
As I say, graphviz works fine with the mastertickets plugin when rendering its depgraph.
comment:3 Changed 16 years ago by
I just had the same issue. The problem is in the above command:
[u'/usr/bin/dot', '', u'-Tpng', ...
Note the empty first argument, this is what triggers the Error: dot: can't open
message.
Possible fix:
-
graphviz/graphviz.py
diff -r abb5c1031a4e -r 8c16d9f0cdb3 graphviz/graphviz.py
a b 424 424 425 425 def launch(self, cmd, input): 426 426 """Launch a process (cmd), and returns exitcode, stdout + stderr""" 427 p = subprocess.Popen( cmd,427 p = subprocess.Popen([arg for arg in cmd if arg], 428 428 stdin=subprocess.PIPE, 429 429 stdout=subprocess.PIPE, 430 430 stderr=subprocess.PIPE)
comment:4 Changed 16 years ago by
Priority: | normal → high |
---|---|
Severity: | normal → critical |
comment:5 Changed 16 years ago by
I'm debuging this issue too . I found that the empty second item in the 'cmd' Array is causing the bug. This item is empty if there's no default_* options in configuration
I workarrounded it placing a cmd.remove() and then worked for me.
I'm using trac 0.11 and mod_python
comment:6 Changed 16 years ago by
Adding the cmd.remove() worked for me too.
I'm sure the other way would also have worked too.
Thanks so much for looking at it. I have happy users again. :)
comment:9 Changed 16 years ago by
Owner: | changed from Peter Kropf to Christian Boos |
---|
comment:10 Changed 16 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
... but a more extensive fix for this issue can be found in [4395] (avoiding the empty optional argument list altogether).
comment:11 Changed 11 years ago by
At my site it only works after I include a section in my trac.ini:
[graphviz] cache_dir = /srv/www/htdocs/trac/gvcache cache_manager = yes cmd_path = /usr/local/bin processor = dot out_format = svg
More specifically when I set out_format to svg.
Seem's a problem occured when launching graphviz tools.
In the source code, there is some debug message. Uncomment them to see all command line which are launched (2 in general). Then, try to launch them manualy. If you got a segfault or something like that, it's related to your graphviz install, but not the plugin.
Please tell us if you are using win32 or linux and which install (mod_python, other ...)