)]}'
{"specs/liberty/cinder-api-atomic-status-change.rst":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"5207d71a8c09b6fc553c7cd3ec810aef50e8af60","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Cinder Volume Active/Active HA support - API Races"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/cinder/+spec/cinder-volume-active-active-ha"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_46253808","line":8,"updated":"2015-07-30 21:16:15.000000000","message":"I\u0027d rename this title to something more specific to what it\u0027s doing here.  I was under the assumption that this spec was a solution to enabling A/A.","commit_id":"878916888e95e57d1b251c7dad77c1f265480edd"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"86b2a4ad31d261d0481d2a47b37cd672a9138f92","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Cinder Volume Active/Active HA support - API Races"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/cinder/+spec/cinder-volume-active-active-ha"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_63acd48c","line":8,"in_reply_to":"3a50d1a3_46253808","updated":"2015-07-31 08:20:28.000000000","message":"Walter, this is part of the effort to move towards that direction.  Trying to get all the changes needed for A-A into 1 spec would be complete madness.\n\nSince we are grouping them under the same blueprint, it made sense to me to use the same prefix in the title as we did on the one for the lock replacement bp. And nobody complained there and that one doesn\u0027t fix the A-A whole problem either, only the first 2 points of the list.\n\nI have no problem changing this title to \"Prevent API Races\" if you still think it\u0027s better to change it.","commit_id":"878916888e95e57d1b251c7dad77c1f265480edd"}],"specs/mitaka/cinder-api-atomic-status-change.rst":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b92f6e5aa2e7999170fe52f2ede5225a96461017","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  accessing the same backend, they can no longer tell when they are stuck or"},{"line_number":26,"context_line":"  waiting in the message queue."},{"line_number":27,"context_line":"* Non-atomic state transitions in c-api that may cause race conditions."},{"line_number":28,"context_line":"* Periodic service state report does not expect other nodes updating the same"},{"line_number":29,"context_line":"  service concurrently."},{"line_number":30,"context_line":"* Current implementation does not need to worry about data corruption on losing"},{"line_number":31,"context_line":"  connections (DB, Message Broker, Storage) since only 1 Volume node will be"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a1a9d01_e20a9389","line":28,"updated":"2015-09-30 12:49:44.000000000","message":"Is that really an issue? That\u0027s something new for me, can you point to a scenario where it causes problems?\n\nAnyway - it\u0027s great you\u0027ve outlined all the blockers.","commit_id":"590f11c4910c948c4a6c4ce1f41b7a9842ed8496"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c0eb024fe781b2f8e352db4d4507749e140667d2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  accessing the same backend, they can no longer tell when they are stuck or"},{"line_number":26,"context_line":"  waiting in the message queue."},{"line_number":27,"context_line":"* Non-atomic state transitions in c-api that may cause race conditions."},{"line_number":28,"context_line":"* Periodic service state report does not expect other nodes updating the same"},{"line_number":29,"context_line":"  service concurrently."},{"line_number":30,"context_line":"* Current implementation does not need to worry about data corruption on losing"},{"line_number":31,"context_line":"  connections (DB, Message Broker, Storage) since only 1 Volume node will be"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a1a9d01_0cec598e","line":28,"in_reply_to":"9a1a9d01_e20a9389","updated":"2015-10-01 17:39:19.000000000","message":"Depends on how we finally do it, if they all report on the same DB row we could be seeing either retries on deadlocks or log errors because the update failed, and what should happen is that it should just ignore it.  It is something to keep in mind depending on final implementation.","commit_id":"590f11c4910c948c4a6c4ce1f41b7a9842ed8496"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"5959565788b0e06b83f3ad70cc7e8ec642c85ad3","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"And we finally make an RPC request to perform the operation:"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":" self.volume_rpcapi.extend_volume(context, volume, new_size, reservations)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Use Cases"},{"line_number":70,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a1a9d01_2dcdd284","line":67,"updated":"2015-09-30 17:31:19.000000000","message":"For more examples, see how Nova calls cinder \nfor volume attach:\n\nNOVA                                                                                               CINDER\n\nvolume_api.get +----------------\u003e  (Get volume info from Cinder DB)\n\nvolume_api.check_attach +----\n  (check status of vol) \u003c----\n\nvolume_api.reserve +------------\u003e  (Set volume state to \u0027attaching\u0027)\n\nAnd in Nova volume detach:\nNOVA                                                      CINDER\n  volume_api.get +----------------\u003e  (Get volume info from Cinder DB)\n   detach_volume() \n(check attach_status)\n  \n  volume_api.check_detach +----------\n  (check status of vol)          \u003c----------\n\nvolume_api.begin_detaching ------\u003e  volume_api.get (get volume state)--\n                                                         db.volume_get  \u003c-----------------\n                                                         volume_api.begin_detaching -------\n                                                         db.volume_get  \u003c----------------\n                                                         (check volume status,\n                                                          set status to \u0027detaching\u0027)","commit_id":"590f11c4910c948c4a6c4ce1f41b7a9842ed8496"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b92f6e5aa2e7999170fe52f2ede5225a96461017","unresolved":false,"context_lines":[{"line_number":203,"context_line":"- Set update values depending on other fields.  For example when detaching a"},{"line_number":204,"context_line":"  volume you will have to set the status to \u0027available\u0027 if there are no more"},{"line_number":205,"context_line":"  volume attachments for that volume, and set it to \u0027in-use\u0027 if there are more"},{"line_number":206,"context_line":"  attachments (it was multi attached)."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"- Set update values based on fields on the DB:"},{"line_number":209,"context_line":"  previous_status \u003d status, status \u003d \u0027retyping\u0027"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a1a9d01_625d2346","line":206,"updated":"2015-09-30 12:49:44.000000000","message":"Whoa, good, logical example why this is needed.","commit_id":"590f11c4910c948c4a6c4ce1f41b7a9842ed8496"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c0eb024fe781b2f8e352db4d4507749e140667d2","unresolved":false,"context_lines":[{"line_number":203,"context_line":"- Set update values depending on other fields.  For example when detaching a"},{"line_number":204,"context_line":"  volume you will have to set the status to \u0027available\u0027 if there are no more"},{"line_number":205,"context_line":"  volume attachments for that volume, and set it to \u0027in-use\u0027 if there are more"},{"line_number":206,"context_line":"  attachments (it was multi attached)."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"- Set update values based on fields on the DB:"},{"line_number":209,"context_line":"  previous_status \u003d status, status \u003d \u0027retyping\u0027"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a1a9d01_6c80758c","line":206,"in_reply_to":"9a1a9d01_625d2346","updated":"2015-10-01 17:39:19.000000000","message":"Adding this stuff to the code (Case class) made sense to me because I was the one finding the issues, but it is clearly best to outline it in the specs.","commit_id":"590f11c4910c948c4a6c4ce1f41b7a9842ed8496"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"864d501e73e0040d64cb4d4af5f248ecdf5d8c56","unresolved":false,"context_lines":[{"line_number":262,"context_line":"It could be a good idea to have a maximum number of retries instead of just"},{"line_number":263,"context_line":"looping until we either update the DB or can properly raise an error, that way"},{"line_number":264,"context_line":"we will not have an infinite loop if we have an error in our conditional update"},{"line_number":265,"context_line":"or our validation code."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Dependencies"},{"line_number":268,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_6cbd5fb6","line":265,"updated":"2015-10-08 00:30:19.000000000","message":"I think the above section would benefit from more explanation of when one would raise and when one would continue in the while loop.  As written, it\u0027s not obvious why one wouldn\u0027t raise after the first failed conditional update every time - as if the only logic inside raise_right_validation_error is deciding *what* to raise, not also *whether* to raise or continue.","commit_id":"590f11c4910c948c4a6c4ce1f41b7a9842ed8496"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6b3cca8f8928fe08717e0f36ee228aa3572c410c","unresolved":false,"context_lines":[{"line_number":262,"context_line":"It could be a good idea to have a maximum number of retries instead of just"},{"line_number":263,"context_line":"looping until we either update the DB or can properly raise an error, that way"},{"line_number":264,"context_line":"we will not have an infinite loop if we have an error in our conditional update"},{"line_number":265,"context_line":"or our validation code."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Dependencies"},{"line_number":268,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_1e7b918d","line":265,"in_reply_to":"7a2fa921_6cbd5fb6","updated":"2015-10-08 15:18:46.000000000","message":"I thought it was explained on lines between lines 240-241 and 250-254, but clearly I\u0027m just reading what I want to read. ;-)\n\nI\u0027ve tried to explain it better on the next patch.","commit_id":"590f11c4910c948c4a6c4ce1f41b7a9842ed8496"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"131108827c6c64e3161036d1cf9c7712e64ea57b","unresolved":false,"context_lines":[{"line_number":278,"context_line":"specific at the same time, so we don\u0027t confuse the caller about the real reason"},{"line_number":279,"context_line":"why the operation couldn\u0027t be performed.  For example for volume deletion"},{"line_number":280,"context_line":"operation we could return error message \"Volume cannot be deleted, status must"},{"line_number":281,"context_line":"be available or error and must not have snapshots\"."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"The benefit of the first approach is that you basically remove the possibility"},{"line_number":284,"context_line":"of returning a generic error at the cost of increasing code complexity and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa80f949_a7b6873b","line":281,"updated":"2015-11-03 17:55:01.000000000","message":"At the summit Duncan had a point that if you\u0027ve done the SELECT in same transaction you should get the same results as conditional UPDATE operation. This may not be true for all cases - it would be needed to lock both the table and all related tables to achieve such behavior in case of \"must not have snapshots\" constraint. I\u0027m not sure on the isolation level we\u0027re using, but I doubt it is that high.","commit_id":"e34b31fd0f51320f84dce66858cdb539206aa92b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"aedcdec9068dbda062a9f9a612b08d6887ee1780","unresolved":false,"context_lines":[{"line_number":74,"context_line":"\u0027available\u0027 or more complex conditions referring to other tables."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"This solution has been chosen over other alternatives because `performance"},{"line_number":77,"context_line":"numbers`_ in tests show that even under the most extreme conditions in a"},{"line_number":78,"context_line":"multi-master cluster DB configuration they will have great performance results."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The idea is to keep Cinder API service behaving as close as possible to the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba8a016a_98a839dd","line":77,"updated":"2015-11-23 17:34:49.000000000","message":"nit: stray _ character","commit_id":"5819ed47214abaa12eadd78dea682f121d0725a4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5a9aa36e9853d1e6da6f1ff183f4ae3fff3a5eeb","unresolved":false,"context_lines":[{"line_number":74,"context_line":"\u0027available\u0027 or more complex conditions referring to other tables."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"This solution has been chosen over other alternatives because `performance"},{"line_number":77,"context_line":"numbers`_ in tests show that even under the most extreme conditions in a"},{"line_number":78,"context_line":"multi-master cluster DB configuration they will have great performance results."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The idea is to keep Cinder API service behaving as close as possible to the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba8a016a_58ac1135","line":77,"in_reply_to":"ba8a016a_98a839dd","updated":"2015-11-23 17:45:14.000000000","message":"That is not a stray character, that\u0027s an external link, same a L270.  Please read reStructuredText markup language specs for more info.","commit_id":"5819ed47214abaa12eadd78dea682f121d0725a4"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"aedcdec9068dbda062a9f9a612b08d6887ee1780","unresolved":false,"context_lines":[{"line_number":273,"context_line":"depending on the order of the values, example on a volume with \u0027available\u0027"},{"line_number":274,"context_line":"status:"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"   UPDATE volumes SET previous_status\u003dstatus, status\u003d\u0027reyping\u0027 WHERE"},{"line_number":277,"context_line":"   id\u003d\u002744f284f9-877d-4fce-9eb4-67a052410054\u0027;"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Will result in a volume with \u0027retyping\u0027 status and \u0027available\u0027 previous_status"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba8a016a_58c0917c","line":276,"updated":"2015-11-23 17:34:49.000000000","message":":s/reyping/retyping","commit_id":"5819ed47214abaa12eadd78dea682f121d0725a4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5a9aa36e9853d1e6da6f1ff183f4ae3fff3a5eeb","unresolved":false,"context_lines":[{"line_number":273,"context_line":"depending on the order of the values, example on a volume with \u0027available\u0027"},{"line_number":274,"context_line":"status:"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"   UPDATE volumes SET previous_status\u003dstatus, status\u003d\u0027reyping\u0027 WHERE"},{"line_number":277,"context_line":"   id\u003d\u002744f284f9-877d-4fce-9eb4-67a052410054\u0027;"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Will result in a volume with \u0027retyping\u0027 status and \u0027available\u0027 previous_status"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba8a016a_b3267eb8","line":276,"in_reply_to":"ba8a016a_58c0917c","updated":"2015-11-23 17:45:14.000000000","message":"Done","commit_id":"5819ed47214abaa12eadd78dea682f121d0725a4"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"3b6f7a33b1eff68e126e76dde3585ee9085622f4","unresolved":false,"context_lines":[{"line_number":267,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"No openstack dependencies, but it has a SQLAlchemy depencency on `issue"},{"line_number":270,"context_line":"#3541`_."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"On some DBs\u0027 update method is order dependent, so they behave differently"},{"line_number":273,"context_line":"depending on the order of the values, example on a volume with \u0027available\u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a8ffd7b_0e604cce","line":270,"updated":"2015-12-02 18:14:44.000000000","message":"Is it dependency fixed in SQLAlchemy, in which version?  Is that version released and being adopted in global requirement?","commit_id":"a5dff08e8e0e0012b531032545dd9075631b6c3b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e6e159dd9a88d6b76b1e43e81ee13dd48378dc22","unresolved":false,"context_lines":[{"line_number":267,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"No openstack dependencies, but it has a SQLAlchemy depencency on `issue"},{"line_number":270,"context_line":"#3541`_."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"On some DBs\u0027 update method is order dependent, so they behave differently"},{"line_number":273,"context_line":"depending on the order of the values, example on a volume with \u0027available\u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a8ffd7b_9ec22584","line":270,"in_reply_to":"9a8ffd7b_0e604cce","updated":"2015-12-02 19:35:32.000000000","message":"We\u0027re discussing including it in 1.0 branch (1.0.10 possibly). No version with the fix released yet.","commit_id":"a5dff08e8e0e0012b531032545dd9075631b6c3b"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"7bb0e3ddf05f2e6a1624f2150c4a7be8a46f0211","unresolved":false,"context_lines":[{"line_number":267,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"No openstack dependencies, but it has a SQLAlchemy depencency on `issue"},{"line_number":270,"context_line":"#3541`_."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"On some DBs\u0027 update method is order dependent, so they behave differently"},{"line_number":273,"context_line":"depending on the order of the values, example on a volume with \u0027available\u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a8ffd7b_b6cffb7d","line":270,"in_reply_to":"9a8ffd7b_9ec22584","updated":"2015-12-03 06:07:21.000000000","message":"Thanks, I looked through the issue and pull request.  It\u0027s a very nice job Gorka tackling this problem.","commit_id":"a5dff08e8e0e0012b531032545dd9075631b6c3b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6eb577627b0402e44e5da77a318b61beab557dc1","unresolved":false,"context_lines":[{"line_number":267,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"No openstack dependencies, but it has a SQLAlchemy depencency on `issue"},{"line_number":270,"context_line":"#3541`_."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"On some DBs\u0027 update method is order dependent, so they behave differently"},{"line_number":273,"context_line":"depending on the order of the values, example on a volume with \u0027available\u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a8ffd7b_6cb45781","line":270,"in_reply_to":"9a8ffd7b_b6cffb7d","updated":"2015-12-03 11:26:23.000000000","message":"Feature is merged now and it\u0027s going to be in 1.0.10. Documentation on the feature here: http://docs.sqlalchemy.org/en/rel_1_0/core/tutorial.html#parameter-ordered-updates","commit_id":"a5dff08e8e0e0012b531032545dd9075631b6c3b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4bffe31cb432f626feee38fac1e8bd52e2b44e86","unresolved":false,"context_lines":[{"line_number":266,"context_line":"Dependencies"},{"line_number":267,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"No openstack dependencies, but it has a SQLAlchemy depencency on version 1.0.10"},{"line_number":270,"context_line":"that includes Parameter-Ordered Updates (`issue #3541`_)."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"On some DBs\u0027 update method is order dependent, so they behave differently"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7a740942_1fd80c53","line":269,"updated":"2015-12-03 18:19:11.000000000","message":"s/depencency/dependency","commit_id":"900f74440172c40edadb07104545d314e17e9e0d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"26b43e0a2d4a5cb1fc8c2bd66bdf6422859b48f2","unresolved":false,"context_lines":[{"line_number":266,"context_line":"Dependencies"},{"line_number":267,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"No openstack dependencies, but it has a SQLAlchemy depencency on version 1.0.10"},{"line_number":270,"context_line":"that includes Parameter-Ordered Updates (`issue #3541`_)."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"On some DBs\u0027 update method is order dependent, so they behave differently"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7a740942_2347cebc","line":269,"in_reply_to":"7a740942_1fd80c53","updated":"2015-12-04 10:26:54.000000000","message":"Will fix it if I send another patch.","commit_id":"900f74440172c40edadb07104545d314e17e9e0d"}]}
