Bug #78632 Mysqlfabric password reset throws no atribute exec_update error
Submitted: 29 Sep 2015 19:07 Modified: 8 Jan 2016 18:39
Reporter: Andres Eduardo Sanchez Rodriguez Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Fabric: Sharding Severity:S2 (Serious)
Version:1.6.2 OS:Any
Assigned to: CPU Architecture:Any

[29 Sep 2015 19:07] Andres Eduardo Sanchez Rodriguez
Description:
Traceback exception thrown when trying to reset servers --role_id="backup" password

-bash-4.1$ mysqlfabric password reset servers --role_id="backup"
Traceback (most recent call last):
  File "/usr/bin/mysqlfabric", line 400, in <module>
    sys.exit(main())
  File "/usr/bin/mysqlfabric", line 378, in main
    result = fire_command(cmd, *cargs)
  File "/usr/bin/mysqlfabric", line 312, in fire_command
    return command.dispatch(*(command.append_options_to_args(args)))
  File "/usr/lib/python2.6/site-packages/mysql/fabric/services/manage.py", line 463, in dispatch
    DBPasswordPersister.remove(role, role_id)
  File "/usr/lib/python2.6/site-packages/mysql/fabric/persistence.py", line 140, in _wrap
    return original(*args, **kwrds)
  File "/usr/lib/python2.6/site-packages/mysql/fabric/password_handler.py", line 572, in remove
    persister.exec_update(DBPasswordPersister.REMOVE_PASSWORD,
AttributeError: 'NoneType' object has no attribute 'exec_update'
-bash-4.1$

How to repeat:
1.-Set master/storage password after running : mysqlfabric manage setup
2.- Set baskup/restore user/passwords :
-bash-4.1$ mysqlfabric password set servers --role_id="backup"
master Password:
[INFO] 1443542837.426509 - MainThread - Initializing persister: user (jettestuser0), server (localhost:13002), database (fabric).
servers Username [qauser]: jettestuser2
servers Password:
Retype servers password:
Same for restore: 
-bash-4.1$ mysqlfabric password set servers --role_id="restore"
master Password:
[INFO] 1443542919.267890 - MainThread - Initializing persister: user (jettestuser0), server (localhost:13002), database (fabric).
servers Username [qauser]: jettestuser3
servers Password:
Retype servers password:
3.-Try to reset password for any of the servers (server, backup/restore):

-bash-4.1$ mysqlfabric password reset servers --role_id="backup"
Traceback (most recent call last):
  File "/usr/bin/mysqlfabric", line 400, in <module>
    sys.exit(main())
  File "/usr/bin/mysqlfabric", line 378, in main
    result = fire_command(cmd, *cargs)
  File "/usr/bin/mysqlfabric", line 312, in fire_command
    return command.dispatch(*(command.append_options_to_args(args)))
  File "/usr/lib/python2.6/site-packages/mysql/fabric/services/manage.py", line 463, in dispatch
    DBPasswordPersister.remove(role, role_id)
  File "/usr/lib/python2.6/site-packages/mysql/fabric/persistence.py", line 140, in _wrap
    return original(*args, **kwrds)
  File "/usr/lib/python2.6/site-packages/mysql/fabric/password_handler.py", line 572, in remove
    persister.exec_update(DBPasswordPersister.REMOVE_PASSWORD,
AttributeError: 'NoneType' object has no attribute 'exec_update'
-bash-4.1$

-bash-4.1$ mysqlfabric password reset servers --role_id="restore"
Traceback (most recent call last):
  File "/usr/bin/mysqlfabric", line 400, in <module>
    sys.exit(main())
  File "/usr/bin/mysqlfabric", line 378, in main
    result = fire_command(cmd, *cargs)
  File "/usr/bin/mysqlfabric", line 312, in fire_command
    return command.dispatch(*(command.append_options_to_args(args)))
  File "/usr/lib/python2.6/site-packages/mysql/fabric/services/manage.py", line 463, in dispatch
    DBPasswordPersister.remove(role, role_id)
  File "/usr/lib/python2.6/site-packages/mysql/fabric/persistence.py", line 140, in _wrap
    return original(*args, **kwrds)
  File "/usr/lib/python2.6/site-packages/mysql/fabric/password_handler.py", line 572, in remove
    persister.exec_update(DBPasswordPersister.REMOVE_PASSWORD,
AttributeError: 'NoneType' object has no attribute 'exec_update'
-bash-4.1$

-bash-4.1$ mysqlfabric password reset servers
Traceback (most recent call last):
  File "/usr/bin/mysqlfabric", line 400, in <module>
    sys.exit(main())
  File "/usr/bin/mysqlfabric", line 378, in main
    result = fire_command(cmd, *cargs)
  File "/usr/bin/mysqlfabric", line 312, in fire_command
    return command.dispatch(*(command.append_options_to_args(args)))
  File "/usr/lib/python2.6/site-packages/mysql/fabric/services/manage.py", line 463, in dispatch
    DBPasswordPersister.remove(role, role_id)
  File "/usr/lib/python2.6/site-packages/mysql/fabric/persistence.py", line 140, in _wrap
    return original(*args, **kwrds)
  File "/usr/lib/python2.6/site-packages/mysql/fabric/password_handler.py", line 572, in remove
    persister.exec_update(DBPasswordPersister.REMOVE_PASSWORD,
AttributeError: 'NoneType' object has no attribute 'exec_update'
-bash-4.1$

Suggested fix:
Password reset should work properly as stated on help/usage:

-bash-4.1$ mysqlfabric help password reset
Usage:
  mysqlfabric  password reset <role> [--role_id=ROLE_ID]

Description:
  Reset the Fabric Passwords.

Parameters:
  <role>  The role whose password needs to be deleted.

Options:
  --role_id=ROLE_ID  The role_id of the role in focus here. By default None.
[8 Jan 2016 18:39] Philip Olson
Posted by developer:
 
Fixed as of the upcoming MySQL Fabric 1.6.3 release, and here's the changelog entry:

Executing "password reset servers" would fail and emit an unhandled
exception.

Thank you for the bug report.
[13 Jan 2016 23:26] Philip Olson
Posted by developer:
 
Additionally, the 'reset' keyword here was renamed to 'delete', as to avoid confusion.

The release notes and documentation were updated to reflect this.