)]}'
{"nova/compute/api.py":[{"author":{"_account_id":2667,"name":"Alex Glikson","email":"glikson@il.ibm.com","username":"glikson"},"change_message_id":"805d6ac09ec03a16081dbb804d6880ccaaa68eb5","unresolved":false,"context_lines":[{"line_number":2672,"context_line":"    def create_aggregate(self, context, aggregate_name, availability_zone):"},{"line_number":2673,"context_line":"        \"\"\"Creates the model for the aggregate.\"\"\""},{"line_number":2674,"context_line":""},{"line_number":2675,"context_line":"        system_metadata \u003d {}"},{"line_number":2676,"context_line":"        values \u003d {\"name\": aggregate_name}"},{"line_number":2677,"context_line":"        system_metadata.update(values)"},{"line_number":2678,"context_line":"        metadata \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F1Fk%3D","line":2675,"updated":"2013-06-08 06:32:57.000000000","message":"I wouldn\u0027t use the term \"system_metadata\" here - it has very specific meaning in the context of instances.","commit_id":"da6a1e1bef5f165421c4d7b2fc0c473155272a36"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"08682c2b6249fded7724d9c31eedf7b0c8ff6a07","unresolved":false,"context_lines":[{"line_number":2672,"context_line":"    def create_aggregate(self, context, aggregate_name, availability_zone):"},{"line_number":2673,"context_line":"        \"\"\"Creates the model for the aggregate.\"\"\""},{"line_number":2674,"context_line":""},{"line_number":2675,"context_line":"        system_metadata \u003d {}"},{"line_number":2676,"context_line":"        values \u003d {\"name\": aggregate_name}"},{"line_number":2677,"context_line":"        system_metadata.update(values)"},{"line_number":2678,"context_line":"        metadata \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F0%2FM%3D","line":2675,"in_reply_to":"AAAAPX%2F%2F1Fk%3D","updated":"2013-06-08 09:03:47.000000000","message":"Done, it was now changed to \"aggregate_payload\"","commit_id":"da6a1e1bef5f165421c4d7b2fc0c473155272a36"},{"author":{"_account_id":2667,"name":"Alex Glikson","email":"glikson@il.ibm.com","username":"glikson"},"change_message_id":"805d6ac09ec03a16081dbb804d6880ccaaa68eb5","unresolved":false,"context_lines":[{"line_number":2710,"context_line":"        system_metadata \u003d {\u0027aggregate_id\u0027: aggregate_id}"},{"line_number":2711,"context_line":"        system_metadata.update({\u0027meta_data\u0027: values})"},{"line_number":2712,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2713,"context_line":"                                                    \"api.updatename.start\","},{"line_number":2714,"context_line":"                                                    system_metadata)"},{"line_number":2715,"context_line":"        aggregate \u003d self.db.aggregate_update(context, aggregate_id, values)"},{"line_number":2716,"context_line":"        compute_utils.notify_about_aggregate_update(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F1HU%3D","line":2713,"updated":"2013-06-08 06:32:57.000000000","message":"Why \"updatename\" and not \"update\"? or maybe \"updateinfo\"..","commit_id":"da6a1e1bef5f165421c4d7b2fc0c473155272a36"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"08682c2b6249fded7724d9c31eedf7b0c8ff6a07","unresolved":false,"context_lines":[{"line_number":2710,"context_line":"        system_metadata \u003d {\u0027aggregate_id\u0027: aggregate_id}"},{"line_number":2711,"context_line":"        system_metadata.update({\u0027meta_data\u0027: values})"},{"line_number":2712,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2713,"context_line":"                                                    \"api.updatename.start\","},{"line_number":2714,"context_line":"                                                    system_metadata)"},{"line_number":2715,"context_line":"        aggregate \u003d self.db.aggregate_update(context, aggregate_id, values)"},{"line_number":2716,"context_line":"        compute_utils.notify_about_aggregate_update(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F0%2FI%3D","line":2713,"in_reply_to":"AAAAPX%2F%2F1HU%3D","updated":"2013-06-08 09:03:47.000000000","message":"Done, update to \"updateprop\" since the comments for this API is  \"Update the properties of an aggregate.\"","commit_id":"da6a1e1bef5f165421c4d7b2fc0c473155272a36"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"7826ca7cbee30bc465dc7d51b4b98f16c833f1df","unresolved":false,"context_lines":[{"line_number":2709,"context_line":"        \"\"\"Update the properties of an aggregate.\"\"\""},{"line_number":2710,"context_line":"        aggregate_payload \u003d {\u0027aggregate_id\u0027: aggregate_id}"},{"line_number":2711,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2712,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2713,"context_line":"                                                    \"api.updateprop.start\","},{"line_number":2714,"context_line":"                                                    aggregate_payload)"},{"line_number":2715,"context_line":"        aggregate \u003d self.db.aggregate_update(context, aggregate_id, values)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F%2FD8%3D","line":2712,"updated":"2013-06-15 11:41:50.000000000","message":"this code duplicate screams decorator, as it\u0027s exactly the pattern of do something before and after an existing function.\n\nThis should all be factored out to a decorator, otherwise there is a lot of copy / paste in here.","commit_id":"bd3908ce57e96becbe45e75f5f9a8b258a0e92fb"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"26205e8e26d46ab6bfc8ae231e45c75efebf8bdf","unresolved":false,"context_lines":[{"line_number":2709,"context_line":"        \"\"\"Update the properties of an aggregate.\"\"\""},{"line_number":2710,"context_line":"        aggregate_payload \u003d {\u0027aggregate_id\u0027: aggregate_id}"},{"line_number":2711,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2712,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2713,"context_line":"                                                    \"api.updateprop.start\","},{"line_number":2714,"context_line":"                                                    aggregate_payload)"},{"line_number":2715,"context_line":"        aggregate \u003d self.db.aggregate_update(context, aggregate_id, values)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F%2Bmk%3D","line":2712,"in_reply_to":"AAAAPn%2F%2F%2FD8%3D","updated":"2013-06-16 07:38:41.000000000","message":"Thanks Sean, the decorator is used to handle exception and compute_utils.notify_about_aggregate_update in every function is used to handle normal process.\n\nWe are using similar logic in compute/manager.py::pre_live_migration, make sense? \n@exception.wrap_exception(notifier\u003dnotifier, publisher_id\u003dpublisher_id())\n    def pre_live_migration(self, context, instance,\n                           block_migration\u003dFalse, disk\u003dNone,\n                           migrate_data\u003dNone):","commit_id":"bd3908ce57e96becbe45e75f5f9a8b258a0e92fb"}],"nova/compute/utils.py":[{"author":{"_account_id":2667,"name":"Alex Glikson","email":"glikson@il.ibm.com","username":"glikson"},"change_message_id":"805d6ac09ec03a16081dbb804d6880ccaaa68eb5","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                        usage_info)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"def notify_about_aggregate_update(context, event_suffix, system_metadata):"},{"line_number":259,"context_line":"    \"\"\""},{"line_number":260,"context_line":"    Send a notification about aggregate update."},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F1GE%3D","line":258,"updated":"2013-06-08 06:32:57.000000000","message":"I wouldn\u0027t call the argument \"system_metadata\".. In case of instances above, this refers to the actual field called \"system_metadata\".","commit_id":"da6a1e1bef5f165421c4d7b2fc0c473155272a36"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"08682c2b6249fded7724d9c31eedf7b0c8ff6a07","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                        usage_info)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"def notify_about_aggregate_update(context, event_suffix, system_metadata):"},{"line_number":259,"context_line":"    \"\"\""},{"line_number":260,"context_line":"    Send a notification about aggregate update."},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F0%2FA%3D","line":258,"in_reply_to":"AAAAPX%2F%2F1GE%3D","updated":"2013-06-08 09:03:47.000000000","message":"Done, updated to \"aggregate_payload\"","commit_id":"da6a1e1bef5f165421c4d7b2fc0c473155272a36"},{"author":{"_account_id":2667,"name":"Alex Glikson","email":"glikson@il.ibm.com","username":"glikson"},"change_message_id":"805d6ac09ec03a16081dbb804d6880ccaaa68eb5","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    :param event_suffix: Event type like \"create.start\" or \"create.end\""},{"line_number":263,"context_line":"    :param system_metadata: system_metadata for payload"},{"line_number":264,"context_line":"    \"\"\""},{"line_number":265,"context_line":"    aggregate_identify \u003d system_metadata.get(\u0027aggregate_id\u0027, None)"},{"line_number":266,"context_line":"    if not aggregate_identify:"},{"line_number":267,"context_line":"        aggregate_identify \u003d system_metadata.get(\u0027name\u0027, None)"},{"line_number":268,"context_line":"        if not aggregate_identify:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F1GA%3D","line":265,"updated":"2013-06-08 06:32:57.000000000","message":"I assume you meant \"identity\" or identifier\"?","commit_id":"da6a1e1bef5f165421c4d7b2fc0c473155272a36"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"08682c2b6249fded7724d9c31eedf7b0c8ff6a07","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    :param event_suffix: Event type like \"create.start\" or \"create.end\""},{"line_number":263,"context_line":"    :param system_metadata: system_metadata for payload"},{"line_number":264,"context_line":"    \"\"\""},{"line_number":265,"context_line":"    aggregate_identify \u003d system_metadata.get(\u0027aggregate_id\u0027, None)"},{"line_number":266,"context_line":"    if not aggregate_identify:"},{"line_number":267,"context_line":"        aggregate_identify \u003d system_metadata.get(\u0027name\u0027, None)"},{"line_number":268,"context_line":"        if not aggregate_identify:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F0%2B8%3D","line":265,"in_reply_to":"AAAAPX%2F%2F1GA%3D","updated":"2013-06-08 09:03:47.000000000","message":"Done, update to \"identifier\"","commit_id":"da6a1e1bef5f165421c4d7b2fc0c473155272a36"},{"author":{"_account_id":7128,"name":"Mark Vanderwiel","email":"vanderwl@us.ibm.com","username":"kramvan"},"change_message_id":"6c8d755c9fe188030d014bc656f04ba90f8c4271","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    if not aggregate_identifier:"},{"line_number":267,"context_line":"        aggregate_identifier \u003d aggregate_payload.get(\u0027name\u0027, None)"},{"line_number":268,"context_line":"        if not aggregate_identifier:"},{"line_number":269,"context_line":"            return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    notifier_api.notify(context, \u0027aggregate.%s\u0027 % aggregate_identifier,"},{"line_number":272,"context_line":"                        \u0027aggregate.%s\u0027 % event_suffix, notifier_api.INFO,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPX%2F%2FueM%3D","line":269,"updated":"2013-06-11 20:47:09.000000000","message":"Maybe a debug log here to understand why return with no action?","commit_id":"bd3908ce57e96becbe45e75f5f9a8b258a0e92fb"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"26205e8e26d46ab6bfc8ae231e45c75efebf8bdf","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    if not aggregate_identifier:"},{"line_number":267,"context_line":"        aggregate_identifier \u003d aggregate_payload.get(\u0027name\u0027, None)"},{"line_number":268,"context_line":"        if not aggregate_identifier:"},{"line_number":269,"context_line":"            return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    notifier_api.notify(context, \u0027aggregate.%s\u0027 % aggregate_identifier,"},{"line_number":272,"context_line":"                        \u0027aggregate.%s\u0027 % event_suffix, notifier_api.INFO,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F%2Bmg%3D","line":269,"in_reply_to":"AAAAPX%2F%2FueM%3D","updated":"2013-06-16 07:38:41.000000000","message":"Thanks Mark, will upload a new patch later after adding the debug message.","commit_id":"bd3908ce57e96becbe45e75f5f9a8b258a0e92fb"}],"nova/tests/compute/test_compute_utils.py":[{"author":{"_account_id":7128,"name":"Mark Vanderwiel","email":"vanderwl@us.ibm.com","username":"kramvan"},"change_message_id":"a3bb87880248d0d85d6dcfe5953b2491b31b6f13","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        self.assertEquals(payload[\u0027image_ref_url\u0027], image_ref_url)"},{"line_number":407,"context_line":"        self.compute.terminate_instance(self.context, instance)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def test_notify_about_aggregate_update(self):"},{"line_number":410,"context_line":"        # Set system metadata"},{"line_number":411,"context_line":"        aggregate_payload \u003d {\u0027name\u0027: \u0027fakegroup\u0027}"},{"line_number":412,"context_line":"        compute_utils.notify_about_aggregate_update(self.context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F4fI%3D","line":409,"updated":"2013-06-19 02:37:32.000000000","message":"how about test for using ID instead of name\nand tests for ID or Name \u003d None?","commit_id":"314d6c802c4f168d3724e91c9d43f8d20aaebd6c"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"3f94f9fc8320dd34685ad35e62e1f1bad9e9183d","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        self.assertEquals(payload[\u0027image_ref_url\u0027], image_ref_url)"},{"line_number":407,"context_line":"        self.compute.terminate_instance(self.context, instance)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def test_notify_about_aggregate_update(self):"},{"line_number":410,"context_line":"        # Set system metadata"},{"line_number":411,"context_line":"        aggregate_payload \u003d {\u0027name\u0027: \u0027fakegroup\u0027}"},{"line_number":412,"context_line":"        compute_utils.notify_about_aggregate_update(self.context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F4ds%3D","line":409,"in_reply_to":"AAAAPn%2F%2F4fI%3D","updated":"2013-06-19 03:10:36.000000000","message":"Done","commit_id":"314d6c802c4f168d3724e91c9d43f8d20aaebd6c"}]}
