We use this Apache issue/ticket to keep track of what we did on our own internal version of Solr, and what would be provided in a patch for this issue if the Apache community was interested. Therefore this additional comment, for now just a "note to self":
The solution for "error propagation" now not only supports sending error-code, error-msg and error-type (corresponding to package+classname in java) so that exceptions can be reconstructed and thrown on client-side (automatic in SolrJ). Now it also supports additional properties (name/value pairs) on an exception and have those propagated over the line to the client where it can be (will be in SolrJ) attached as properties on the reconstructed exception. Explicit properties on exception are nice, because only alternative is to "encode" it in the error-msg, and then you have to parse the error-msg on the receiving side and that is part of what we want to avoid (it is too hacky and error prone).
Properties also supported on "nested" exceptions about parts of the request-handling that failed - e.g. in a 5-doc update-request, where 3 updates succeed and 2 fail, 2 "nested/part"-exceptions will be returned to the client. Both of those "nested/part"-exceptions can independently contain their own set of properties.
As a proof-of-concept and to show that the implementation works and to have the feature "protected" by tests, the VersionConflict exception introduced in the solution for SOLR-3178 has been enhanced to carry a property "currentVersion" containing the current version of the document on server-side. So now, if the client want to know about the actual current version on server-side, it does not have to parse the error-msg to get hold of it - just read the provided property. All existing tests using VersionConflict has been updated to test that the returned currentVersion is correct. There are test that have VersionConflict as the top-level exception (version-conflict in a single-doc update-request) and other tests that have several VersionConflicts as "nested/part"-exceptions so both aspects are tested.
The ability of VersionConflict to carry current-version might not be very usefull. But it shows that the feature implementation works and it makes it easy to protect the feature by tests. Internally we will be using the feature for somthing far more usefull.