Bug #72508 Wrong exit code.
Submitted: 1 May 2014 22:00 Modified: 5 May 2014 8:18
Reporter: Martin Arrieta (OCA) Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Fabric Severity:S3 (Non-critical)
Version:1.4.2 OS:Any
Assigned to: CPU Architecture:Any
Tags: code, error, exit

[1 May 2014 22:00] Martin Arrieta
Description:
When you search for the servers of a group (and in many other cases), the exit code is always 0 even if "success" is false.

Regards, 

Martin Arrieta.

How to repeat:
[root@fabric-store fabric]# mysqlfabric group lookup_servers test1
Command :
{ success     = True
  return      = [{'status': 'FAULTY', 'server_uuid': '0efa44fb-d08e-11e3-92cf-08002760fc47', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '192.168.70.104'}, {'status': 'FAULTY', 'server_uuid': '1189e6be-d08e-11e3-92cf-08002760fc47', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '192.168.70.103'}, {'status': 'FAULTY', 'server_uuid': '12f4a168-d08e-11e3-92cf-08002760fc47', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '192.168.70.102'}]
  activities  =
}
[root@fabric-store fabric]# echo $?
0
[root@fabric-store fabric]# mysqlfabric group lookup_servers test12
Command :
{ success     = False
  return      = GroupError: Group (test12) does not exist.
  activities  =
}
[root@fabric-store fabric]# echo $?
0

Suggested fix:
Add a secondary return value and send the "success" value separately in the method "command.dispatch" in order to use it for the exit code.

$ diff -r mysql-utilities-1.4.2/ mysql-utilities-1.4.2-original/
diff -r mysql-utilities-1.4.2/mysql/fabric/command.py mysql-utilities-1.4.2-original/mysql/fabric/command.py
385c385
<         return ("\n".join([
---
>         return "\n".join([
391c391
<             ]), success)
---
>             ])
diff -r mysql-utilities-1.4.2/scripts/mysqlfabric.py mysql-utilities-1.4.2-original/scripts/mysqlfabric.py
26,27d25
< import sys
<
345,348c343
<         result, status = command.dispatch(*(command.append_options_to_args(args)))
<
<         return_code = 0 if status else 1
<
---
>         result = command.dispatch(*(command.append_options_to_args(args)))
351,353d345
<
<         sys.exit(return_code)
<
[5 May 2014 8:18] Mats Kindahl
Hi Martin,

Thanks for the bug report! I agree that we need to fix the exit code so that it provides something that can be used in shell-scripts. This is actually also a duplicate, but of BUG#71444.