From 5d7df6dcebcac420817bd60c2b3bf1b7aaeba3c8 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Thu, 3 Aug 2017 08:39:04 -0400 Subject: [PATCH] Fix error handling in nodeshell nodeshell needed to process errors correctly, and not assume databynode would be there. --- confluent_client/bin/nodeshell | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/confluent_client/bin/nodeshell b/confluent_client/bin/nodeshell index b418eb73..40b78b78 100755 --- a/confluent_client/bin/nodeshell +++ b/confluent_client/bin/nodeshell @@ -55,10 +55,15 @@ def run(): all = set([]) pipedesc = {} pendingexecs = deque() + exitcode = 0 + for exp in c.create('/noderange/{0}/attributes/expression'.format(args[0]), {'expression': cmdstr}): - ex = exp['databynode'] + if 'error' in exp: + sys.stderr.write(exp['error'] + '\n') + exitcode |= exp.get('errorcode', 1) + ex = exp.get('databynode', ()) for node in ex: cmd = ex[node]['value'].encode('utf-8') cmdv = ['ssh', node, cmd] @@ -67,8 +72,10 @@ def run(): run_cmdv(node, cmdv, all, pipedesc) else: pendingexecs.append((node, cmdv)) - - exitcode = 0 + if not all: + sys.exit(exitcode) + if exitcode: + sys.exit(exitcode) rdy, _, _ = select.select(all, [], [], 10) while all: for r in rdy: