)]}'
{"heat/engine/notification/__init__.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def audit(context, event_type, payload):"},{"line_number":27,"context_line":"    notifier \u003d rpc_init.get_notifier(SERVICE, cfg.CONF.host)"},{"line_number":28,"context_line":"    notifier.audit(context, event_type, payload)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FUWw%3D","line":27,"updated":"2014-03-07 01:14:11.000000000","message":"Surely we only want one notifier, rather than re-reading the config every single time?\n\nAlso, this code seem gratuitously repetitive.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def audit(context, event_type, payload):"},{"line_number":27,"context_line":"    notifier \u003d rpc_init.get_notifier(SERVICE, cfg.CONF.host)"},{"line_number":28,"context_line":"    notifier.audit(context, event_type, payload)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRwM%3D","line":27,"in_reply_to":"AAAAVn%2F%2FUWw%3D","updated":"2014-03-07 04:55:51.000000000","message":"agree I dont like this much.  I\u0027m not sure on how to exactly only call rpc_init.get_notifier once without adding a notifier_init call.  I guess I could do that but it seems clunky to have two init calls per daemon and in heat.tests.common.py","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    notifier.info(context, event_type, payload)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def warn(context, event_type, payload):"},{"line_number":42,"context_line":"    notifier \u003d rpc_init.get_notifier(SERVICE, cfg.CONF.host)"},{"line_number":43,"context_line":"    notifier.warn(context, event_type, payload)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FUWk%3D","line":41,"updated":"2014-03-07 01:14:11.000000000","message":"I don\u0027t get why we\u0027re changing the API and switching to a new backend at the same time.\n\nWhy not replace notify with a level argument with separate functions for audit/debug/info/warn in an independent patch. Then switch the implementation later.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    notifier.info(context, event_type, payload)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def warn(context, event_type, payload):"},{"line_number":42,"context_line":"    notifier \u003d rpc_init.get_notifier(SERVICE, cfg.CONF.host)"},{"line_number":43,"context_line":"    notifier.warn(context, event_type, payload)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRvo%3D","line":41,"in_reply_to":"AAAAVn%2F%2FUWk%3D","updated":"2014-03-07 04:55:51.000000000","message":"agree about changing api at same time as backend.  One of the motives for these separate api calls was to more closely match oslo.messaging.  In retrospect, this model could probably be reverted and put in a different patch.\n\nLong term, I\u0027d like to see notifier/stack,autoscaling use these api calls directly from within the engine and resources, rather then the globals that are in place now to more closely match oslo.messaging.  This probably needs to be done as separate steps and isn\u0027t strictly part of oslo.incubator.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/engine/notification/autoscaling.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    body[\u0027message\u0027] \u003d message"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    if suffix \u003d\u003d \u0027error\u0027:"},{"line_number":42,"context_line":"        notification.error(stack.context, event_type, body)"},{"line_number":43,"context_line":"    else:"},{"line_number":44,"context_line":"        notification.info(stack.context, event_type, body)"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FUV0%3D","line":42,"updated":"2014-03-07 01:14:11.000000000","message":"None of the changes in this file seem related to the topic of the patch.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    body[\u0027message\u0027] \u003d message"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    if suffix \u003d\u003d \u0027error\u0027:"},{"line_number":42,"context_line":"        notification.error(stack.context, event_type, body)"},{"line_number":43,"context_line":"    else:"},{"line_number":44,"context_line":"        notification.info(stack.context, event_type, body)"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRvc%3D","line":42,"in_reply_to":"AAAAVn%2F%2FUV0%3D","updated":"2014-03-07 04:55:51.000000000","message":"agree - the work was done before I was fully aware of the scope of oslo.notifier api changes.  I\u0027ll work this out as a separate issue.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/engine/notification/stack.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    payload \u003d engine_api.format_notification_body(stack)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    if stack.status \u003d\u003d stack.IN_PROGRESS:"},{"line_number":33,"context_line":"        notification.info(stack.context,"},{"line_number":34,"context_line":"                          get_event_type(stack, \u0027start\u0027),"},{"line_number":35,"context_line":"                          payload)"},{"line_number":36,"context_line":"    if stack.status \u003d\u003d stack.COMPLETE:"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FUVk%3D","line":33,"updated":"2014-03-07 01:14:11.000000000","message":"None of the changes in this file seem related to the topic of the patch.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    payload \u003d engine_api.format_notification_body(stack)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    if stack.status \u003d\u003d stack.IN_PROGRESS:"},{"line_number":33,"context_line":"        notification.info(stack.context,"},{"line_number":34,"context_line":"                          get_event_type(stack, \u0027start\u0027),"},{"line_number":35,"context_line":"                          payload)"},{"line_number":36,"context_line":"    if stack.status \u003d\u003d stack.COMPLETE:"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRw4%3D","line":33,"in_reply_to":"AAAAVn%2F%2FUVk%3D","updated":"2014-03-07 04:55:51.000000000","message":"the notifier api in oslo.messaging doesn\u0027t take a level as a parameter, but instead provides separate api calls for warn/notice/info/etc.    I didn\u0027t design oslo.messaging notifier api, just trying to be consistent in adopting it.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/engine/service.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        target \u003d messaging.Target(version\u003d\"1.1\")"},{"line_number":245,"context_line":"        self._client \u003d rpc_init.get_client(target)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    @messaging.rpc.server.expected_exceptions(exception.StackNotFound)"},{"line_number":248,"context_line":"    def identify_stack(self, cnxt, stack_name):"},{"line_number":249,"context_line":"        \"\"\""},{"line_number":250,"context_line":"        The identify_stack method returns the full stack identifier for a"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fnvo%3D","line":247,"updated":"2014-03-05 01:19:15.000000000","message":"I think now is as good a time as any to fix bug https://bugs.launchpad.net/bugs/1287445 (in this change or a separate one, its up to you.\n\nThe above decorator is also needed on any other service method which might raise StackNotFound.\n\nSearch for StackNotFound in http://logs.openstack.org/98/72798/50/check/check-tempest-dsvm-full/29ebce1/logs/screen-h-eng.txt.gz to see why this fix is needed.\n\nI\u0027ll comment below on the methods which I think need decorating (basically anything which calls _get_stack)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            raise exception.StackNotFound(stack_name\u003didentity.stack_name)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        return s"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def show_stack(self, cnxt, stack_identity):"},{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        Return detailed information about one or all stacks."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fnuk%3D","line":284,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                                              _stack_create, stack)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        return dict(stack.identifier())"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def update_stack(self, cnxt, stack_identity, template, params,"},{"line_number":457,"context_line":"                     files, args):"},{"line_number":458,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FnuI%3D","line":455,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        current cloud backend."},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        return clients.Clients(cnxt).authenticated()"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    def get_template(self, cnxt, stack_identity):"},{"line_number":581,"context_line":"        \"\"\""},{"line_number":582,"context_line":"        Get the template."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FnuE%3D","line":579,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        if s:"},{"line_number":589,"context_line":"            return s.raw_template.template"},{"line_number":590,"context_line":"        return None"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def delete_stack(self, cnxt, stack_identity):"},{"line_number":593,"context_line":"        \"\"\""},{"line_number":594,"context_line":"        The delete_stack method deletes a given stack."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fnto%3D","line":591,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        self.thread_group_mgr.start_with_lock(cnxt, stack, self.engine_id,"},{"line_number":654,"context_line":"                                              stack.delete)"},{"line_number":655,"context_line":"        return None"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"    def abandon_stack(self, cnxt, stack_identity):"},{"line_number":658,"context_line":"        \"\"\""},{"line_number":659,"context_line":"        The abandon_stack method abandons a given stack."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fntg%3D","line":656,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":721,"context_line":"                resource.get_class(type_name).resource_to_template(type_name)"},{"line_number":722,"context_line":"        except exception.StackValidationFailed:"},{"line_number":723,"context_line":"            raise exception.ResourceTypeNotFound(type_name\u003dtype_name)"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    def list_events(self, cnxt, stack_identity):"},{"line_number":726,"context_line":"        \"\"\""},{"line_number":727,"context_line":"        The list_events method lists all events associated with a given stack."}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fntc%3D","line":724,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":767,"context_line":""},{"line_number":768,"context_line":"        access_key \u003d ec2_creds.get(\u0027access\u0027)"},{"line_number":769,"context_line":"        return stack.access_allowed(access_key, resource_name)"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def describe_stack_resource(self, cnxt, stack_identity, resource_name):"},{"line_number":772,"context_line":"        s \u003d self._get_stack(cnxt, stack_identity)"},{"line_number":773,"context_line":"        stack \u003d parser.Stack.load(cnxt, stack\u003ds)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FntY%3D","line":770,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":787,"context_line":"            raise exception.ResourceNotAvailable(resource_name\u003dresource_name)"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        return api.format_stack_resource(stack[resource_name])"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def resource_signal(self, cnxt, stack_identity, resource_name, details):"},{"line_number":792,"context_line":"        s \u003d self._get_stack(cnxt, stack_identity)"},{"line_number":793,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FntU%3D","line":790,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":827,"context_line":"        resource \u003d stack[rs.name]"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"        return dict(resource.identifier())"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"    def describe_stack_resources(self, cnxt, stack_identity, resource_name):"},{"line_number":832,"context_line":"        s \u003d self._get_stack(cnxt, stack_identity)"},{"line_number":833,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FntQ%3D","line":830,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":836,"context_line":"        return [api.format_stack_resource(resource)"},{"line_number":837,"context_line":"                for name, resource in stack.iteritems()"},{"line_number":838,"context_line":"                if resource_name is None or name \u003d\u003d resource_name]"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"    def list_stack_resources(self, cnxt, stack_identity):"},{"line_number":841,"context_line":"        s \u003d self._get_stack(cnxt, stack_identity)"},{"line_number":842,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FntM%3D","line":839,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":844,"context_line":""},{"line_number":845,"context_line":"        return [api.format_stack_resource(resource, detail\u003dFalse)"},{"line_number":846,"context_line":"                for resource in stack.values()]"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    def stack_suspend(self, cnxt, stack_identity):"},{"line_number":849,"context_line":"        \u0027\u0027\u0027"},{"line_number":850,"context_line":"        Handle request to perform suspend action on a stack"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FntE%3D","line":847,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":858,"context_line":"        stack \u003d parser.Stack.load(cnxt, stack\u003ds)"},{"line_number":859,"context_line":"        self.thread_group_mgr.start_with_lock(cnxt, stack, self.engine_id,"},{"line_number":860,"context_line":"                                              _stack_suspend, stack)"},{"line_number":861,"context_line":""},{"line_number":862,"context_line":"    def stack_resume(self, cnxt, stack_identity):"},{"line_number":863,"context_line":"        \u0027\u0027\u0027"},{"line_number":864,"context_line":"        Handle request to perform a resume action on a stack"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FntA%3D","line":861,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":881,"context_line":"        # on how deferred_auth_method is configured in the conf file"},{"line_number":882,"context_line":"        hkc.KeystoneClient(stored_context)"},{"line_number":883,"context_line":"        return stored_context"},{"line_number":884,"context_line":""},{"line_number":885,"context_line":"    def metadata_update(self, cnxt, stack_identity,"},{"line_number":886,"context_line":"                        resource_name, metadata):"},{"line_number":887,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fns4%3D","line":884,"updated":"2014-03-05 01:19:15.000000000","message":"@messaging.rpc.server.expected_exceptions(exception.StackNotFound)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"        result[rpc_api.WATCH_STATE_VALUE] \u003d state"},{"line_number":1074,"context_line":"        return result"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":"    @rpc_common.client_exceptions(exception.NotFound)"},{"line_number":1077,"context_line":"    @request_context"},{"line_number":1078,"context_line":"    def show_software_config(self, cnxt, config_id):"},{"line_number":1079,"context_line":"        sc \u003d db_api.software_config_get(cnxt, config_id)"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FTZQ%3D","side":"PARENT","line":1076,"updated":"2014-03-07 01:14:11.000000000","message":"IIUC these client_exceptions wrappers are already not required, and so they should be deleted in a separate patch.","commit_id":"bed132f9344b203d8872da4a78664019e8e5a6e7"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":"from oslo import messaging"},{"line_number":19,"context_line":"from heat.common import exception as exception"},{"line_number":20,"context_line":"from heat.rpc import api as engine_api"},{"line_number":21,"context_line":"from heat.rpc import rpc_init"},{"line_number":22,"context_line":"import webob"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FTfE%3D","line":20,"updated":"2014-03-07 01:14:11.000000000","message":"This is confusing, IMO, because there is a heat.engine.api module that is called engine_api just about everywhere it is imported. rpc_api was a better name for it.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":"from oslo import messaging"},{"line_number":19,"context_line":"from heat.common import exception as exception"},{"line_number":20,"context_line":"from heat.rpc import api as engine_api"},{"line_number":21,"context_line":"from heat.rpc import rpc_init"},{"line_number":22,"context_line":"import webob"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRvY%3D","line":20,"in_reply_to":"AAAAVn%2F%2FTfE%3D","updated":"2014-03-07 04:55:51.000000000","message":"i\u0027ll change this to the original.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            logger.error(_(\"Unable to retrieve stack %s for periodic task\") %"},{"line_number":160,"context_line":"                         sid)"},{"line_number":161,"context_line":"            return"},{"line_number":162,"context_line":"        stack_context \u003d self._load_user_creds(stack.user_creds_id)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # recurse into any nested stacks."},{"line_number":165,"context_line":"        children \u003d db_api.stack_get_all_by_owner_id(admin_context, sid)"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWqg%3D","line":162,"updated":"2014-03-06 17:12:44.000000000","message":"load_user_creds needs to be in one class not two","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                                            self.periodic_watcher_task,"},{"line_number":225,"context_line":"                                            sid\u003dstack_id)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def _load_user_creds(self, creds_id):"},{"line_number":228,"context_line":"        user_creds \u003d db_api.user_creds_get(creds_id)"},{"line_number":229,"context_line":"        stored_context \u003d context.RequestContext.from_dict(user_creds)"},{"line_number":230,"context_line":"        # heat_keystoneclient populates the context with an auth_token"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWp4%3D","line":227,"updated":"2014-03-06 17:12:44.000000000","message":"load_user_creds needs to be in one class not two","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":596,"context_line":"        \"\"\""},{"line_number":597,"context_line":"        def remote_stop(lock_engine_id):"},{"line_number":598,"context_line":"            try:"},{"line_number":599,"context_line":"                self.cctxt \u003d self._client.prepare("},{"line_number":600,"context_line":"                    version\u003d\u00271.0\u0027,"},{"line_number":601,"context_line":"                    timeout\u003dcfg.CONF.engine_life_check_timeout,"},{"line_number":602,"context_line":"                    topic\u003dlock_engine_id)"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWr4%3D","line":599,"updated":"2014-03-06 17:12:44.000000000","message":"cctxt probably shouldn\u0027t be global here","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":600,"context_line":"                    version\u003d\u00271.0\u0027,"},{"line_number":601,"context_line":"                    timeout\u003dcfg.CONF.engine_life_check_timeout,"},{"line_number":602,"context_line":"                    topic\u003dlock_engine_id)"},{"line_number":603,"context_line":"                self.cctxt.call(cnxt,"},{"line_number":604,"context_line":"                                \u0027stop_stack\u0027,"},{"line_number":605,"context_line":"                                stack_identity\u003dstack_identity)"},{"line_number":606,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWrk%3D","line":603,"updated":"2014-03-06 17:12:44.000000000","message":"cctxt probably shouldn\u0027t be global here","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":793,"context_line":"        # but this happens because the keystone user associated with the"},{"line_number":794,"context_line":"        # signal doesn\u0027t have permission to read the secret key of"},{"line_number":795,"context_line":"        # the user associated with the cfn-credentials file"},{"line_number":796,"context_line":"        stack_context \u003d self._load_user_creds(s.user_creds_id)"},{"line_number":797,"context_line":"        stack \u003d parser.Stack.load(stack_context, stack\u003ds)"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":"        if resource_name not in stack:"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWo0%3D","line":796,"updated":"2014-03-06 17:12:44.000000000","message":"load_user_creds needs to be in one class not two","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":871,"context_line":"        self.thread_group_mgr.start_with_lock(cnxt, stack, self.engine_id,"},{"line_number":872,"context_line":"                                              _stack_resume, stack)"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def _load_user_creds(self, creds_id):"},{"line_number":875,"context_line":"        user_creds \u003d db_api.user_creds_get(creds_id)"},{"line_number":876,"context_line":"        stored_context \u003d context.RequestContext.from_dict(user_creds)"},{"line_number":877,"context_line":"        # heat_keystoneclient populates the context with an auth_token"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWpM%3D","line":874,"updated":"2014-03-06 17:12:44.000000000","message":"load_user_creds needs to be in one class not two","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"e713427e1b574a1861ab50db412a831091b8c1d1","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":"from oslo import messaging"},{"line_number":19,"context_line":"from heat.common import exception as exception"},{"line_number":20,"context_line":"from heat.rpc import api as rpc_api"},{"line_number":21,"context_line":"from heat.rpc import rpc_init"},{"line_number":22,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAVn%2F%2FQWQ%3D","line":19,"updated":"2014-03-07 08:24:50.000000000","message":"these are nedlessly reordered","commit_id":"7aa285438d8410594568da242b6b1db1244696e4"}],"heat/openstack/common/service.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# NOTE(sdake) if running update.py, do not replace the rpc loading"},{"line_number":48,"context_line":"# logic here.  oslo messaging doesn\u0027t have a similar feature."},{"line_number":49,"context_line":"CONF \u003d cfg.CONF"},{"line_number":50,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FnzU%3D","line":48,"updated":"2014-03-05 01:19:15.000000000","message":"But this change deletes heat.openstack.common.rpc, so here rpc will be None and the below code won\u0027t run. To me it looks like this doesn\u0027t need patching at all.","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"29e22fe2c490d540b892cc5ccfc6e20a52ef98bc","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# NOTE(sdake) if running update.py, do not replace the rpc loading"},{"line_number":48,"context_line":"# logic here.  oslo messaging doesn\u0027t have a similar feature."},{"line_number":49,"context_line":"CONF \u003d cfg.CONF"},{"line_number":50,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FnnI%3D","line":48,"in_reply_to":"AAAAVn%2F%2FnzU%3D","updated":"2014-03-05 02:07:17.000000000","message":"yup your right i\u0027ll revert this part of the change.  The reason I inroduced it in the first place is heat.openstack.common.rpc *pyc files were left around after the git rm, which causes problems with the test cases.","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"}],"heat/rpc/client.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param stack_name: Name of the stack you want to see,"},{"line_number":49,"context_line":"                           or None to see all"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        return self._client.call(ctxt,"},{"line_number":52,"context_line":"                                 \u0027identify_stack\u0027,"},{"line_number":53,"context_line":"                                 stack_name\u003dstack_name)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FTSA%3D","line":51,"updated":"2014-03-07 01:14:11.000000000","message":"It seems to me that if you define:\n\n  @staticmethod\n  def make_msg(method, **kwargs):\n      return method, kwargs\n\n  def call(self, ctxt, msg):\n      method, kwargs \u003d msg\n      return self._client.call(ctxt, method, **kwargs)\n\nThen you avoid having to make this and every other subsequent change in this file.\n\nThen maybe you refactor later to get rid of make_msg later... or maybe you just don\u0027t.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"dc63c96a998b610af3b4a2863041fbdf95718f23","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param stack_name: Name of the stack you want to see,"},{"line_number":49,"context_line":"                           or None to see all"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        return self._client.call(ctxt,"},{"line_number":52,"context_line":"                                 \u0027identify_stack\u0027,"},{"line_number":53,"context_line":"                                 stack_name\u003dstack_name)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FNKY%3D","line":51,"in_reply_to":"AAAAVn%2F%2FRuM%3D","updated":"2014-03-07 16:57:22.000000000","message":"I think you\u0027re misunderstanding what I\u0027m suggesting.\n\nEngineClient is just an object. You can add any methods you like. You don\u0027t need permission from the Oslo developers, or anyone else. Should you pass a dictionary containing the method name and a dict of args to RPCClient.call()? No. Does Oslo contain code that does introspection on your project looking for methods named make_msg, do a git blame to find the culprit and then anonymously post derogatory comments about you on internet forums? Maybe, I haven\u0027t actually looked.\n\nNo changes to the unit tests would be needed, or desired.\n\nMy suggested call() method still calls _client.call(). Yes it is slightly less efficient, but you can always refactor later.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param stack_name: Name of the stack you want to see,"},{"line_number":49,"context_line":"                           or None to see all"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        return self._client.call(ctxt,"},{"line_number":52,"context_line":"                                 \u0027identify_stack\u0027,"},{"line_number":53,"context_line":"                                 stack_name\u003dstack_name)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRuM%3D","line":51,"in_reply_to":"AAAAVn%2F%2FTSA%3D","updated":"2014-03-07 04:55:51.000000000","message":"the oslo.messaging documentation states what is done in this file is the proper way to handle the client calls, and not to create a make_msg call.  I didn\u0027t make the documentation, I just followed it :)  While this may work, I expect changing all of the test cases to support this model would take the better part of 20 hours, so I am hopeful you can overlook this recommended change.\n\nOn the plus side, the using the native _client.call functionality is a bit more efficient.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/rpc/rpc_init.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Red Hat, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FUUU%3D","line":1,"updated":"2014-03-07 01:14:11.000000000","message":"I assume this is just copy-and-paste? Let\u0027s not pollute the project with these any more than we have to.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Red Hat, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRuE%3D","line":1,"in_reply_to":"AAAAVn%2F%2FUUU%3D","updated":"2014-03-07 04:55:51.000000000","message":"copied straight from nova/rpc.py - I am loathe to remove other people\u0027s copyrights.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/tests/common.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# NOTE(sdake) The tests do not properly handle shutting down of the global"},{"line_number":34,"context_line":"# variables for TRANSPORT or NOTIFIER.  Test cases continue to run after"},{"line_number":35,"context_line":"# tearDown is run, making a rpc_init.cleanup() impossible."},{"line_number":36,"context_line":"try:"},{"line_number":37,"context_line":"    rpc_init.init(cfg.CONF)"},{"line_number":38,"context_line":"except cfg.DuplicateOptError as ex:"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fn8Y%3D","line":35,"updated":"2014-03-05 01:19:15.000000000","message":"We should aim to replace all our tearDown methods with self.addCleanup(...)\n\nWould this particular issue go away if you did a self.addCleanup(rpc_init.cleanup) instead of doing it in a tearDown?","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"29e22fe2c490d540b892cc5ccfc6e20a52ef98bc","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# NOTE(sdake) The tests do not properly handle shutting down of the global"},{"line_number":34,"context_line":"# variables for TRANSPORT or NOTIFIER.  Test cases continue to run after"},{"line_number":35,"context_line":"# tearDown is run, making a rpc_init.cleanup() impossible."},{"line_number":36,"context_line":"try:"},{"line_number":37,"context_line":"    rpc_init.init(cfg.CONF)"},{"line_number":38,"context_line":"except cfg.DuplicateOptError as ex:"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fnes%3D","line":35,"in_reply_to":"AAAAVn%2F%2Fn8Y%3D","updated":"2014-03-05 02:07:17.000000000","message":"The issue is not that tearDown isn\u0027t called, its much more complex then that.\n\nThe issue I ran into is that implementation is threaded, and a test case\u0027s thread would continue to run after tearDown was called.  This would result in an assert in the get_notifier() code because NOTIFICATION was reset to None in a shutDown with rpc_init.cleanup().  A race condition would allow rpc_init.init() if it is called in setUp.\n\nI\u0027m not sure it can be solved any other way, then properly figuring out how to shut down every test case by deleitng the threads.\n\nWhile I feel this is a bit hacky, I didn\u0027t want to rework almost every *.py file to shutdown the threads of any running stacks.\n\nI had thought about adding a engine.notifier.init call that sets a notifier that is a different global and can\u0027t be deleted.  I actually tried this without luck.  RPC connects endpoints to dispatchers via transports.  Transports can only be created once, because they register oslo options.  If rpc_init is called again, a stroptduplicate exception is raised.  \n\nThere was another piece of work I had to add to the rpc shutdown code (to unregister the oslo.messaging opts) but this resulted in the same threaded test cases failures.\n\nSo basically, I spent about 6 hours trying to sort this out and its the best I could come up with :)","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"# variables for TRANSPORT or NOTIFIER.  Test cases continue to run after"},{"line_number":34,"context_line":"# tearDown is run, making a rpc_init.cleanup() impossible."},{"line_number":35,"context_line":"try:"},{"line_number":36,"context_line":"    rpc_init.init(cfg.CONF)"},{"line_number":37,"context_line":"except cfg.DuplicateOptError as ex:"},{"line_number":38,"context_line":"    pass"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FTOU%3D","line":36,"updated":"2014-03-07 01:14:11.000000000","message":"This feels very wrong. Why is this function not idempotent?","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"# variables for TRANSPORT or NOTIFIER.  Test cases continue to run after"},{"line_number":34,"context_line":"# tearDown is run, making a rpc_init.cleanup() impossible."},{"line_number":35,"context_line":"try:"},{"line_number":36,"context_line":"    rpc_init.init(cfg.CONF)"},{"line_number":37,"context_line":"except cfg.DuplicateOptError as ex:"},{"line_number":38,"context_line":"    pass"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRtU%3D","line":36,"in_reply_to":"AAAAVn%2F%2FTOU%3D","updated":"2014-03-07 04:55:51.000000000","message":"Agree this is evil, but to fix requires reworking *all* of the test cases to properly shut down the threads they create before finishing.  See: https://review.openstack.org/#/c/72798/50/heat/tests/common.py for more details from @sbaker\u0027s same question (with response).","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"0ac09e95c6e3fb5fdf31e4feb493fd7f0bbafa37","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from heat.engine import resources"},{"line_number":30,"context_line":"from heat.engine import scheduler"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# NOTE(sdake) The tests do not properly handle shutting down of the global"},{"line_number":33,"context_line":"# variables for TRANSPORT or NOTIFIER.  Test cases continue to run in existing"},{"line_number":34,"context_line":"# threads after tearDown is run, making a rpc_init.cleanup() impossible."},{"line_number":35,"context_line":"try:"}],"source_content_type":"text/x-python","patch_set":62,"id":"AAAAVn%2F%2FH9s%3D","line":32,"updated":"2014-03-08 20:06:04.000000000","message":"this needs to be integrated into the rpc_init patch","commit_id":"1e54ba8ba84becfd79562043c175e813007fd6cf"}],"heat/tests/test_api_cfn_v1.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from heat.common import identifier"},{"line_number":22,"context_line":"from heat.common import policy"},{"line_number":23,"context_line":"from heat.common.wsgi import Request"},{"line_number":24,"context_line":"from heat.rpc import api as engine_api"},{"line_number":25,"context_line":"from heat.api.aws import exception"},{"line_number":26,"context_line":"import heat.api.cfn.v1.stacks as stacks"},{"line_number":27,"context_line":"from heat.tests.common import HeatTestCase"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FTOA%3D","line":24,"updated":"2014-03-07 01:14:11.000000000","message":"This is variously imported as rpc_api or engine_api. To the extent that it\u0027s still being named engine_api, that dates from the days before the heat.rpc package was created. We should be trying to migrate away from that, not towards it, because there is also a heat.engine.api module and this naming is ambiguous.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"dc63c96a998b610af3b4a2863041fbdf95718f23","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from heat.common import identifier"},{"line_number":22,"context_line":"from heat.common import policy"},{"line_number":23,"context_line":"from heat.common.wsgi import Request"},{"line_number":24,"context_line":"from heat.rpc import api as engine_api"},{"line_number":25,"context_line":"from heat.api.aws import exception"},{"line_number":26,"context_line":"import heat.api.cfn.v1.stacks as stacks"},{"line_number":27,"context_line":"from heat.tests.common import HeatTestCase"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FNY8%3D","line":24,"in_reply_to":"AAAAVn%2F%2FRs4%3D","updated":"2014-03-07 16:57:22.000000000","message":"+1","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from heat.common import identifier"},{"line_number":22,"context_line":"from heat.common import policy"},{"line_number":23,"context_line":"from heat.common.wsgi import Request"},{"line_number":24,"context_line":"from heat.rpc import api as engine_api"},{"line_number":25,"context_line":"from heat.api.aws import exception"},{"line_number":26,"context_line":"import heat.api.cfn.v1.stacks as stacks"},{"line_number":27,"context_line":"from heat.tests.common import HeatTestCase"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRs4%3D","line":24,"in_reply_to":"AAAAVn%2F%2FTOA%3D","updated":"2014-03-07 04:55:51.000000000","message":"Agree I\u0027ll change it back.\n\nI think what makes sense for variable naming:\nheat.rpc.api -\u003e rpc_api\nheat.rpc.client -\u003e rpc_client\n\nIf you agree, I\u0027ll go ahead and make those changes.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/tests/test_engine_service.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        utils.reset_dummy_db()"},{"line_number":426,"context_line":"        self.ctx \u003d utils.dummy_context()"},{"line_number":427,"context_line":"        self.m.ReplayAll()"},{"line_number":428,"context_line":"        self.eng \u003d service.EngineService(\u0027a-host\u0027, \u0027a-topic\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _test_stack_create(self, stack_name):"},{"line_number":431,"context_line":"        params \u003d {\u0027foo\u0027: \u0027bar\u0027}"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FSsg%3D","line":428,"updated":"2014-03-07 01:14:11.000000000","message":"Why not add a line:\n\n  self.man \u003d self.eng.disp.endpoint\n\nand avoid all the other changes?","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        utils.reset_dummy_db()"},{"line_number":426,"context_line":"        self.ctx \u003d utils.dummy_context()"},{"line_number":427,"context_line":"        self.m.ReplayAll()"},{"line_number":428,"context_line":"        self.eng \u003d service.EngineService(\u0027a-host\u0027, \u0027a-topic\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _test_stack_create(self, stack_name):"},{"line_number":431,"context_line":"        params \u003d {\u0027foo\u0027: \u0027bar\u0027}"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRsI%3D","line":428,"in_reply_to":"AAAAVn%2F%2FSsg%3D","updated":"2014-03-07 04:55:51.000000000","message":"great suggestion this would have saved me lots of time.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        self.eng.thread_group_mgr.groups[sid].wait()"},{"line_number":724,"context_line":"        self.m.VerifyAll()"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"#TODO(sdake) - not sure how to mock a call where prepare is needed"},{"line_number":727,"context_line":"#              prepare creates a new client context"},{"line_number":728,"context_line":"#    def test_stack_delete_other_engine_active_lock_failed(self):"},{"line_number":729,"context_line":"#        stack_name \u003d \u0027service_delete_test_stack\u0027"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWyg%3D","line":726,"updated":"2014-03-06 17:12:44.000000000","message":"these tests need to be fixed","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"fa1b0eb3378d21d81052e36ee579de23d9aa3a08","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        self.eng.thread_group_mgr.groups[sid].wait()"},{"line_number":724,"context_line":"        self.m.VerifyAll()"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"#TODO(sdake) - not sure how to mock a call where prepare is needed"},{"line_number":727,"context_line":"#              prepare creates a new client context"},{"line_number":728,"context_line":"#    def test_stack_delete_other_engine_active_lock_failed(self):"},{"line_number":729,"context_line":"#        stack_name \u003d \u0027service_delete_test_stack\u0027"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FTlQ%3D","line":726,"in_reply_to":"AAAAVn%2F%2FUds%3D","updated":"2014-03-06 22:51:15.000000000","message":"cool I think I can use this in the other failing test cases since they are all related to this prepare scenario.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"162c8356efa1a229edc36f13d2458204c2ce8943","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        self.eng.thread_group_mgr.groups[sid].wait()"},{"line_number":724,"context_line":"        self.m.VerifyAll()"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"#TODO(sdake) - not sure how to mock a call where prepare is needed"},{"line_number":727,"context_line":"#              prepare creates a new client context"},{"line_number":728,"context_line":"#    def test_stack_delete_other_engine_active_lock_failed(self):"},{"line_number":729,"context_line":"#        stack_name \u003d \u0027service_delete_test_stack\u0027"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FUds%3D","line":726,"in_reply_to":"AAAAVn%2F%2FWyg%3D","updated":"2014-03-06 21:09:55.000000000","message":"I made a few changes.  Seems to be working now:\n\n    def test_stack_delete_other_engine_active_lock_failed(self):\n        stack_name \u003d \u0027service_delete_test_stack\u0027\n        stack \u003d get_wordpress_stack(stack_name, self.ctx)\n        sid \u003d stack.store()\n\n        # Insert a fake lock into the db\n        db_api.stack_lock_create(stack.id, \"other-engine-fake-uuid\")\n\n        st \u003d db_api.stack_get(self.ctx, sid)\n        self.m.StubOutWithMock(parser.Stack, \u0027load\u0027)\n        parser.Stack.load(self.ctx, stack\u003dst).AndReturn(stack)\n\n        self.m.StubOutWithMock(stack_lock.StackLock, \u0027try_acquire\u0027)\n        stack_lock.StackLock.try_acquire().AndReturn(\"other-engine-fake-uuid\")\n\n        self.m.StubOutWithMock(stack_lock.StackLock, \u0027engine_alive\u0027)\n        stack_lock.StackLock.engine_alive(self.ctx, \"other-engine-fake-uuid\")\\\n            .AndReturn(True)\n\n        cctxt \u003d self.m.CreateMockAnything()\n        self.m.StubOutWithMock(self.eng.disp.endpoint._client, \u0027prepare\u0027)\n        self.eng.disp.endpoint._client.prepare(\n            version\u003d\u00271.0\u0027,\n            timeout\u003dcfg.CONF.engine_life_check_timeout,\n            topic\u003d\u0027other-engine-fake-uuid\u0027).AndReturn(cctxt)\n\n        self.m.StubOutWithMock(cctxt, \u0027call\u0027)\n        cctxt.call(\n            self.ctx,\n            \u0027stop_stack\u0027,\n            stack_identity\u003dstack.identifier()\n        ).AndRaise(messaging.MessagingTimeout)\n        self.m.ReplayAll()\n\n        self.assertRaises(\n            exception.StopActionFailed,\n            self.eng.disp.endpoint.delete_stack,\n            self.ctx, stack.identifier())\n        self.m.VerifyAll()","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":1431,"context_line":""},{"line_number":1432,"context_line":"        utils.setup_dummy_db()"},{"line_number":1433,"context_line":""},{"line_number":1434,"context_line":"#    @mock.patch.object(service.db_api, \u0027stack_get_all\u0027)"},{"line_number":1435,"context_line":"#    @mock.patch.object(service.messaging.MessageHandlingServer, \u0027start\u0027)"},{"line_number":1436,"context_line":"#    @mock.patch.object(service.messaging.MessageHandlingServer, \u0027start\u0027)"},{"line_number":1437,"context_line":"#    def test_start_gets_all_stacks(self, mock_super_start_listener,"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWyo%3D","line":1434,"updated":"2014-03-06 17:12:44.000000000","message":"these tests need to be fixed","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/tests/test_fault_middleware.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                    \u0027title\u0027: \u0027Internal Server Error\u0027}"},{"line_number":72,"context_line":"        self.assertEqual(expected, msg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_remote_exception(self):"},{"line_number":75,"context_line":"        # We want tracebacks"},{"line_number":76,"context_line":"        cfg.CONF.set_override(\u0027debug\u0027, True)"},{"line_number":77,"context_line":"        error \u003d heat_exc.StackNotFound(stack_name\u003d\u0027a\u0027)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2Fn5M%3D","side":"PARENT","line":74,"updated":"2014-03-05 01:19:15.000000000","message":"Can you briefly explain why these tests are no longer needed?","commit_id":"5adef1d6a034b11d9d135783961945620289b103"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"29e22fe2c490d540b892cc5ccfc6e20a52ef98bc","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                    \u0027title\u0027: \u0027Internal Server Error\u0027}"},{"line_number":72,"context_line":"        self.assertEqual(expected, msg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_remote_exception(self):"},{"line_number":75,"context_line":"        # We want tracebacks"},{"line_number":76,"context_line":"        cfg.CONF.set_override(\u0027debug\u0027, True)"},{"line_number":77,"context_line":"        error \u003d heat_exc.StackNotFound(stack_name\u003d\u0027a\u0027)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAVn%2F%2FneU%3D","side":"PARENT","line":74,"updated":"2014-03-05 02:07:17.000000000","message":"This is the stuff that should have been commented out while I sorted out how to fix or fixed rather then removed.  Sorry about the oversight.","commit_id":"5adef1d6a034b11d9d135783961945620289b103"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d8cc7ed5b432008229f9b8ffeea7571e1ed0ed2c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo.config import cfg"},{"line_number":20,"context_line":"from oslo import messaging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import heat.api.middleware.fault as fault"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FSrc%3D","line":20,"updated":"2014-03-07 01:14:11.000000000","message":"Why not\n\n  from oslo.messaging._drivers import common as rpc_common\n\n?\n\nI\u0027m not sure that just importing messaging is even safe; it\u0027s only by good fortune that the _drivers.common module gets imported automatically.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"7369abd811871aadadd24cbfd3f9ddc154d67ac2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo.config import cfg"},{"line_number":20,"context_line":"from oslo import messaging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import heat.api.middleware.fault as fault"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FRr4%3D","line":20,"in_reply_to":"AAAAVn%2F%2FSrc%3D","updated":"2014-03-07 04:55:51.000000000","message":"good suggestion I\u0027ll make this change.","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/tests/test_metadata_refresh.py":[{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        self.m.StubOutWithMock(scheduler.TaskRunner, \u0027_sleep\u0027)"},{"line_number":243,"context_line":"        self.m.StubOutWithMock(service.EngineEndpoints, \u0027_load_user_creds\u0027)"},{"line_number":244,"context_line":"        self.ep._load_user_creds("},{"line_number":245,"context_line":"            mox.IgnoreArg()).MultipleTimes().AndReturn(ctx)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        return stack"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWyc%3D","line":244,"updated":"2014-03-06 17:12:44.000000000","message":"This might need to be in StackWatches rather then EngineEndpoints","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/tests/test_rpc_client.py":[{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self._test_engine_api(\u0027validate_template\u0027, \u0027call\u0027,"},{"line_number":131,"context_line":"                              template\u003d{u\u0027Foo\u0027: u\u0027bar\u0027})"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"# SDAKE version\u003d1.1"},{"line_number":134,"context_line":"#    def test_list_resource_types(self):"},{"line_number":135,"context_line":"#        self._test_engine_api(\u0027list_resource_types\u0027, \u0027call\u0027,"},{"line_number":136,"context_line":"#                              support_status\u003dNone)"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWxg%3D","line":133,"updated":"2014-03-06 17:12:44.000000000","message":"this test needs to be fixed","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/tests/test_stack_lock.py":[{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from heat.db import api as db_api"},{"line_number":15,"context_line":"from heat.engine import stack_lock"},{"line_number":16,"context_line":"#from heat.openstack.common.rpc import common as rpc_common"},{"line_number":17,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":18,"context_line":"from heat.tests import utils"},{"line_number":19,"context_line":"from heat.common import exception"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWxM%3D","line":16,"updated":"2014-03-06 17:12:44.000000000","message":"this needs to be deleted","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.m.VerifyAll()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"#TODO(sdake) - not sure how to mock a call where prepare is needed"},{"line_number":57,"context_line":"#              prepare creates a new client context"},{"line_number":58,"context_line":"#    def test_successful_acquire_existing_lock_engine_dead(self):"},{"line_number":59,"context_line":"#        self.m.StubOutWithMock(db_api, \"stack_lock_create\")"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWxA%3D","line":56,"updated":"2014-03-06 17:12:44.000000000","message":"this test needs to be fixed","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"#        slock.acquire()"},{"line_number":77,"context_line":"#        self.m.VerifyAll()"},{"line_number":78,"context_line":"#"},{"line_number":79,"context_line":"#TODO(sdake) - not sure how to mock a call where prepare is needed"},{"line_number":80,"context_line":"#              prepare creates a new client context"},{"line_number":81,"context_line":"#    def test_failed_acquire_existing_lock_engine_alive(self):"},{"line_number":82,"context_line":"#        self.m.StubOutWithMock(db_api, \"stack_lock_create\")"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWw4%3D","line":79,"updated":"2014-03-06 17:12:44.000000000","message":"this test needs to be fixed","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"#        self.assertRaises(rpc_common.ClientException, slock.acquire)"},{"line_number":96,"context_line":"#        self.m.VerifyAll()"},{"line_number":97,"context_line":"#"},{"line_number":98,"context_line":"#TODO(sdake) - not sure how to mock a call where prepare is needed"},{"line_number":99,"context_line":"#              prepare creates a new client context"},{"line_number":100,"context_line":"#    def test_failed_acquire_existing_lock_engine_dead(self):"},{"line_number":101,"context_line":"#        self.m.StubOutWithMock(db_api, \"stack_lock_create\")"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWws%3D","line":98,"updated":"2014-03-06 17:12:44.000000000","message":"this test needs to be fixed","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"#        self.assertRaises(rpc_common.ClientException, slock.acquire)"},{"line_number":120,"context_line":"#        self.m.VerifyAll()"},{"line_number":121,"context_line":"#"},{"line_number":122,"context_line":"#TODO(sdake) - not sure how to mock a call where prepare is needed"},{"line_number":123,"context_line":"#              prepare creates a new client context"},{"line_number":124,"context_line":"#    def test_successful_acquire_with_retry(self):"},{"line_number":125,"context_line":"#        self.m.StubOutWithMock(db_api, \"stack_lock_create\")"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWwg%3D","line":122,"updated":"2014-03-06 17:12:44.000000000","message":"this test needs to be fixed","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"#        slock.acquire()"},{"line_number":156,"context_line":"#        self.m.VerifyAll()"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"#TODO(sdake) - not sure how to mock a call where prepare is needed"},{"line_number":159,"context_line":"#              prepare creates a new client context"},{"line_number":160,"context_line":"#    def test_failed_acquire_one_retry_only(self):"},{"line_number":161,"context_line":"#        self.m.StubOutWithMock(db_api, \"stack_lock_create\")"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWwY%3D","line":158,"updated":"2014-03-06 17:12:44.000000000","message":"this test needs to be fixed","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"heat/tests/test_validate.py":[{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":804,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":805,"context_line":"        self.m.ReplayAll()"},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":808,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":809,"context_line":"        self.assertEqual(\u0027test.\u0027, res[\u0027Description\u0027])"},{"line_number":810,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWv4%3D","line":807,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":823,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":824,"context_line":"        self.m.ReplayAll()"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":827,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":828,"context_line":"        self.assertEqual(\u0027test.\u0027, res[\u0027Description\u0027])"},{"line_number":829,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWvo%3D","line":826,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":836,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":837,"context_line":"        self.m.ReplayAll()"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":840,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":841,"context_line":"        self.assertNotEqual(res[\u0027Description\u0027], \u0027Successfully validated\u0027)"},{"line_number":842,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWvY%3D","line":839,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":849,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":850,"context_line":"        self.m.ReplayAll()"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":853,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":854,"context_line":"        self.assertEqual(\u0027test.\u0027, res[\u0027Description\u0027])"},{"line_number":855,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWvU%3D","line":852,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":862,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":863,"context_line":"        self.m.ReplayAll()"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":866,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":867,"context_line":"        self.assertNotEqual(res[\u0027Description\u0027], \u0027Successfully validated\u0027)"},{"line_number":868,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWvI%3D","line":865,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":875,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":876,"context_line":"        self.m.ReplayAll()"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":879,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":880,"context_line":"        # Note: the assertion below does not expect a CFN dict of the parameter"},{"line_number":881,"context_line":"        # but a dict of the parameters.Schema object."}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWvE%3D","line":878,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":958,"context_line":"        self.m.ReplayAll()"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":961,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":962,"context_line":"        self.assertEqual({\u0027Error\u0027: \u0027Unknown Property UnknownProperty\u0027}, res)"},{"line_number":963,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWt4%3D","line":960,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":969,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":970,"context_line":"        self.m.ReplayAll()"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":973,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":974,"context_line":"        self.assertEqual({\u0027Error\u0027: \u0027Resources must contain Resource. \u0027"},{"line_number":975,"context_line":"                          \u0027Found a [string] instead\u0027},"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWts%3D","line":972,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":983,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":984,"context_line":"        self.m.ReplayAll()"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":987,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":988,"context_line":"        self.assertEqual("},{"line_number":989,"context_line":"            {\u0027Error\u0027: \u0027Property SourceDestCheck not implemented yet\u0027},"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWtU%3D","line":986,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":997,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":998,"context_line":"        self.m.ReplayAll()"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":1001,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":1002,"context_line":"        self.assertEqual({\u0027Error\u0027: \u0027Invalid DeletionPolicy Destroy\u0027}, res)"},{"line_number":1003,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWtM%3D","line":1000,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":1010,"context_line":"        self.m.ReplayAll()"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":1013,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":1014,"context_line":"        self.assertEqual("},{"line_number":1015,"context_line":"            {\u0027Error\u0027: \u0027Snapshot DeletionPolicy not supported\u0027}, res)"}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWtA%3D","line":1012,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"921ae6024cc1e2b743e68ae7689c4ef6fb1bc69c","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"        service.EngineListener.start().AndReturn(None)"},{"line_number":1025,"context_line":"        self.m.ReplayAll()"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        engine \u003d service.EngineEndpoints(\u0027a\u0027, \u0027t\u0027)"},{"line_number":1028,"context_line":"        res \u003d dict(engine.validate_template(None, t))"},{"line_number":1029,"context_line":"        self.assertEqual({\u0027Description\u0027: u\u0027test.\u0027, \u0027Parameters\u0027: {}}, res)"},{"line_number":1030,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"AAAAVn%2F%2FWso%3D","line":1027,"updated":"2014-03-06 17:12:44.000000000","message":"endpoint would be a more accurate name for this variable","commit_id":"d178d9b32be37ec36e374bd2e93063dd8f82c36b"}],"install.sh":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f492eca9ab529457163df43ed4517399fd5be305","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        if detect_rabbit"},{"line_number":84,"context_line":"        then"},{"line_number":85,"context_line":"            echo \"rabbitmq detected, configuring $conf_path for rabbit\" \u003e\u00262"},{"line_number":86,"context_line":"            iniset $conf_path DEFAULT rpc_backend kombu"},{"line_number":87,"context_line":"            iniset $conf_path DEFAULT rabbit_password guest"},{"line_number":88,"context_line":"        else"},{"line_number":89,"context_line":"            echo \"qpid detected, configuring $conf_path for qpid\" \u003e\u00262"}],"source_content_type":"text/x-sh","patch_set":50,"id":"AAAAVn%2F%2Fn4k%3D","line":86,"updated":"2014-03-05 01:19:15.000000000","message":"is this something needed in devstack and tripleo too? Would it work if we make this change before the conversion to oslo.messaging?","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"29e22fe2c490d540b892cc5ccfc6e20a52ef98bc","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        if detect_rabbit"},{"line_number":84,"context_line":"        then"},{"line_number":85,"context_line":"            echo \"rabbitmq detected, configuring $conf_path for rabbit\" \u003e\u00262"},{"line_number":86,"context_line":"            iniset $conf_path DEFAULT rpc_backend kombu"},{"line_number":87,"context_line":"            iniset $conf_path DEFAULT rabbit_password guest"},{"line_number":88,"context_line":"        else"},{"line_number":89,"context_line":"            echo \"qpid detected, configuring $conf_path for qpid\" \u003e\u00262"}],"source_content_type":"text/x-sh","patch_set":50,"id":"AAAAVn%2F%2FncI%3D","line":86,"in_reply_to":"AAAAVn%2F%2Fn4k%3D","updated":"2014-03-05 02:07:17.000000000","message":"Devstack doesn\u0027t need specific changes.  our rpc_init has a TRANSPORT_ALIASES feature which translates Grizzly/Havana driver names to oslo.messaging names.  See:\n\nhttps://review.openstack.org/#/c/72798/50/heat/rpc/rpc_init.py","commit_id":"7393c78a75f6059ef3974a7a401108922f9f1734"}]}
