)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"04db77c8e4572ca58b97aacc8f5383cdc6bdf567","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow to unshelve instance booted from volume"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Because when we shelve an instance volume are not detached from cinder."},{"line_number":10,"context_line":"We must not check if volume is free, because already used by the shelved"},{"line_number":11,"context_line":"instance and we must not try to reattach the volume in cinder because is"},{"line_number":12,"context_line":"already attached."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWH%2F9oWI%3D","line":10,"updated":"2014-04-03 08:35:32.000000000","message":"A verb is missing in this line.","commit_id":"d84deb59803ae6c65ca4a57a5b63cbab395cf7f5"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"04db77c8e4572ca58b97aacc8f5383cdc6bdf567","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Because when we shelve an instance volume are not detached from cinder."},{"line_number":10,"context_line":"We must not check if volume is free, because already used by the shelved"},{"line_number":11,"context_line":"instance and we must not try to reattach the volume in cinder because is"},{"line_number":12,"context_line":"already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I780a9407feeb48ecd3e295508ce3e6bc3b09d3e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWH%2F9oWE%3D","line":11,"updated":"2014-04-03 08:35:32.000000000","message":"A verb is missing in this line.","commit_id":"d84deb59803ae6c65ca4a57a5b63cbab395cf7f5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"919b476cebaffd2cbd638cd6cdd64a83d6ecbd86","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we shelve an instance, volumes are not detached from cinder."},{"line_number":10,"context_line":"We must not check if the volumes are free, because they are already used"},{"line_number":11,"context_line":"by the shelved instance and we must not tried to reattach the volume"},{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Author: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAWH%2F9hcY%3D","line":11,"updated":"2014-04-03 23:07:59.000000000","message":"s/not tried/not try","commit_id":"5a91b8d29f76ad8979ce7af57fabddffc9c09e59"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"83dac087954da4990e944ebad353b4ad83e0364b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we shelve an instance, volumes are not detached from cinder."},{"line_number":10,"context_line":"We must not check if the volumes are free, because they are already used"},{"line_number":11,"context_line":"by the shelved instance and we must not tried to reattach the volume"},{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Author: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAWH%2F9fBE%3D","line":11,"in_reply_to":"AAAAWH%2F9hcY%3D","updated":"2014-04-04 07:37:11.000000000","message":"Done","commit_id":"5a91b8d29f76ad8979ce7af57fabddffc9c09e59"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"aed834e4aba343489961af06287d7adf9545f240","unresolved":false,"context_lines":[{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Author: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"},{"line_number":15,"context_line":"Closes-bug: #1287447"},{"line_number":16,"context_line":"Change-Id: I780a9407feeb48ecd3e295508ce3e6bc3b09d3e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAWH%2F9Sfg%3D","line":15,"updated":"2014-04-07 11:11:19.000000000","message":"Actually this does not close the bug completely as that bug reports more than one issue if I am not mistaken so it\u0027s better to use Partial-bug?","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"733d4a7ee60406571aefc816d560c1dc7868680c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Author: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"},{"line_number":15,"context_line":"Closes-bug: #1287447"},{"line_number":16,"context_line":"Change-Id: I780a9407feeb48ecd3e295508ce3e6bc3b09d3e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAWH%2F9R%2B8%3D","line":15,"updated":"2014-04-07 13:44:27.000000000","message":"Other issues I have with shelve/unshelve and boot from volume are addressed in an other bug report https://bugs.launchpad.net/nova/+bug/1297325.\n\nThe bug reported thinks that volume should be detached (from the cinder point of view), but this is wrong, shelve means keep resource allocated but remove the instance from the hypervisor.\n\nThe volumes, from nova driver point of view, are already detached correctly, and the volumes, from cinder point view, must continue to be attached other we can never unshelve the instance if the volume is attached on an other instance.","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"85febd82697d166ea679ff0b33071d5bc2644b42","unresolved":false,"context_lines":[{"line_number":11,"context_line":"by the shelved instance and we must not try to reattach the volume"},{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Author: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"},{"line_number":15,"context_line":"Closes-bug: #1287447"},{"line_number":16,"context_line":"Change-Id: I780a9407feeb48ecd3e295508ce3e6bc3b09d3e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAW3%2F%2Ff4M%3D","line":14,"updated":"2014-04-14 08:09:36.000000000","message":"s/Co-Author/Co-Authored-By","commit_id":"71ce3deb294ad7c30946c6860b4e2ff8ced0b625"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f864f31e7d976112b1e941e0edec27e32480d0a7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"by the shelved instance and we must not try to reattach the volume"},{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Author: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"},{"line_number":15,"context_line":"Closes-bug: #1287447"},{"line_number":16,"context_line":"Change-Id: I780a9407feeb48ecd3e295508ce3e6bc3b09d3e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAW3%2F%2Ffic%3D","line":14,"in_reply_to":"AAAAW3%2F%2Ff4M%3D","updated":"2014-04-14 08:48:10.000000000","message":"Done","commit_id":"71ce3deb294ad7c30946c6860b4e2ff8ced0b625"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2826fe22b5e0c5a7ec26e8c2b8e4edb021be8b66","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we shelve an instance, volumes are not detached from cinder."},{"line_number":10,"context_line":"We must not check if the volumes are free, because they are already used"},{"line_number":11,"context_line":"by the shelved instance and we must not try to reattach the volume"},{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"},{"line_number":15,"context_line":"Closes-bug: #1287447"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAXX%2F%2F25U%3D","line":12,"updated":"2014-04-25 18:20:38.000000000","message":"This seems to describe a really small/simple change, yet I see a lot of things in this patch that might look legit, but aren\u0027t covered here. Thus, I\u0027m not sure why they\u0027re changing.\n\nCould you either split the bits not covered in this commit message out to a separate patch, or extend what you have here to explain the rest of what you\u0027re doing?","commit_id":"bd9cbd82b6d8dbe89d6110a875799785a3225f5f"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"11726e1d67af1a43236b2ccd60341827aa3bce2f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we shelve an instance, volumes are not detached from cinder."},{"line_number":10,"context_line":"We must not check if the volumes are free, because they are already used"},{"line_number":11,"context_line":"by the shelved instance and we must not try to reattach the volume"},{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"},{"line_number":15,"context_line":"Closes-bug: #1287447"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAXX%2F%2FwOg%3D","line":12,"in_reply_to":"AAAAXX%2F%2F25U%3D","updated":"2014-04-28 08:29:56.000000000","message":"Done, let me know if this really need to have both changes splitted, but unshelving a instance booted from volume, works only with both changes.","commit_id":"bd9cbd82b6d8dbe89d6110a875799785a3225f5f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"0d4d8448f6ba965078c692f2a9323252fac688a1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow to unshelve instance booted from volume"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we shelve an instance, volumes are not detached from cinder."},{"line_number":10,"context_line":"We must not check if the volumes are free, because they are already used"},{"line_number":11,"context_line":"by the shelved instance and we must not try to reattach the volume"},{"line_number":12,"context_line":"in cinder because they are already attached."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"9ad9bd40_04277865","line":9,"updated":"2014-05-01 00:42:22.000000000","message":"Huh? I am unclear on what you are trying to say here. Are you explaining what you did, or the problem?\n\nPlease see: https://wiki.openstack.org/wiki/GitCommitMessages#Information_in_commit_messages","commit_id":"9b8e2f6502857b05bff72da9af0513de35646614"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7dd88a3fb668a2636c898ce902fe8ec812623886","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow to unshelve instance booted from volume"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we shelve an instance, volumes are not detached from cinder."},{"line_number":10,"context_line":"We must not check if the volumes are free, because they are already used"},{"line_number":11,"context_line":"by the shelved instance and we must not try to reattach the volume"},{"line_number":12,"context_line":"in cinder because they are already attached."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7adec928_04031a10","line":9,"in_reply_to":"9ad9bd40_04277865","updated":"2014-05-07 14:12:23.000000000","message":"I have rephrase the commit message.","commit_id":"9b8e2f6502857b05bff72da9af0513de35646614"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"0d4d8448f6ba965078c692f2a9323252fac688a1","unresolved":false,"context_lines":[{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"},{"line_number":15,"context_line":"Closes-bug: #1305399"},{"line_number":16,"context_line":"Change-Id: I780a9407feeb48ecd3e295508ce3e6bc3b09d3e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"9ad9bd40_841aa815","line":15,"updated":"2014-05-01 00:42:22.000000000","message":"I would like to see a tempest patch to test up for review as well. So we can make prevent regressions here.","commit_id":"9b8e2f6502857b05bff72da9af0513de35646614"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"cddd1c095e52871d42a7349694094e15b40c9748","unresolved":false,"context_lines":[{"line_number":12,"context_line":"in cinder because they are already attached."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@cloudwatt.com\u003e"},{"line_number":15,"context_line":"Closes-bug: #1305399"},{"line_number":16,"context_line":"Change-Id: I780a9407feeb48ecd3e295508ce3e6bc3b09d3e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"9ad9bd40_17947641","line":15,"in_reply_to":"9ad9bd40_841aa815","updated":"2014-05-07 08:56:36.000000000","message":"I am preparing a tempest patch for this.","commit_id":"9b8e2f6502857b05bff72da9af0513de35646614"}],"nova/compute/manager.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"919b476cebaffd2cbd638cd6cdd64a83d6ecbd86","unresolved":false,"context_lines":[{"line_number":3925,"context_line":"            node_name \u003d compute_node[\u0027hypervisor_hostname\u0027]"},{"line_number":3926,"context_line":"        except exception.NotFound:"},{"line_number":3927,"context_line":"            LOG.exception(_(\u0027Failed to get compute_info for %s\u0027) % self.host)"},{"line_number":3928,"context_line":"        finally:"},{"line_number":3929,"context_line":"            instance.host \u003d self.host"},{"line_number":3930,"context_line":"            instance.node \u003d node_name"},{"line_number":3931,"context_line":"        instance.power_state \u003d self._get_power_state(context, instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9hZE%3D","line":3928,"updated":"2014-04-03 23:07:59.000000000","message":"You want else: here, not finally:\n\nfinally: is executed in *all cases, even when an exception occurs*. else: is only executed when no exception occurred. In the code above, node_name will not be defined if the NotFound is raised, and instance.node \u003d node_name on line 3930 will raise a NameError erroneously.\n\nAlternately, just change line 3925 to this:\n\n instance.node \u003d compute_node[\u0027hypervisor_hostname\u0027]\n\nand de-indent line 3929 after removing the finally: block entirely.","commit_id":"5a91b8d29f76ad8979ce7af57fabddffc9c09e59"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"83dac087954da4990e944ebad353b4ad83e0364b","unresolved":false,"context_lines":[{"line_number":3925,"context_line":"            node_name \u003d compute_node[\u0027hypervisor_hostname\u0027]"},{"line_number":3926,"context_line":"        except exception.NotFound:"},{"line_number":3927,"context_line":"            LOG.exception(_(\u0027Failed to get compute_info for %s\u0027) % self.host)"},{"line_number":3928,"context_line":"        finally:"},{"line_number":3929,"context_line":"            instance.host \u003d self.host"},{"line_number":3930,"context_line":"            instance.node \u003d node_name"},{"line_number":3931,"context_line":"        instance.power_state \u003d self._get_power_state(context, instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fHo%3D","line":3928,"in_reply_to":"AAAAWH%2F9hZE%3D","updated":"2014-04-04 07:37:11.000000000","message":"I have dig deeper into _get_compute_info and it use the conductor and can raise other kind of exception, but we want unshelve finish successfully even we don\u0027t get the node_name, \nlike the post_live_migration_at_destination already does.\n\nSo I have moved all the end of the unshelve code into the finally statement to ensure it will be run.\n\nAlso it doesn\u0027t raise NameError, node_name is set to None just before the try statement.","commit_id":"5a91b8d29f76ad8979ce7af57fabddffc9c09e59"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"aed834e4aba343489961af06287d7adf9545f240","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"                    driver_block_device.attach_block_devices("},{"line_number":1696,"context_line":"                        driver_block_device.convert_snapshots(bdms),"},{"line_number":1697,"context_line":"                        context, instance, self.volume_api,"},{"line_number":1698,"context_line":"                        self.driver, self._await_block_device_map_created) +"},{"line_number":1699,"context_line":"                    driver_block_device.attach_block_devices("},{"line_number":1700,"context_line":"                        driver_block_device.convert_images(bdms),"},{"line_number":1701,"context_line":"                        context, instance, self.volume_api,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9Swg%3D","line":1698,"updated":"2014-04-07 11:11:19.000000000","message":"You should do this with snapshot\u0027s as well - once they have they volume_id set the act basically the same like volumes.","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"733d4a7ee60406571aefc816d560c1dc7868680c","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"                    driver_block_device.attach_block_devices("},{"line_number":1696,"context_line":"                        driver_block_device.convert_snapshots(bdms),"},{"line_number":1697,"context_line":"                        context, instance, self.volume_api,"},{"line_number":1698,"context_line":"                        self.driver, self._await_block_device_map_created) +"},{"line_number":1699,"context_line":"                    driver_block_device.attach_block_devices("},{"line_number":1700,"context_line":"                        driver_block_device.convert_images(bdms),"},{"line_number":1701,"context_line":"                        context, instance, self.volume_api,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9R9c%3D","line":1698,"in_reply_to":"AAAAWH%2F9Swg%3D","updated":"2014-04-07 13:44:27.000000000","message":"Done","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d267aef11b2249e59b23344b61e953fa2c15777a","unresolved":false,"context_lines":[{"line_number":3919,"context_line":"            image_service.delete(context, image[\u0027id\u0027])"},{"line_number":3920,"context_line":""},{"line_number":3921,"context_line":"        self._unshelve_instance_key_restore(instance, scrubbed_keys)"},{"line_number":3922,"context_line":"        node_name \u003d None"},{"line_number":3923,"context_line":"        try:"},{"line_number":3924,"context_line":"            compute_node \u003d self._get_compute_info(context.elevated(), self.host)"},{"line_number":3925,"context_line":"            node_name \u003d compute_node[\u0027hypervisor_hostname\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9WtI%3D","line":3922,"updated":"2014-04-05 18:55:40.000000000","message":"Ah, didn\u0027t catch this on the original patch, thx...","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d267aef11b2249e59b23344b61e953fa2c15777a","unresolved":false,"context_lines":[{"line_number":3924,"context_line":"            compute_node \u003d self._get_compute_info(context.elevated(), self.host)"},{"line_number":3925,"context_line":"            node_name \u003d compute_node[\u0027hypervisor_hostname\u0027]"},{"line_number":3926,"context_line":"        except exception.NotFound:"},{"line_number":3927,"context_line":"            LOG.exception(_(\u0027Failed to get compute_info for %s\u0027) % self.host)"},{"line_number":3928,"context_line":"        finally:"},{"line_number":3929,"context_line":"            instance.host \u003d self.host"},{"line_number":3930,"context_line":"            instance.node \u003d node_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9WtA%3D","line":3927,"updated":"2014-04-05 18:55:40.000000000","message":"This log message should not be EXCEPTION level, as apparently this is an error condition that is handled without re-raising or causing any adverse side effect. Recommend downgrading this to DEBUG level.","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"abf9beb8cc66d747d8d0ee17414c2ec2d764fa8b","unresolved":false,"context_lines":[{"line_number":3924,"context_line":"            compute_node \u003d self._get_compute_info(context.elevated(), self.host)"},{"line_number":3925,"context_line":"            node_name \u003d compute_node[\u0027hypervisor_hostname\u0027]"},{"line_number":3926,"context_line":"        except exception.NotFound:"},{"line_number":3927,"context_line":"            LOG.exception(_(\u0027Failed to get compute_info for %s\u0027) % self.host)"},{"line_number":3928,"context_line":"        finally:"},{"line_number":3929,"context_line":"            instance.host \u003d self.host"},{"line_number":3930,"context_line":"            instance.node \u003d node_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9WKw%3D","line":3927,"updated":"2014-04-06 07:24:23.000000000","message":"please use a , instead of the %","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"733d4a7ee60406571aefc816d560c1dc7868680c","unresolved":false,"context_lines":[{"line_number":3924,"context_line":"            compute_node \u003d self._get_compute_info(context.elevated(), self.host)"},{"line_number":3925,"context_line":"            node_name \u003d compute_node[\u0027hypervisor_hostname\u0027]"},{"line_number":3926,"context_line":"        except exception.NotFound:"},{"line_number":3927,"context_line":"            LOG.exception(_(\u0027Failed to get compute_info for %s\u0027) % self.host)"},{"line_number":3928,"context_line":"        finally:"},{"line_number":3929,"context_line":"            instance.host \u003d self.host"},{"line_number":3930,"context_line":"            instance.node \u003d node_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9SBc%3D","line":3927,"in_reply_to":"AAAAWH%2F9WKw%3D","updated":"2014-04-07 13:44:27.000000000","message":"Done","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d267aef11b2249e59b23344b61e953fa2c15777a","unresolved":false,"context_lines":[{"line_number":3933,"context_line":"            instance.task_state \u003d None"},{"line_number":3934,"context_line":"            instance.launched_at \u003d timeutils.utcnow()"},{"line_number":3935,"context_line":"            instance.save(expected_task_state\u003dtask_states.SPAWNING)"},{"line_number":3936,"context_line":"            self._notify_about_instance_usage(context, instance, \u0027unshelve.end\u0027)"},{"line_number":3937,"context_line":""},{"line_number":3938,"context_line":"    @reverts_task_state"},{"line_number":3939,"context_line":"    @wrap_instance_fault"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9WtE%3D","line":3936,"updated":"2014-04-05 18:55:40.000000000","message":"I\u0027m confused why you are using finally: at all here. Wouldn\u0027t the exact same behavior result from simply de-indenting lines 3929-3936 and getting rid of the finally: block? The only case when finally: is useful (vs. just having the code in the finally: block directly after the whole try: block) is when an exception can occur in the exception: handling blocks, which clearly isn\u0027t the case here, as the only thing happening in the exception: block is a LOG message...","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"74928f36f1f4ab021a59c56534ff88fabd83c67f","unresolved":false,"context_lines":[{"line_number":3933,"context_line":"            instance.task_state \u003d None"},{"line_number":3934,"context_line":"            instance.launched_at \u003d timeutils.utcnow()"},{"line_number":3935,"context_line":"            instance.save(expected_task_state\u003dtask_states.SPAWNING)"},{"line_number":3936,"context_line":"            self._notify_about_instance_usage(context, instance, \u0027unshelve.end\u0027)"},{"line_number":3937,"context_line":""},{"line_number":3938,"context_line":"    @reverts_task_state"},{"line_number":3939,"context_line":"    @wrap_instance_fault"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9UIU%3D","line":3936,"in_reply_to":"AAAAWH%2F9WtE%3D","updated":"2014-04-07 06:55:19.000000000","message":"I use finally in case  of _get_compute_info raise a exception that is not exception.NotFound. _get_compute_info can raise other kind of exception and we cannot put the instance in error state just because we can\u0027t get the node_name when everything else is a success.","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"85febd82697d166ea679ff0b33071d5bc2644b42","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"                           do_check_attach\u003dTrue, do_volume_attach\u003dTrue):"},{"line_number":1684,"context_line":"        \"\"\"Set up the block device for an instance with error logging.\"\"\""},{"line_number":1685,"context_line":"        try:"},{"line_number":1686,"context_line":""},{"line_number":1687,"context_line":"            block_device_info \u003d {"},{"line_number":1688,"context_line":"                \u0027root_device_name\u0027: instance[\u0027root_device_name\u0027],"},{"line_number":1689,"context_line":"                \u0027swap\u0027: driver_block_device.convert_swap(bdms),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Ff6s%3D","line":1686,"updated":"2014-04-14 08:09:36.000000000","message":"nit: this line needs to be removed if you rebase the code.","commit_id":"71ce3deb294ad7c30946c6860b4e2ff8ced0b625"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f864f31e7d976112b1e941e0edec27e32480d0a7","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"                           do_check_attach\u003dTrue, do_volume_attach\u003dTrue):"},{"line_number":1684,"context_line":"        \"\"\"Set up the block device for an instance with error logging.\"\"\""},{"line_number":1685,"context_line":"        try:"},{"line_number":1686,"context_line":""},{"line_number":1687,"context_line":"            block_device_info \u003d {"},{"line_number":1688,"context_line":"                \u0027root_device_name\u0027: instance[\u0027root_device_name\u0027],"},{"line_number":1689,"context_line":"                \u0027swap\u0027: driver_block_device.convert_swap(bdms),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Ffg0%3D","line":1686,"in_reply_to":"AAAAW3%2F%2Ff6s%3D","updated":"2014-04-14 08:48:10.000000000","message":"Done","commit_id":"71ce3deb294ad7c30946c6860b4e2ff8ced0b625"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a1dc316ca04c6df299dd780824479b18a1019300","unresolved":false,"context_lines":[{"line_number":3832,"context_line":"        #directly called instead of shelve_instance"},{"line_number":3833,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_at\u0027, timeutils.strtime())"},{"line_number":3834,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_image_id\u0027, None)"},{"line_number":3835,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_host\u0027, self.host)"},{"line_number":3836,"context_line":""},{"line_number":3837,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":3838,"context_line":"        instance.host \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWn%2F%2F9qw%3D","line":3835,"updated":"2014-04-08 08:14:52.000000000","message":"Potentially - you may wan to actually rebase on top of https://review.openstack.org/#/c/77803 as without the changes in the conductor that are in that patch - this will still not work (if I am not mistaken).","commit_id":"71ce3deb294ad7c30946c6860b4e2ff8ced0b625"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"3195fcaa078b788943059fee0ab76603c5c07aba","unresolved":false,"context_lines":[{"line_number":3832,"context_line":"        #directly called instead of shelve_instance"},{"line_number":3833,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_at\u0027, timeutils.strtime())"},{"line_number":3834,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_image_id\u0027, None)"},{"line_number":3835,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_host\u0027, self.host)"},{"line_number":3836,"context_line":""},{"line_number":3837,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":3838,"context_line":"        instance.host \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWn%2F%2F8jc%3D","line":3835,"in_reply_to":"AAAAWn%2F%2F9qw%3D","updated":"2014-04-08 10:30:39.000000000","message":"I don\u0027t see why we need to fix the conductor, the fact is when an instance is shelved \u0027shelve_*\u0027 attributes must be set. When all attributes are set the conductor doesn\u0027t fail anymore.\n\nAlso, this is very important to have this attributes set correctly to send notification with all information about the shelving (to be able to bill it for example).","commit_id":"71ce3deb294ad7c30946c6860b4e2ff8ced0b625"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"eba12fffb5ee31e792b557ee082a9e73677bee5f","unresolved":false,"context_lines":[{"line_number":3939,"context_line":"            instance.launched_at \u003d timeutils.utcnow()"},{"line_number":3940,"context_line":"            instance.save(expected_task_state\u003dtask_states.SPAWNING)"},{"line_number":3941,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":3942,"context_line":"                                              \u0027unshelve.end\u0027)"},{"line_number":3943,"context_line":""},{"line_number":3944,"context_line":"    @reverts_task_state"},{"line_number":3945,"context_line":"    @wrap_instance_fault"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F9Pq0%3D","line":3942,"updated":"2014-04-07 17:33:04.000000000","message":"OK, thx for your explanation on this Mehdi, that makes sense.","commit_id":"71ce3deb294ad7c30946c6860b4e2ff8ced0b625"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"fa1b8394712991291e30675aedd67d6f920663a8","unresolved":false,"context_lines":[{"line_number":3845,"context_line":"        self.driver.destroy(context, instance, network_info,"},{"line_number":3846,"context_line":"                block_device_info)"},{"line_number":3847,"context_line":""},{"line_number":3848,"context_line":"        #NOTE(sileht): in case of boot from volume shelve_offload_instance is"},{"line_number":3849,"context_line":"        #directly called instead of shelve_instance"},{"line_number":3850,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_at\u0027, timeutils.strtime())"},{"line_number":3851,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_image_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a1371a2_8a3bcf37","line":3848,"updated":"2014-04-28 20:42:32.000000000","message":"These don\u0027t need to be set for the boot from volume case.  shelved_at is used for a periodic task to know when to go from shelved to shelved_offload, shelved_image_id is used to track the instance snapshot which doesn\u0027t exist in this case, and shelved host is used to turn back on a shelved instance before it goes to shelved_offload.\n\nLooking at the bug report, I think the proper fix for the shelved_image_id error would be to use sys_meta.get(\u0027shelved_image_id\u0027) in the conductor code.","commit_id":"f495c1287ea179e9eca17a3f7471419e3abb737d"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"d094480c864a82b4c3449c5c015e8663c293a9db","unresolved":false,"context_lines":[{"line_number":3845,"context_line":"        self.driver.destroy(context, instance, network_info,"},{"line_number":3846,"context_line":"                block_device_info)"},{"line_number":3847,"context_line":""},{"line_number":3848,"context_line":"        #NOTE(sileht): in case of boot from volume shelve_offload_instance is"},{"line_number":3849,"context_line":"        #directly called instead of shelve_instance"},{"line_number":3850,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_at\u0027, timeutils.strtime())"},{"line_number":3851,"context_line":"        instance.system_metadata.setdefault(\u0027shelved_image_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bad4c104_ca53f46a","line":3848,"in_reply_to":"3a1371a2_8a3bcf37","updated":"2014-04-29 11:14:59.000000000","message":"So I will wait the fix for the error handling in the conductor: https://review.openstack.org/#/c/71907/","commit_id":"f495c1287ea179e9eca17a3f7471419e3abb737d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"fa1b8394712991291e30675aedd67d6f920663a8","unresolved":false,"context_lines":[{"line_number":3940,"context_line":"            image_service.delete(context, image[\u0027id\u0027])"},{"line_number":3941,"context_line":""},{"line_number":3942,"context_line":"        self._unshelve_instance_key_restore(instance, scrubbed_keys)"},{"line_number":3943,"context_line":"        node_name \u003d None"},{"line_number":3944,"context_line":"        try:"},{"line_number":3945,"context_line":"            compute_node \u003d self._get_compute_info(context.elevated(),"},{"line_number":3946,"context_line":"                                                  self.host)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a1371a2_2aba9be1","line":3943,"updated":"2014-04-28 20:42:32.000000000","message":"It\u0027s not at all obvious, but rt.instance_claim() sets these values on the instance.  So this is unecessary, and would belong in a separate patch anyways.","commit_id":"f495c1287ea179e9eca17a3f7471419e3abb737d"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"d094480c864a82b4c3449c5c015e8663c293a9db","unresolved":false,"context_lines":[{"line_number":3940,"context_line":"            image_service.delete(context, image[\u0027id\u0027])"},{"line_number":3941,"context_line":""},{"line_number":3942,"context_line":"        self._unshelve_instance_key_restore(instance, scrubbed_keys)"},{"line_number":3943,"context_line":"        node_name \u003d None"},{"line_number":3944,"context_line":"        try:"},{"line_number":3945,"context_line":"            compute_node \u003d self._get_compute_info(context.elevated(),"},{"line_number":3946,"context_line":"                                                  self.host)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bad4c104_5d524c14","line":3943,"in_reply_to":"3a1371a2_2aba9be1","updated":"2014-04-29 11:14:59.000000000","message":"Done","commit_id":"f495c1287ea179e9eca17a3f7471419e3abb737d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"75ca37720f38db8be8de8df47ef3ad134e0ac526","unresolved":false,"context_lines":[{"line_number":3954,"context_line":"        instance.task_state \u003d None"},{"line_number":3955,"context_line":"        instance.launched_at \u003d timeutils.utcnow()"},{"line_number":3956,"context_line":"        instance.save(expected_task_state\u003dtask_states.SPAWNING)"},{"line_number":3957,"context_line":"        self._notify_about_instance_usage(context, instance,"},{"line_number":3958,"context_line":"                                            \u0027unshelve.end\u0027)"},{"line_number":3959,"context_line":""},{"line_number":3960,"context_line":"    @wrap_instance_fault"}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_ac886823","line":3957,"updated":"2014-05-08 18:17:26.000000000","message":"This is an unnecessary linebreak and non-standard indent.  It should just be left as it was.","commit_id":"28d314634fc88e84581f75e2b3813fd7ad1e4f30"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"bfeee6f770670d9aa58dd2aeef792a1211f02300","unresolved":false,"context_lines":[{"line_number":3954,"context_line":"        instance.task_state \u003d None"},{"line_number":3955,"context_line":"        instance.launched_at \u003d timeutils.utcnow()"},{"line_number":3956,"context_line":"        instance.save(expected_task_state\u003dtask_states.SPAWNING)"},{"line_number":3957,"context_line":"        self._notify_about_instance_usage(context, instance,"},{"line_number":3958,"context_line":"                                            \u0027unshelve.end\u0027)"},{"line_number":3959,"context_line":""},{"line_number":3960,"context_line":"    @wrap_instance_fault"}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_3a27f8b7","line":3957,"in_reply_to":"7adec928_ac886823","updated":"2014-05-12 18:06:41.000000000","message":"Done","commit_id":"28d314634fc88e84581f75e2b3813fd7ad1e4f30"}],"nova/tests/compute/test_shelve.py":[{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"40507d3fd9382b95e84ea6172df29714320caad8","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                filter_properties\u003dfilter_properties, node\u003dnode)"},{"line_number":250,"context_line":"        self.assertEqual(image[\u0027id\u0027], self.deleted_image_id)"},{"line_number":251,"context_line":"        self.assertEqual(instance.host, self.compute.host)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def test_unshelve_volume_backed(self):"},{"line_number":254,"context_line":"        db_instance \u003d jsonutils.to_primitive(self._create_fake_instance())"},{"line_number":255,"context_line":"        host \u003d \u0027fake-mini\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2F1jE%3D","line":252,"updated":"2014-04-17 03:41:04.000000000","message":"could you add a unittest for unshelving instance with user volumes?\nbecause I have committed duplicate patchs to address the unshelving instance with user volumes:\nhttps://review.openstack.org/#/c/87188/\nand\nhttps://review.openstack.org/#/c/87915/. \nit is same issue but different scenarios.\n\nMy Best\n\nliu sheng","commit_id":"321d116199c66b250be3d2eed44100796a1acb43"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f8dcdf685922894026bba31dce94f078d8aadef1","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                filter_properties\u003dfilter_properties, node\u003dnode)"},{"line_number":250,"context_line":"        self.assertEqual(image[\u0027id\u0027], self.deleted_image_id)"},{"line_number":251,"context_line":"        self.assertEqual(instance.host, self.compute.host)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def test_unshelve_volume_backed(self):"},{"line_number":254,"context_line":"        db_instance \u003d jsonutils.to_primitive(self._create_fake_instance())"},{"line_number":255,"context_line":"        host \u003d \u0027fake-mini\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2FsDQ%3D","line":252,"in_reply_to":"AAAAXH%2F%2F1jE%3D","updated":"2014-04-18 08:01:09.000000000","message":"test_unshelve_volume_backed already cover user volumes.","commit_id":"321d116199c66b250be3d2eed44100796a1acb43"}],"nova/virt/block_device.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"aed834e4aba343489961af06287d7adf9545f240","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    _valid_source \u003d \u0027snapshot\u0027"},{"line_number":284,"context_line":"    _proxy_as_attr \u003d set([\u0027volume_size\u0027, \u0027volume_id\u0027, \u0027snapshot_id\u0027])"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def attach(self, context, instance, volume_api,"},{"line_number":287,"context_line":"               virt_driver, wait_func\u003dNone):"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        if not self.volume_id:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9SvY%3D","line":286,"updated":"2014-04-07 11:11:19.000000000","message":"As already commented - this one method to take it and pass it on to the superclass method too.","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"733d4a7ee60406571aefc816d560c1dc7868680c","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    _valid_source \u003d \u0027snapshot\u0027"},{"line_number":284,"context_line":"    _proxy_as_attr \u003d set([\u0027volume_size\u0027, \u0027volume_id\u0027, \u0027snapshot_id\u0027])"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def attach(self, context, instance, volume_api,"},{"line_number":287,"context_line":"               virt_driver, wait_func\u003dNone):"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        if not self.volume_id:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9R9U%3D","line":286,"in_reply_to":"AAAAWH%2F9SvY%3D","updated":"2014-04-07 13:44:27.000000000","message":"Done","commit_id":"d71726964e91d8a729e034d9d412c6b88e752604"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"96eb02bd0476fecc31d12d597e0206c081b1626b","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        mode \u003d \u0027rw\u0027"},{"line_number":253,"context_line":"        if \u0027data\u0027 in connection_info:"},{"line_number":254,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":255,"context_line":"        if do_volume_attach:"},{"line_number":256,"context_line":"            volume_api.attach(context, volume_id, instance[\u0027uuid\u0027],"},{"line_number":257,"context_line":"                              self[\u0027mount_device\u0027], mode\u003dmode)"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_fb1252fb","line":255,"updated":"2014-07-15 13:53:30.000000000","message":"Could we just eliminate this entirely by checking the volume object obtained from above? (if volume[\u0027attach_status\u0027] \u003d\u003d \"attached\" ... or similar).\n\nI hate to see us add a parameter like this where we can avoid it. Especially since we already have the do_check_attach method which is kind of similar anyways.","commit_id":"f104f40489909aa0e822df49592ed0143c17a1a1"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e1e85f886e3366809eac55b3c1720393d407a0f","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        mode \u003d \u0027rw\u0027"},{"line_number":253,"context_line":"        if \u0027data\u0027 in connection_info:"},{"line_number":254,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":255,"context_line":"        if do_volume_attach:"},{"line_number":256,"context_line":"            volume_api.attach(context, volume_id, instance[\u0027uuid\u0027],"},{"line_number":257,"context_line":"                              self[\u0027mount_device\u0027], mode\u003dmode)"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_aeab8c1c","line":255,"in_reply_to":"baada198_fb1252fb","updated":"2014-07-25 12:57:33.000000000","message":"good catch, thanks dan\nit\u0027s fixed now.","commit_id":"f104f40489909aa0e822df49592ed0143c17a1a1"}]}
