)]}'
{"karbor/services/protection/protection_plugins/server/nova_protection_plugin.py":[{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"15a9372ad92a728caa52ae998810c956e818cfe6","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                original_server_id).get_object(\"metadata\")"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            nova_client \u003d ClientFactory.create_client(\"nova\", context)"},{"line_number":197,"context_line":"            heat_template \u003d kwargs.get(\"heat_template\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"            # restore server instance"},{"line_number":200,"context_line":"            new_server_id \u003d self._heat_restore_server_instance("}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_9c8d9333","line":197,"range":{"start_line":197,"start_character":12,"end_line":197,"end_character":25},"updated":"2017-06-07 09:11:19.000000000","message":"Now the heat_template object only used for saving the mapping about the original_resource_id and new restored resourced id. So this object name and definition both need be updated.","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"d6ed8692fe8bdf5a5edab219ce0140f10b54c9ff","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                original_server_id).get_object(\"metadata\")"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            nova_client \u003d ClientFactory.create_client(\"nova\", context)"},{"line_number":197,"context_line":"            heat_template \u003d kwargs.get(\"heat_template\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"            # restore server instance"},{"line_number":200,"context_line":"            new_server_id \u003d self._heat_restore_server_instance("}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_75663bf0","line":197,"range":{"start_line":197,"start_character":12,"end_line":197,"end_character":25},"in_reply_to":"df140735_9c8d9333","updated":"2017-06-12 12:40:44.000000000","message":"it is done in subsequent patches. see https://review.openstack.org/#/c/466475","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"15a9372ad92a728caa52ae998810c956e818cfe6","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            heat_template \u003d kwargs.get(\"heat_template\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"            # restore server instance"},{"line_number":200,"context_line":"            new_server_id \u003d self._heat_restore_server_instance("},{"line_number":201,"context_line":"                nova_client, heat_template, original_server_id,"},{"line_number":202,"context_line":"                parameters.get(\"restore_name\", \"karbor-restore-server\"),"},{"line_number":203,"context_line":"                resource_definition)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_9cbfd3cf","line":200,"range":{"start_line":200,"start_character":34,"end_line":200,"end_character":38},"updated":"2017-06-07 09:11:19.000000000","message":"The \u0027heat\u0027 string in method could be deleted.","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"d6ed8692fe8bdf5a5edab219ce0140f10b54c9ff","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            heat_template \u003d kwargs.get(\"heat_template\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"            # restore server instance"},{"line_number":200,"context_line":"            new_server_id \u003d self._heat_restore_server_instance("},{"line_number":201,"context_line":"                nova_client, heat_template, original_server_id,"},{"line_number":202,"context_line":"                parameters.get(\"restore_name\", \"karbor-restore-server\"),"},{"line_number":203,"context_line":"                resource_definition)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_d5a4ef0a","line":200,"range":{"start_line":200,"start_character":34,"end_line":200,"end_character":38},"in_reply_to":"df140735_9cbfd3cf","updated":"2017-06-12 12:40:44.000000000","message":"Done","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"15a9372ad92a728caa52ae998810c956e818cfe6","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            self._wait_server_to_active(nova_client, new_server_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            # restore volume attachment"},{"line_number":212,"context_line":"            self._heat_restore_volume_attachment("},{"line_number":213,"context_line":"                nova_client, ClientFactory.create_client(\"cinder\", context),"},{"line_number":214,"context_line":"                heat_template, new_server_id, resource_definition)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_1c79832e","line":212,"range":{"start_line":212,"start_character":18,"end_line":212,"end_character":22},"updated":"2017-06-07 09:11:19.000000000","message":"ditto","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"d6ed8692fe8bdf5a5edab219ce0140f10b54c9ff","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            self._wait_server_to_active(nova_client, new_server_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            # restore volume attachment"},{"line_number":212,"context_line":"            self._heat_restore_volume_attachment("},{"line_number":213,"context_line":"                nova_client, ClientFactory.create_client(\"cinder\", context),"},{"line_number":214,"context_line":"                heat_template, new_server_id, resource_definition)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_b5a973e0","line":212,"range":{"start_line":212,"start_character":18,"end_line":212,"end_character":22},"in_reply_to":"df140735_1c79832e","updated":"2017-06-12 12:40:44.000000000","message":"Done","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"15a9372ad92a728caa52ae998810c956e818cfe6","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                      \u0027%(reason)s\u0027,"},{"line_number":295,"context_line":"                      {\u0027server_id\u0027: original_id,"},{"line_number":296,"context_line":"                       \u0027reason\u0027: ex})"},{"line_number":297,"context_line":"            raise"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        return server.id"},{"line_number":300,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_536fe991","line":297,"range":{"start_line":297,"start_character":12,"end_line":297,"end_character":17},"updated":"2017-06-07 09:11:19.000000000","message":"It is better to raise a exception about RestoreResourceFailed.","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"87ed752e960b935bdff97d077d7a9d0e6f7954a5","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                      \u0027%(reason)s\u0027,"},{"line_number":295,"context_line":"                      {\u0027server_id\u0027: original_id,"},{"line_number":296,"context_line":"                       \u0027reason\u0027: ex})"},{"line_number":297,"context_line":"            raise"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        return server.id"},{"line_number":300,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_a54b3629","line":297,"range":{"start_line":297,"start_character":12,"end_line":297,"end_character":17},"in_reply_to":"df140735_536fe991","updated":"2017-06-14 09:36:23.000000000","message":"That exception will be raised on line 232","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"e507fda54dbba54675e61d089ed8b1423e2b7b72","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            failure_statuses\u003d{\u0027ERROR\u0027, },"},{"line_number":349,"context_line":"            ignore_statuses\u003d{\u0027available\u0027, \u0027attaching\u0027}"},{"line_number":350,"context_line":"        )"},{"line_number":351,"context_line":"        if not is_success:"},{"line_number":352,"context_line":"            raise Exception"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def _wait_server_to_active(self, nova_client, server_id):"},{"line_number":355,"context_line":"        def _get_server_status():"}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_5043bb13","line":352,"range":{"start_line":351,"start_character":0,"end_line":352,"end_character":27},"updated":"2017-06-04 07:44:31.000000000","message":"ditto","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"e507fda54dbba54675e61d089ed8b1423e2b7b72","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        def _get_server_status():"},{"line_number":356,"context_line":"            try:"},{"line_number":357,"context_line":"                server \u003d self._fetch_server(nova_client, server_id)"},{"line_number":358,"context_line":"                return server.status.split(\u0027(\u0027)[0] if server else \u0027BUILD\u0027"},{"line_number":359,"context_line":"            except Exception as ex:"},{"line_number":360,"context_line":"                LOG.error(\u0027Fetch server(%(server_id)s) failed, \u0027"},{"line_number":361,"context_line":"                          \u0027reason: %(reason)s\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_50ce1bb4","line":358,"range":{"start_line":358,"start_character":0,"end_line":358,"end_character":73},"updated":"2017-06-04 07:44:31.000000000","message":"1. If server \u003d\u003d None then it is in \u0027BUILD\u0027 state? Don\u0027t think so\n2. Why split by \u0027(\u0027?","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"87ed752e960b935bdff97d077d7a9d0e6f7954a5","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        def _get_server_status():"},{"line_number":356,"context_line":"            try:"},{"line_number":357,"context_line":"                server \u003d self._fetch_server(nova_client, server_id)"},{"line_number":358,"context_line":"                return server.status.split(\u0027(\u0027)[0] if server else \u0027BUILD\u0027"},{"line_number":359,"context_line":"            except Exception as ex:"},{"line_number":360,"context_line":"                LOG.error(\u0027Fetch server(%(server_id)s) failed, \u0027"},{"line_number":361,"context_line":"                          \u0027reason: %(reason)s\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_f787a560","line":358,"range":{"start_line":358,"start_character":0,"end_line":358,"end_character":73},"in_reply_to":"df140735_50ce1bb4","updated":"2017-06-14 09:36:23.000000000","message":"1. I set the status to \u0027BUILD\u0027 when \u0027server\u0027 is None in order to recheck it again later.\n2. see https://github.com/openstack/heat/blob/master/heat/engine/clients/os/nova.py#L195-L202","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"e507fda54dbba54675e61d089ed8b1423e2b7b72","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            interval\u003dself._interval,"},{"line_number":369,"context_line":"            success_statuses\u003d{\u0027ACTIVE\u0027, },"},{"line_number":370,"context_line":"            failure_statuses\u003d{\u0027ERROR\u0027, },"},{"line_number":371,"context_line":"            ignore_statuses\u003d{\u0027BUILD\u0027, \u0027HARD_REBOOT\u0027, \u0027PASSWORD\u0027, \u0027REBOOT\u0027,"},{"line_number":372,"context_line":"                             \u0027RESCUE\u0027, \u0027RESIZE\u0027, \u0027REVERT_RESIZE\u0027, \u0027SHUTOFF\u0027,"},{"line_number":373,"context_line":"                             \u0027SUSPENDED\u0027, \u0027VERIFY_RESIZE\u0027},"},{"line_number":374,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_f0bc0f07","line":371,"range":{"start_line":371,"start_character":30,"end_line":371,"end_character":35},"updated":"2017-06-04 07:44:31.000000000","message":"\u0027BUILDING\u0027 according to nova api-ref","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"563a72e4eb92ea06c6502bd6a9ed9cbd5cbd4090","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            interval\u003dself._interval,"},{"line_number":369,"context_line":"            success_statuses\u003d{\u0027ACTIVE\u0027, },"},{"line_number":370,"context_line":"            failure_statuses\u003d{\u0027ERROR\u0027, },"},{"line_number":371,"context_line":"            ignore_statuses\u003d{\u0027BUILD\u0027, \u0027HARD_REBOOT\u0027, \u0027PASSWORD\u0027, \u0027REBOOT\u0027,"},{"line_number":372,"context_line":"                             \u0027RESCUE\u0027, \u0027RESIZE\u0027, \u0027REVERT_RESIZE\u0027, \u0027SHUTOFF\u0027,"},{"line_number":373,"context_line":"                             \u0027SUSPENDED\u0027, \u0027VERIFY_RESIZE\u0027},"},{"line_number":374,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f1d235d_f21d6f73","line":371,"range":{"start_line":371,"start_character":30,"end_line":371,"end_character":35},"in_reply_to":"df140735_f0bc0f07","updated":"2017-07-04 07:27:42.000000000","message":"BUILD: The server has not yet finished the original build process.\nsee https://github.com/openstack/nova/blob/master/api-guide/source/server_concepts.rst","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"b02710f635c711f8750af026c50cf43dbc60f8ce","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            interval\u003dself._interval,"},{"line_number":369,"context_line":"            success_statuses\u003d{\u0027ACTIVE\u0027, },"},{"line_number":370,"context_line":"            failure_statuses\u003d{\u0027ERROR\u0027, },"},{"line_number":371,"context_line":"            ignore_statuses\u003d{\u0027BUILD\u0027, \u0027HARD_REBOOT\u0027, \u0027PASSWORD\u0027, \u0027REBOOT\u0027,"},{"line_number":372,"context_line":"                             \u0027RESCUE\u0027, \u0027RESIZE\u0027, \u0027REVERT_RESIZE\u0027, \u0027SHUTOFF\u0027,"},{"line_number":373,"context_line":"                             \u0027SUSPENDED\u0027, \u0027VERIFY_RESIZE\u0027},"},{"line_number":374,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_5ac6804a","line":371,"range":{"start_line":371,"start_character":30,"end_line":371,"end_character":35},"in_reply_to":"df140735_f0bc0f07","updated":"2017-06-14 09:42:02.000000000","message":"Maybe the \u0027BUILD\u0027 is the middle status before the server becomes active. I will check it.","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"e507fda54dbba54675e61d089ed8b1423e2b7b72","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                             \u0027RESCUE\u0027, \u0027RESIZE\u0027, \u0027REVERT_RESIZE\u0027, \u0027SHUTOFF\u0027,"},{"line_number":373,"context_line":"                             \u0027SUSPENDED\u0027, \u0027VERIFY_RESIZE\u0027},"},{"line_number":374,"context_line":"        )"},{"line_number":375,"context_line":"        if not is_success:"},{"line_number":376,"context_line":"            raise Exception"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _fetch_server(self, nova_client, server_id):"},{"line_number":379,"context_line":"        server \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_d0b90b15","line":376,"range":{"start_line":375,"start_character":0,"end_line":376,"end_character":27},"updated":"2017-06-04 07:44:31.000000000","message":"why Exception? which exception? Is it necessary, why not just return True/False?","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"87ed752e960b935bdff97d077d7a9d0e6f7954a5","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                             \u0027RESCUE\u0027, \u0027RESIZE\u0027, \u0027REVERT_RESIZE\u0027, \u0027SHUTOFF\u0027,"},{"line_number":373,"context_line":"                             \u0027SUSPENDED\u0027, \u0027VERIFY_RESIZE\u0027},"},{"line_number":374,"context_line":"        )"},{"line_number":375,"context_line":"        if not is_success:"},{"line_number":376,"context_line":"            raise Exception"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _fetch_server(self, nova_client, server_id):"},{"line_number":379,"context_line":"        server \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_859efa51","line":376,"range":{"start_line":375,"start_character":0,"end_line":376,"end_character":27},"in_reply_to":"df140735_d0b90b15","updated":"2017-06-14 09:36:23.000000000","message":"you can see this function is invoked in method of \u0027on_complete\u0027. It raise an exception to stop running \u0027on_complete\u0027.","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"e507fda54dbba54675e61d089ed8b1423e2b7b72","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        try:"},{"line_number":381,"context_line":"            server \u003d nova_client.servers.get(server_id)"},{"line_number":382,"context_line":"        except exceptions.OverLimit as exc:"},{"line_number":383,"context_line":"            LOG.warning(\"Received an OverLimit response when \""},{"line_number":384,"context_line":"                        \"fetching server (%(id)s) : %(exception)s\","},{"line_number":385,"context_line":"                        {\u0027id\u0027: server_id,"},{"line_number":386,"context_line":"                         \u0027exception\u0027: exc})"},{"line_number":387,"context_line":"        except exceptions.ClientException as exc:"},{"line_number":388,"context_line":"            if ((getattr(exc, \u0027http_status\u0027, getattr(exc, \u0027code\u0027, None)) in"},{"line_number":389,"context_line":"                 (500, 503))):"},{"line_number":390,"context_line":"                LOG.warning(\"Received the following exception when \""},{"line_number":391,"context_line":"                            \"fetching server (%(id)s) : %(exception)s\","},{"line_number":392,"context_line":"                            {\u0027id\u0027: server_id,"},{"line_number":393,"context_line":"                             \u0027exception\u0027: exc})"},{"line_number":394,"context_line":"            else:"},{"line_number":395,"context_line":"                raise"},{"line_number":396,"context_line":"        return server"}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_90d8337b","line":393,"range":{"start_line":383,"start_character":0,"end_line":393,"end_character":47},"updated":"2017-06-04 07:44:31.000000000","message":"in these 2 cases, _fetch_server returns None, which _get_server_status might try to parse","commit_id":"e88b772f7a5ea369aba91bf525c4bdc14f281667"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"32051b56490eb00485b61c0863705b58ea4f820a","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                      \"%(server_id)s): %(reason)s.\","},{"line_number":269,"context_line":"                      {\u0027server_id\u0027: original_id,"},{"line_number":270,"context_line":"                       \u0027reason\u0027: reason})"},{"line_number":271,"context_line":"            raise Exception"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        # server key_name, security_groups, networks"},{"line_number":274,"context_line":"        properties[\"key_name\"] \u003d server_metadata.get(\"key_name\", None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_1e1d94bc","line":271,"range":{"start_line":271,"start_character":0,"end_line":271,"end_character":27},"updated":"2017-07-04 09:26:12.000000000","message":"a specific exception with a message?","commit_id":"d8840ffa79b57e19ce583d8ed9e0184055e5b35b"}]}
