]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph: ignore BrokenPipeError when printing help 41586/head
authorErnesto Puerta <epuertat@redhat.com>
Fri, 11 Sep 2020 10:10:16 +0000 (12:10 +0200)
committerCory Snyder <csnyder@iland.com>
Fri, 28 May 2021 14:04:09 +0000 (10:04 -0400)
ignore BrokenPipeError which is thrown when piping the output of ceph
CLI to a tool which might close its stdin before ceph CLI sends the
whole help message.

Follow approach suggested by Kefu: https://github.com/python/cpython/commit/7b0ed43af55c1e2844aa0ccd5e088b2ddd38dbdb
This doesn't manage the clean-up/exit logic, as that's deferred to the
last part of the __main__ code.

Fixes: https://tracker.ceph.com/issues/47400
Signed-off-by: Ernesto Puerta <epuertat@redhat.com>
(cherry picked from commit 39768459f6e542dc4c18407fed4f8412abe759fe)

src/ceph.in

index 25622d4f2e365469e4aef5f034bef0230c784407..3a289092913a3273dc194feb1c3c73df2558e10a 100755 (executable)
@@ -386,8 +386,11 @@ daemonperf {type.id | path} list|ls [stat-pats] [priority]
 
 def do_extended_help(parser, args, target, partial):
     def help_for_sigs(sigs, partial=None):
-        sys.stdout.write(format_help(parse_json_funcsigs(sigs, 'cli'),
-                         partial=partial))
+        try:
+            sys.stdout.write(format_help(parse_json_funcsigs(sigs, 'cli'),
+                             partial=partial))
+        except BrokenPipeError:
+            pass
 
     def help_for_target(target, partial=None):
         # wait for osdmap because we know this is sent after the mgrmap