)]}'
{"shade/openstackcloud.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4a8efaf75c7eaa422726d11cd10c0faa50305db9","unresolved":false,"context_lines":[{"line_number":794,"context_line":"            template_file\u003dNone, template_url\u003dNone,"},{"line_number":795,"context_line":"            template_object\u003dNone, files\u003dNone,"},{"line_number":796,"context_line":"            rollback\u003dTrue,"},{"line_number":797,"context_line":"            wait\u003dFalse, timeout\u003d180,"},{"line_number":798,"context_line":"            environment_files\u003dNone,"},{"line_number":799,"context_line":"            **parameters):"},{"line_number":800,"context_line":"        envfiles, env \u003d template_utils.process_multiple_environments_and_files("}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_76917352","line":797,"updated":"2016-04-03 21:18:23.000000000","message":"The default timeout for heat stacks is 60 minutes, so this should probably be set to 3600","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"b0e3267d2ccbc56177686ecfd48e4be60e6ebfe6","unresolved":false,"context_lines":[{"line_number":811,"context_line":"            template\u003dtemplate,"},{"line_number":812,"context_line":"            files\u003ddict(list(tpl_files.items()) + list(envfiles.items())),"},{"line_number":813,"context_line":"            environment\u003denv,"},{"line_number":814,"context_line":"            timeout_mins\u003dtimeout,"},{"line_number":815,"context_line":"        )"},{"line_number":816,"context_line":"        with _utils.shade_exceptions(\"Error creating stack {name}\".format("},{"line_number":817,"context_line":"                name\u003dname)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_3498b777","line":814,"updated":"2016-04-01 17:53:45.000000000","message":"Is timeout_mins a value in minutes? All of our other API timeouts are in seconds, so the default timeout here is assumed to be 180 seconds, so some conversion is necessary here. Otherwise this suddenly becomes 3 hours.","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"3cc28c992bbb062107867946cacda18c527a138b","unresolved":false,"context_lines":[{"line_number":811,"context_line":"            template\u003dtemplate,"},{"line_number":812,"context_line":"            files\u003ddict(list(tpl_files.items()) + list(envfiles.items())),"},{"line_number":813,"context_line":"            environment\u003denv,"},{"line_number":814,"context_line":"            timeout_mins\u003dtimeout,"},{"line_number":815,"context_line":"        )"},{"line_number":816,"context_line":"        with _utils.shade_exceptions(\"Error creating stack {name}\".format("},{"line_number":817,"context_line":"                name\u003dname)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_5043a26c","line":814,"in_reply_to":"ba0121b8_3498b777","updated":"2016-04-02 15:07:51.000000000","message":"I agree with Shrews - timeout parameters in shade are in seconds, so probably should be a conversion here\n\nevent_utils.poll_for_events is going to bypass the TaskManager which means it\u0027s going to bypass rate limiting. Looking at the code for poll_for_events, it can potentially make many API calls (especially with _get_nested_events)\n\nAlso, we\u0027re going to be replacing use of *client for REST calls with direct requests calls in the not-too-distant future. So it\u0027s probably a better idea (even though I dislike the idea of duplicating code) to teach shade how to poll for heat events.\n\nOR - I wonder if we can make a thing which we pass in to event_utils which does the calls it needs (hc.resources.list, hc.events.list, and hc.stacks.get) but does them as TaskManager managed shade calls. It\u0027s a bit hacky, but shouldn\u0027t be too hard to do - and then if that works out, perhaps we can sit down and discuss what an generic interface might look like for such a thing.","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4a8efaf75c7eaa422726d11cd10c0faa50305db9","unresolved":false,"context_lines":[{"line_number":811,"context_line":"            template\u003dtemplate,"},{"line_number":812,"context_line":"            files\u003ddict(list(tpl_files.items()) + list(envfiles.items())),"},{"line_number":813,"context_line":"            environment\u003denv,"},{"line_number":814,"context_line":"            timeout_mins\u003dtimeout,"},{"line_number":815,"context_line":"        )"},{"line_number":816,"context_line":"        with _utils.shade_exceptions(\"Error creating stack {name}\".format("},{"line_number":817,"context_line":"                name\u003dname)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_d69e7f62","line":814,"in_reply_to":"ba0121b8_3498b777","updated":"2016-04-03 21:18:23.000000000","message":"OK, but see my comment above, I think the default timeout should be 3600","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4a8efaf75c7eaa422726d11cd10c0faa50305db9","unresolved":false,"context_lines":[{"line_number":811,"context_line":"            template\u003dtemplate,"},{"line_number":812,"context_line":"            files\u003ddict(list(tpl_files.items()) + list(envfiles.items())),"},{"line_number":813,"context_line":"            environment\u003denv,"},{"line_number":814,"context_line":"            timeout_mins\u003dtimeout,"},{"line_number":815,"context_line":"        )"},{"line_number":816,"context_line":"        with _utils.shade_exceptions(\"Error creating stack {name}\".format("},{"line_number":817,"context_line":"                name\u003dname)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_b69b0b72","line":814,"in_reply_to":"ba0121b8_5043a26c","updated":"2016-04-03 21:18:23.000000000","message":"hmm, we should be able to refactor event_utils functions to allow pluggable request calls.","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"}],"shade/tests/functional/test_stack.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"b0e3267d2ccbc56177686ecfd48e4be60e6ebfe6","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def setUp(self):"},{"line_number":77,"context_line":"        super(TestStack, self).setUp()"},{"line_number":78,"context_line":"        self.cloud \u003d openstack_cloud(cloud\u003d\u0027devstack\u0027)"},{"line_number":79,"context_line":"        if not self.cloud.has_service(\u0027orchestration\u0027):"},{"line_number":80,"context_line":"            self.skipTest(\u0027Orchestration service not supported by cloud\u0027)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_d45b3b84","line":78,"updated":"2016-04-01 17:53:45.000000000","message":"You probably missed the recent change, but functional tests share an existing cloud now (either self.demo_cloud or self.operator_cloud) since that was moved to the base class. Choose one of those instead of creating your own.","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4a8efaf75c7eaa422726d11cd10c0faa50305db9","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def setUp(self):"},{"line_number":77,"context_line":"        super(TestStack, self).setUp()"},{"line_number":78,"context_line":"        self.cloud \u003d openstack_cloud(cloud\u003d\u0027devstack\u0027)"},{"line_number":79,"context_line":"        if not self.cloud.has_service(\u0027orchestration\u0027):"},{"line_number":80,"context_line":"            self.skipTest(\u0027Orchestration service not supported by cloud\u0027)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_76c6934a","line":78,"in_reply_to":"ba0121b8_d45b3b84","updated":"2016-04-03 21:18:23.000000000","message":"Done","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"b0e3267d2ccbc56177686ecfd48e4be60e6ebfe6","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            stack_ids \u003d [s[\u0027id\u0027] for s in stacks]"},{"line_number":105,"context_line":"            self.assertIn(stack[\u0027id\u0027], stack_ids)"},{"line_number":106,"context_line":"        finally:"},{"line_number":107,"context_line":"            self.cloud.delete_stack(stack_name)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def test_stack_nested(self):"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_ef078c15","line":107,"updated":"2016-04-01 17:53:45.000000000","message":"This delete would cause yet another exception if it were create_stack() that failed. I\u0027m not entirely certain if this try block would actually hide the real failing exception, but there is a more standard way to handle this.\n\nOur chosen way of handling this is to define cleanup methods that will go through and delete any resources you\u0027ve created. E.g., the _cleanup_domains() method in test_domains.py. Also briefly mentioned in our coding guidelines docs:\n\nhttp://docs.openstack.org/infra/shade/coding.html#tests","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4a8efaf75c7eaa422726d11cd10c0faa50305db9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            stack_ids \u003d [s[\u0027id\u0027] for s in stacks]"},{"line_number":105,"context_line":"            self.assertIn(stack[\u0027id\u0027], stack_ids)"},{"line_number":106,"context_line":"        finally:"},{"line_number":107,"context_line":"            self.cloud.delete_stack(stack_name)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def test_stack_nested(self):"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_161117b0","line":107,"in_reply_to":"ba0121b8_ef078c15","updated":"2016-04-03 21:18:23.000000000","message":"Done, and I haven\u0027t wrapped the cleanup delete in a try, since there will only ever be one thing to clean up and the cleanup method gives indirect testing coverage of delete_stack","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"b0e3267d2ccbc56177686ecfd48e4be60e6ebfe6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                self.assertEqual(10, len(rand))"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        finally:"},{"line_number":139,"context_line":"            self.cloud.delete_stack(stack_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_2f16a44b","line":139,"updated":"2016-04-01 17:53:45.000000000","message":"Same comment about using cleanup methods.","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4a8efaf75c7eaa422726d11cd10c0faa50305db9","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                self.assertEqual(10, len(rand))"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        finally:"},{"line_number":139,"context_line":"            self.cloud.delete_stack(stack_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_f615839b","line":139,"in_reply_to":"ba0121b8_2f16a44b","updated":"2016-04-03 21:18:23.000000000","message":"Done","commit_id":"3c408090aa51715cf88434ad00654505cd781e52"}]}
