)]}'
{"specs/liberty/pluggable-locking.rst":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"230393d2390f971ab47d71277bcfabfd0eee4f4c","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/pluggable-locking"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Locking in the DB is pretty bad. It gives the possibility to do things like"},{"line_number":14,"context_line":"end up with stuck locks, for example if a conductor crashes. There exist"},{"line_number":15,"context_line":"systems built with locking primitives, that support TTLs and other"},{"line_number":16,"context_line":"features to make locking more manageable. Let\u0027s give people the ability"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3acd31a7_e82714b4","line":13,"updated":"2015-05-05 22:27:18.000000000","message":"s/DB/DataBase (DB)/","commit_id":"7357ac51d97c9350ace2f774ea479c9ea8e4eed1"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"230393d2390f971ab47d71277bcfabfd0eee4f4c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Locking in the DB is pretty bad. It gives the possibility to do things like"},{"line_number":14,"context_line":"end up with stuck locks, for example if a conductor crashes. There exist"},{"line_number":15,"context_line":"systems built with locking primitives, that support TTLs and other"},{"line_number":16,"context_line":"features to make locking more manageable. Let\u0027s give people the ability"},{"line_number":17,"context_line":"to use them."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3acd31a7_8822e0a1","line":15,"updated":"2015-05-05 22:27:18.000000000","message":"s/TTLs/Time-To-Lives (TTLs)/","commit_id":"7357ac51d97c9350ace2f774ea479c9ea8e4eed1"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"230393d2390f971ab47d71277bcfabfd0eee4f4c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Locking in MySQL is a bit of a hack. MySQL does not natively support things"},{"line_number":24,"context_line":"a distributed lock mechanism supports, such as TTLs, renewals, etc. We would"},{"line_number":25,"context_line":"need (and probably should, even if this spec is implemented) to implement"},{"line_number":26,"context_line":"these things in Python, which isn\u0027t ideal."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3acd31a7_450b912a","line":24,"updated":"2015-05-05 22:27:18.000000000","message":"s/a distributed/that a distributed/","commit_id":"7357ac51d97c9350ace2f774ea479c9ea8e4eed1"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"230393d2390f971ab47d71277bcfabfd0eee4f4c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"We should make our locking code pluggable. There is a very small amount of"},{"line_number":33,"context_line":"code around actually taking and releasing a lock. We should:"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"* Factor these out into two small methods into abstract methods in the"},{"line_number":36,"context_line":"  TaskManager class."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"* Create a DbTaskManager implentation with the existing implementation of"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3acd31a7_281bcc74","line":35,"updated":"2015-05-05 22:27:18.000000000","message":"s/two small methods into abstract methods/two small abstract methods/","commit_id":"7357ac51d97c9350ace2f774ea479c9ea8e4eed1"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"ff483a12ab061c29bafa15f72d42d469dd173ba8","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"* Factor these out into two small abstract methods in the TaskManager class."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Create a DbTaskManager implentation with the existing implementation of"},{"line_number":38,"context_line":"  these methods."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* Create a configuration option to choose a task manager backend, with the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9af37de9_7e549d53","line":37,"updated":"2015-05-10 14:13:37.000000000","message":"s/implentation/implementation/","commit_id":"ed06d71e063f6892651c8105e7621ea197813277"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"cd68f31210ff6c9d341897187acc50482bb87399","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* Create a get_task_manager method that instantiates and returns the"},{"line_number":44,"context_line":"  implementation that corresponds to the configuration option provided."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"* Create other implementations as needed."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The two methods should be as follows:"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1aca2d91_7055c9c4","line":46,"updated":"2015-05-06 09:12:10.000000000","message":"I think that as part of this spec it should implement an alternative plugin to the dbapi.\n\nOtherwise this is spec is not solving the problem it just described in the \"Problem description\" section. We are saying locking in the DB sucks (and it does) but the proposed change also doesn\u0027t fix it.\n\nDifferent from other specs such as making dhcp providers pluggable, Ironic does actually work without a dhcp provider because you can have a static configuration or not even rely on dhcp at all (such as the virtual media case). So only making it pluggable and accepting passing \"none\" as a non-op option makes sense.\n\nBut Ironic doesn\u0027t work without lock, and saying a db lock is a problem but the proposed change doesn\u0027t give any alternative is a not ideal for a spec IMO.","commit_id":"ed06d71e063f6892651c8105e7621ea197813277"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"ff483a12ab061c29bafa15f72d42d469dd173ba8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* Create a get_task_manager method that instantiates and returns the"},{"line_number":44,"context_line":"  implementation that corresponds to the configuration option provided."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"* Create other implementations as needed."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The two methods should be as follows:"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9af37de9_9eece190","line":46,"in_reply_to":"1aca2d91_7055c9c4","updated":"2015-05-10 14:13:37.000000000","message":"I think so too.","commit_id":"ed06d71e063f6892651c8105e7621ea197813277"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"1a63d19b65d6e4f649d4104eba331312e3972d1d","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"None."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"REST API impact"},{"line_number":75,"context_line":"---------------"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"None."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1aca2d91_4fb4f080","line":74,"updated":"2015-05-08 23:50:29.000000000","message":"I think you should consider proposing a locking API.  There are a number of use cases, but in particular this would help with automation outside of Ironic (such as updating firmware out of band), where you need to temporarily lock a node when performing dangerous operations that may be interfered with by Ironic tasks.\n\nTo a certain extent, this use case is satisfied by maintenance/maintenance reason, but that does not support TTLs and other finer-grained locking features.","commit_id":"ed06d71e063f6892651c8105e7621ea197813277"}]}
