Currently in the case where the mon returns a command error code, we print
the error stream and Error ... message but not the command output. Usually
there isn't any, so we haven't noticed until now, but there is not reason
why shouldn't return both an error code and some output.
Restructure the code so that the error message goes *after* the JSON output,
where it will be a bit more obvious to the user (if the stdout scrolled
the terminal, for instance). (This is not a change in behavior since
previously we weren't seeing the stdout at all.)
Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit
9425eee579adc2408602fb1734dc5aecf58ee4f2)
Conflicts:
src/ceph.in
- nautilus has to support Python 2, so preserve the "u" prefix on the string
literal
errno.errorcode.get(ret, 'Unknown'), outs),
file=sys.stderr)
- if ret < 0:
- ret = -ret
- errstr = errno.errorcode.get(ret, 'Unknown')
- print(u'Error {0}: {1}'.format(errstr, outs), file=sys.stderr)
- if len(targets) > 1:
- final_ret = ret
- else:
- return ret
-
- if outs:
- print(prefix + outs, file=sys.stderr)
-
sys.stdout.flush()
if parsed_args.output_file:
except IOError as e:
if e.errno != errno.EPIPE:
raise e
+ final_e = None
try:
sys.stdout.flush()
except IOError as e:
if e.errno != errno.EPIPE:
- raise e
+ final_e = e
+
+ if ret < 0:
+ ret = -ret
+ errstr = errno.errorcode.get(ret, 'Unknown')
+ print(u'Error {0}: {1}'.format(errstr, outs), file=sys.stderr)
+ final_ret = ret
+ elif outs:
+ print(prefix + outs, file=sys.stderr)
+ if final_e:
+ raise final_e
# Block until command completion (currently scrub and deep_scrub only)
if block: