)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7761,"name":"Jun Jie Nan","email":"nanjunjie@gmail.com","username":"nanjj"},"change_message_id":"f0e3eaa05ffcca46c65e7ab45b26e371e4c278ec","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently, Instance#_check_active both checks whether the server is"},{"line_number":10,"context_line":"active and attaches the volume.  This commit separates that logic."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint stack-check"},{"line_number":13,"context_line":"Change-Id: I7fe805efc089535667e8d3840d79ade07430040c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F8%2FBg%3D","line":12,"updated":"2013-12-18 06:08:37.000000000","message":"\u003d\u003e \nImplements: blueprint stack-check\n\naccording https://wiki.openstack.org/wiki/Gerrit_Workflow","commit_id":"6d0c31b5c67cad503f64914923edd83507add5ac"}],"heat/engine/resources/instance.py":[{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"d07720cfd8e34c03bc57394aab3ddd5cf340608e","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                volume_attach_task.start()"},{"line_number":354,"context_line":"                return volume_attach_task.done()"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            short_server_status \u003d server.status.split(\u0027(\u0027)[0]"},{"line_number":357,"context_line":"            if short_server_status in nova_utils.deferred_server_statuses:"},{"line_number":358,"context_line":"                return False"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9DNs%3D","line":356,"updated":"2013-12-17 09:42:15.000000000","message":"Since this is to split check active and attach volume, can line 356 through 364 be moved to _check_active?","commit_id":"6d0c31b5c67cad503f64914923edd83507add5ac"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"76b07d36c9250e063c436d4088a48b4c5e35f679","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                volume_attach_task.start()"},{"line_number":354,"context_line":"                return volume_attach_task.done()"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            short_server_status \u003d server.status.split(\u0027(\u0027)[0]"},{"line_number":357,"context_line":"            if short_server_status in nova_utils.deferred_server_statuses:"},{"line_number":358,"context_line":"                return False"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9A3I%3D","line":356,"in_reply_to":"AAAATn%2F9BBo%3D","updated":"2013-12-17 17:40:37.000000000","message":"Whoops, I missed your modification to cloud_server.py.  Looks good!","commit_id":"6d0c31b5c67cad503f64914923edd83507add5ac"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"afaf448b6de135df271f2ba4096b30b88f5f0122","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                volume_attach_task.start()"},{"line_number":354,"context_line":"                return volume_attach_task.done()"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            short_server_status \u003d server.status.split(\u0027(\u0027)[0]"},{"line_number":357,"context_line":"            if short_server_status in nova_utils.deferred_server_statuses:"},{"line_number":358,"context_line":"                return False"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8%2B8M%3D","line":356,"in_reply_to":"AAAATn%2F9BU8%3D","updated":"2013-12-18 04:04:03.000000000","message":"A volume can be attached only if the server reaches active state. Those transient status aren\u0027t meant to be considered while attaching volumes. The original intention was to let the co-routine wait until the server comes up - 9eec986f82e76b899835a8e6a1fafaa4474a7ff4.\n\nLet\u0027s look at this from different angel. If there isn\u0027t a volume to attach, it will still need to wait for those transient status. An alternative way to split check_active and attach_volume can be like how server.Server handles update, where separate tasks are passed to check_update_complete and check_update_complete ensures that they are all executed in the right order. That  way check_active and attach_volume can be completely independent of each other.\n\nI don\u0027t feel strongly about this, and I will take out -1 if you like to stay with the current implementation because this is still a improvement nonetheless ;)","commit_id":"6d0c31b5c67cad503f64914923edd83507add5ac"},{"author":{"_account_id":7761,"name":"Jun Jie Nan","email":"nanjunjie@gmail.com","username":"nanjj"},"change_message_id":"f0e3eaa05ffcca46c65e7ab45b26e371e4c278ec","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                volume_attach_task.start()"},{"line_number":354,"context_line":"                return volume_attach_task.done()"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            short_server_status \u003d server.status.split(\u0027(\u0027)[0]"},{"line_number":357,"context_line":"            if short_server_status in nova_utils.deferred_server_statuses:"},{"line_number":358,"context_line":"                return False"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8%2Bvs%3D","line":356,"in_reply_to":"AAAATn%2F9BU8%3D","updated":"2013-12-18 06:08:37.000000000","message":"Agree with Liang to split check active and check attach volume, like below:\n\n    def check_create_complete(self, cookie):\n        server, volume_attach_task \u003d cookie\n        return self._check_active(server) and \\\n            self._check_volume_attached(volume_attach_task)\n\n    def _check_volume_attached(self, volume_attach_task):\n        if not volume_attach_task.started():\n            volume_attach_task.start()\n            return volume_attach_task.done()\n        else:\n            return volume_attach_task.step()\n\n    def _check_active(self, server):\n        if server.status !\u003d \u0027ACTIVE\u0027:\n            server.get()\n\n        status \u003d server.status\n        name \u003d server.name\n        if status \u003d\u003d \u0027ERROR\u0027:\n            fault \u003d getattr(server, \u0027fault\u0027, {})\n            message \u003d fault.get(\u0027message\u0027, \u0027Unknown\u0027)\n            code \u003d fault.get(\u0027code\u0027, 500)\n            exc \u003d exception.Error(_(\"Creation of server %(name)s \"\n                                    \"failed: %(message)s (%(code)s)\") %\n                                  dict(name\u003dname,\n                                       message\u003dmessage,\n                                       code\u003dcode))\n            raise exc\n\n        if status \u003d\u003d \u0027ACTIVE\u0027:\n            self._set_ipaddress(server.networks)\n            return True\n        else:\n            short_status \u003d server.status.split(\u0027(\u0027)[0]\n            if short_status in nova_utils.deferred_server_statuses:\n                return False\n\n        exc \u003d exception.Error(_(\"Creation of server %(name)s failed \"\n                                \"with unknown status: %(status)s\") %\n                              dict(name\u003dname,\n                                   status\u003dstatus))\n        raise exc","commit_id":"6d0c31b5c67cad503f64914923edd83507add5ac"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"3d80d40bbf07f535cc6f071ab0b6258bbc829e13","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                volume_attach_task.start()"},{"line_number":354,"context_line":"                return volume_attach_task.done()"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            short_server_status \u003d server.status.split(\u0027(\u0027)[0]"},{"line_number":357,"context_line":"            if short_server_status in nova_utils.deferred_server_statuses:"},{"line_number":358,"context_line":"                return False"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9BBo%3D","line":356,"in_reply_to":"AAAATn%2F9BU8%3D","updated":"2013-12-17 17:04:02.000000000","message":"This change would break cloud_server.py (inherits from Instance).\n\nhttps://github.com/openstack/heat/blob/master/contrib/rackspace/heat/engine/plugins/cloud_server.py#L380","commit_id":"6d0c31b5c67cad503f64914923edd83507add5ac"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d4cad2753be607a47d57e8fb52d556d9049afc33","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                volume_attach_task.start()"},{"line_number":354,"context_line":"                return volume_attach_task.done()"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            short_server_status \u003d server.status.split(\u0027(\u0027)[0]"},{"line_number":357,"context_line":"            if short_server_status in nova_utils.deferred_server_statuses:"},{"line_number":358,"context_line":"                return False"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9BU8%3D","line":356,"in_reply_to":"AAAATn%2F9DNs%3D","updated":"2013-12-17 16:09:07.000000000","message":"IMO, _check_active should be responsible to tell if the server is active or blowing up on an error, but otherwise just report True or False, the way it is doing right now.\n\nHowever, _check_volume_attached is the one who cares about the specific status of the instance, since it wants to attach the volume when the instance is ACTIVE, but should wait if it is in certain states (nova_utils.deferred_server_statuses). Then, if the instance reaches a state where it knows won\u0027t be possible to attach the volume, it errors out.\n\nThis seems to be the correct behavior, AFAICT.","commit_id":"6d0c31b5c67cad503f64914923edd83507add5ac"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"72483cf3b85a5440161561523cd23ee36a9dfcc7","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def _check_volume_attached(self, server, volume_attach_task):"},{"line_number":350,"context_line":"        if not volume_attach_task.started():"},{"line_number":351,"context_line":"            if self._check_active(server):"},{"line_number":352,"context_line":"                self._set_ipaddress(server.networks)"},{"line_number":353,"context_line":"                volume_attach_task.start()"},{"line_number":354,"context_line":"                return volume_attach_task.done()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F83UQ%3D","line":351,"updated":"2013-12-19 13:05:35.000000000","message":"If we\u0027re going to the effort to refactor this, I think the call to _check_active should happen in check_create_complete, as calling it indirectly via a function called _check_volume_attached looks a bit weird.","commit_id":"72def0eb7cce737618d3033ad62621bd1e850347"},{"author":{"_account_id":9062,"name":"Richard Lee","email":"rblee88@gmail.com","username":"arbylee"},"change_message_id":"ae99e95e45ccd750257592d58225551641ed191d","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def _check_volume_attached(self, server, volume_attach_task):"},{"line_number":350,"context_line":"        if not volume_attach_task.started():"},{"line_number":351,"context_line":"            if self._check_active(server):"},{"line_number":352,"context_line":"                self._set_ipaddress(server.networks)"},{"line_number":353,"context_line":"                volume_attach_task.start()"},{"line_number":354,"context_line":"                return volume_attach_task.done()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F82EU%3D","line":351,"in_reply_to":"AAAATn%2F83UQ%3D","updated":"2013-12-19 16:28:18.000000000","message":"Done","commit_id":"72def0eb7cce737618d3033ad62621bd1e850347"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"72483cf3b85a5440161561523cd23ee36a9dfcc7","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if server.status \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":363,"context_line":"            return True"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        short_server_status \u003d server.status.split(\u0027(\u0027)[0]"},{"line_number":366,"context_line":"        if short_server_status in nova_utils.deferred_server_statuses:"},{"line_number":367,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F83VE%3D","line":364,"updated":"2013-12-19 13:05:35.000000000","message":"Why have you removed the comment explaining why we need the split?","commit_id":"72def0eb7cce737618d3033ad62621bd1e850347"},{"author":{"_account_id":9062,"name":"Richard Lee","email":"rblee88@gmail.com","username":"arbylee"},"change_message_id":"ae99e95e45ccd750257592d58225551641ed191d","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if server.status \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":363,"context_line":"            return True"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        short_server_status \u003d server.status.split(\u0027(\u0027)[0]"},{"line_number":366,"context_line":"        if short_server_status in nova_utils.deferred_server_statuses:"},{"line_number":367,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F82EQ%3D","line":364,"in_reply_to":"AAAATn%2F83VE%3D","updated":"2013-12-19 16:28:18.000000000","message":"Bad rebase on my part.  Adding it back in","commit_id":"72def0eb7cce737618d3033ad62621bd1e850347"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"037f90842247187ddea19d6e65f60d24198929ab","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def _check_active(self, server):"},{"line_number":359,"context_line":"        if server.status !\u003d \u0027ACTIVE\u0027:"},{"line_number":360,"context_line":"            server.get()"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if server.status \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":363,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8mxw%3D","line":360,"updated":"2013-12-24 12:30:26.000000000","message":"Is it possible use here (without  \u003cif server.status !\u003d \u0027ACTIVE\u0027: \u003e) ?\n\nif server.status \u003d\u003d \u0027ACTIVE\u0027:\n\n    return True\n\nserver.get()\n\n# Some ....","commit_id":"90617ae8558dff7f5c04e844a28c19b3f37f70ee"}]}
