
Folks, After checking a little closer last night, I have one clarification. The Tool Shed does use POSTs as well as GETs, but even when it's POSTing, the encoded dictionaries (encoded_repo_info_dicts) are part of the query string. The encoded_repo_info_dicts should probably become part of the POSTed data. -rico On Sep 12, 2013, at 3:55 PM, Richard Burhans wrote:
When installing Galaxy Tool Shed repositories into a local Galaxy instance, tool shed dependecies are exchanged as an encoded python dictionary via the HTTP GET method.
If a tool shed repository contains enough dependencies, the length of this encoded dictionary can become extremely long. In my case, it became long enough for my Apache server to choke on it:
[Wed Sep 11 15:34:53 2013] [error] [client XXX.XXX.XXX.XXX] request failed: URI too long (longer than 8190)
The HTTP standard does not place a limit on the length of a URI, but the de facto limit is 2000 characters. See the following stackoverflow answer:
http://stackoverflow.com/a/417184
I would recommend either: 1) communicating toolshed dependencies via an HTTP POST 2) redesigning tool shed <-> instance communications
As a stopgap measure, I've modified lib/tool_shed/util/ encoding_util.py to use a more compact encoding scheme. I'm attaching a copy in case someone else runs into the same problem.
-rico<encoding_util.py>