)]}'
{"nova/conductor/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae8fca1db5ff9cd2defda38d49d163403da352b8","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    # NOTE(danms): This is never cell-targeted because it is only used for"},{"line_number":530,"context_line":"    # cellsv1 (which does not target cells directly) and n-cpu reschedules"},{"line_number":531,"context_line":"    # (which go to the cell conductor and thus are always cell-specific)."},{"line_number":532,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":533,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":534,"context_line":"            security_groups, block_device_mapping\u003dNone, legacy_bdm\u003dTrue):"},{"line_number":535,"context_line":"        # TODO(ndipanov): Remove block_device_mapping and legacy_bdm in version"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_4613c30e","line":532,"updated":"2017-05-04 01:56:26.000000000","message":"I think you\u0027re going to also have to update this to take the tags parameter because it\u0027s what the compute API calls in the case of cells v1:\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L1253\n\nAnd we\u0027d still need to honor that API change in cells v1 until we remove cells v1.","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0f14ef292c1501061e715dfad060edcc073d3ff7","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    # NOTE(danms): This is never cell-targeted because it is only used for"},{"line_number":530,"context_line":"    # cellsv1 (which does not target cells directly) and n-cpu reschedules"},{"line_number":531,"context_line":"    # (which go to the cell conductor and thus are always cell-specific)."},{"line_number":532,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":533,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":534,"context_line":"            security_groups, block_device_mapping\u003dNone, legacy_bdm\u003dTrue):"},{"line_number":535,"context_line":"        # TODO(ndipanov): Remove block_device_mapping and legacy_bdm in version"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_395b382f","line":532,"in_reply_to":"3f044301_4613c30e","updated":"2017-05-04 02:47:17.000000000","message":"will do","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae8fca1db5ff9cd2defda38d49d163403da352b8","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        \"\"\""},{"line_number":855,"context_line":"        instance_tags \u003d copy.deepcopy(tags)"},{"line_number":856,"context_line":"        if tags:"},{"line_number":857,"context_line":"            LOG.debug(\"tags %s\", list(tags), instance_uuid\u003dinstance_uuid)"},{"line_number":858,"context_line":"            for tag in tags:"},{"line_number":859,"context_line":"                tag.create()"},{"line_number":860,"context_line":"        return instance_tags"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_6627df66","line":857,"range":{"start_line":857,"start_character":12,"end_line":857,"end_character":73},"updated":"2017-05-04 01:56:26.000000000","message":"I assume this is for your own debug? We should probably remove this though.","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0f14ef292c1501061e715dfad060edcc073d3ff7","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        \"\"\""},{"line_number":855,"context_line":"        instance_tags \u003d copy.deepcopy(tags)"},{"line_number":856,"context_line":"        if tags:"},{"line_number":857,"context_line":"            LOG.debug(\"tags %s\", list(tags), instance_uuid\u003dinstance_uuid)"},{"line_number":858,"context_line":"            for tag in tags:"},{"line_number":859,"context_line":"                tag.create()"},{"line_number":860,"context_line":"        return instance_tags"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_792c2099","line":857,"range":{"start_line":857,"start_character":12,"end_line":857,"end_character":73},"in_reply_to":"3f044301_6627df66","updated":"2017-05-04 02:47:17.000000000","message":"NO, I just followed the above create_block_device_mapping method, but I also agree remove it","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae8fca1db5ff9cd2defda38d49d163403da352b8","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"                        bdm.destroy()"},{"line_number":1078,"context_line":"                    except exception.ObjectActionError:"},{"line_number":1079,"context_line":"                        pass"},{"line_number":1080,"context_line":"            for tag in instance_tags:"},{"line_number":1081,"context_line":"                with obj_target_cell(tag, cell):"},{"line_number":1082,"context_line":"                    try:"},{"line_number":1083,"context_line":"                        objects.Tag.destroy(context, instance.uuid, tag.tag)"},{"line_number":1084,"context_line":"                    except (exception.InstanceNotFound,"},{"line_number":1085,"context_line":"                            exception.InstanceTagNotFound):"},{"line_number":1086,"context_line":"                        pass"},{"line_number":1087,"context_line":"            return False"},{"line_number":1088,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_e6c88f75","line":1086,"range":{"start_line":1080,"start_character":12,"end_line":1086,"end_character":28},"updated":"2017-05-04 01:56:26.000000000","message":"Rather than looping over these, can we simply call objects.TagList.destroy(context, instance.uuid)? Then we don\u0027t have to do the same cell targeting and instance existence check in the DB API every time.","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0ebdf6d43495a030dead2789f5d28c1fbd591daf","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"                        bdm.destroy()"},{"line_number":1078,"context_line":"                    except exception.ObjectActionError:"},{"line_number":1079,"context_line":"                        pass"},{"line_number":1080,"context_line":"            for tag in instance_tags:"},{"line_number":1081,"context_line":"                with obj_target_cell(tag, cell):"},{"line_number":1082,"context_line":"                    try:"},{"line_number":1083,"context_line":"                        objects.Tag.destroy(context, instance.uuid, tag.tag)"},{"line_number":1084,"context_line":"                    except (exception.InstanceNotFound,"},{"line_number":1085,"context_line":"                            exception.InstanceTagNotFound):"},{"line_number":1086,"context_line":"                        pass"},{"line_number":1087,"context_line":"            return False"},{"line_number":1088,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_a9d57d45","line":1086,"range":{"start_line":1080,"start_character":12,"end_line":1086,"end_character":28},"in_reply_to":"3f044301_59560409","updated":"2017-05-05 18:49:36.000000000","message":"objects.TagList.destroy is a classmethod so you can just pass in the context that we have in scope here, like you\u0027re passing to objects.Tag.destroy. The difference is we delete all tags at once for the instance, than one at a time.","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0f14ef292c1501061e715dfad060edcc073d3ff7","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"                        bdm.destroy()"},{"line_number":1078,"context_line":"                    except exception.ObjectActionError:"},{"line_number":1079,"context_line":"                        pass"},{"line_number":1080,"context_line":"            for tag in instance_tags:"},{"line_number":1081,"context_line":"                with obj_target_cell(tag, cell):"},{"line_number":1082,"context_line":"                    try:"},{"line_number":1083,"context_line":"                        objects.Tag.destroy(context, instance.uuid, tag.tag)"},{"line_number":1084,"context_line":"                    except (exception.InstanceNotFound,"},{"line_number":1085,"context_line":"                            exception.InstanceTagNotFound):"},{"line_number":1086,"context_line":"                        pass"},{"line_number":1087,"context_line":"            return False"},{"line_number":1088,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_59560409","line":1086,"range":{"start_line":1080,"start_character":12,"end_line":1086,"end_character":28},"in_reply_to":"3f044301_e6c88f75","updated":"2017-05-04 02:47:17.000000000","message":"The problem here is that TagList obj doesn\u0027t have _context field, and I checked some other \u0027list\u0027 obj and they seems not having this field, so I left it this way for discussion, any suggestions?","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d8926bfb1db4d33e8c0c938aa43da1b4e29160f2","unresolved":false,"context_lines":[{"line_number":923,"context_line":"                                     request_specs, image,"},{"line_number":924,"context_line":"                                     admin_password, injected_files,"},{"line_number":925,"context_line":"                                     requested_networks, block_device_mapping,"},{"line_number":926,"context_line":"                                     tags):"},{"line_number":927,"context_line":"        legacy_spec \u003d request_specs[0].to_legacy_request_spec_dict()"},{"line_number":928,"context_line":"        try:"},{"line_number":929,"context_line":"            hosts \u003d self._schedule_instances(context, legacy_spec,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff0f0b1f_27bbab0e","line":926,"range":{"start_line":926,"start_character":37,"end_line":926,"end_character":41},"updated":"2017-05-22 08:52:20.000000000","message":"You already store the tags in the build_requests obj, why you need pass those tags in the parameters again?","commit_id":"f3906e8859a6c570df7576232ff92cfa98731f36"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a9c1daffc137906dfa117ccc4b0082e172aec693","unresolved":false,"context_lines":[{"line_number":923,"context_line":"                                     request_specs, image,"},{"line_number":924,"context_line":"                                     admin_password, injected_files,"},{"line_number":925,"context_line":"                                     requested_networks, block_device_mapping,"},{"line_number":926,"context_line":"                                     tags):"},{"line_number":927,"context_line":"        legacy_spec \u003d request_specs[0].to_legacy_request_spec_dict()"},{"line_number":928,"context_line":"        try:"},{"line_number":929,"context_line":"            hosts \u003d self._schedule_instances(context, legacy_spec,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff0f0b1f_4a93435c","line":926,"range":{"start_line":926,"start_character":37,"end_line":926,"end_character":41},"in_reply_to":"ff0f0b1f_27bbab0e","updated":"2017-05-22 11:08:50.000000000","message":"we are no longer using fields from build_request_obj to build instance_bdms and instance_tags, so I passed tags here like bdms.","commit_id":"f3906e8859a6c570df7576232ff92cfa98731f36"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"669686e361abf8e39b898ac5d5def46ac653f638","unresolved":false,"context_lines":[{"line_number":856,"context_line":"        id field in case this is called for multiple instances."},{"line_number":857,"context_line":"        \"\"\""},{"line_number":858,"context_line":"        instance_tags \u003d copy.deepcopy(tags)"},{"line_number":859,"context_line":"        if tags:"},{"line_number":860,"context_line":"            if cell:"},{"line_number":861,"context_line":"                for tag in tags:"},{"line_number":862,"context_line":"                    with obj_target_cell(tag, cell):"},{"line_number":863,"context_line":"                        tag.create()"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_6b74b7fe","line":860,"range":{"start_line":859,"start_character":8,"end_line":860,"end_character":20},"updated":"2017-06-02 08:06:32.000000000","message":"nit: it can be \nif tags and cell?","commit_id":"b0134e6d4e6990564657dfb5df4b4f56e4732b2d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ee267369bf165e1d238dbe74e0ddeb1461f697c4","unresolved":false,"context_lines":[{"line_number":856,"context_line":"        id field in case this is called for multiple instances."},{"line_number":857,"context_line":"        \"\"\""},{"line_number":858,"context_line":"        instance_tags \u003d copy.deepcopy(tags)"},{"line_number":859,"context_line":"        if tags:"},{"line_number":860,"context_line":"            if cell:"},{"line_number":861,"context_line":"                for tag in tags:"},{"line_number":862,"context_line":"                    with obj_target_cell(tag, cell):"},{"line_number":863,"context_line":"                        tag.create()"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_4617aa46","line":860,"range":{"start_line":859,"start_character":8,"end_line":860,"end_character":20},"in_reply_to":"df140735_6b74b7fe","updated":"2017-06-02 08:17:53.000000000","message":"Hmm, thanks, and actually this is not what I want. I will fix this","commit_id":"b0134e6d4e6990564657dfb5df4b4f56e4732b2d"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"669686e361abf8e39b898ac5d5def46ac653f638","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"                    host\u003dhost[\u0027host\u0027], node\u003dhost[\u0027nodename\u0027],"},{"line_number":1037,"context_line":"                    limits\u003dhost[\u0027limits\u0027])"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"    def _delete_build_request(self, context, build_request, instance, cell,"},{"line_number":1040,"context_line":"                              instance_bdms, instance_tags):"},{"line_number":1041,"context_line":"        \"\"\"Delete a build request after creating the instance in the cell."},{"line_number":1042,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_4b4a13ac","line":1039,"range":{"start_line":1039,"start_character":36,"end_line":1039,"end_character":43},"updated":"2017-06-02 08:06:32.000000000","message":"nit: missed this in param list below","commit_id":"b0134e6d4e6990564657dfb5df4b4f56e4732b2d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ee267369bf165e1d238dbe74e0ddeb1461f697c4","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"                    host\u003dhost[\u0027host\u0027], node\u003dhost[\u0027nodename\u0027],"},{"line_number":1037,"context_line":"                    limits\u003dhost[\u0027limits\u0027])"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"    def _delete_build_request(self, context, build_request, instance, cell,"},{"line_number":1040,"context_line":"                              instance_bdms, instance_tags):"},{"line_number":1041,"context_line":"        \"\"\"Delete a build request after creating the instance in the cell."},{"line_number":1042,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_a642063d","line":1039,"range":{"start_line":1039,"start_character":36,"end_line":1039,"end_character":43},"in_reply_to":"df140735_4b4a13ac","updated":"2017-06-02 08:17:53.000000000","message":"Done","commit_id":"b0134e6d4e6990564657dfb5df4b4f56e4732b2d"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"669686e361abf8e39b898ac5d5def46ac653f638","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"                        bdm.destroy()"},{"line_number":1084,"context_line":"                    except exception.ObjectActionError:"},{"line_number":1085,"context_line":"                        pass"},{"line_number":1086,"context_line":"            with try_target_cell(context, cell) as target_ctxt:"},{"line_number":1087,"context_line":"                try:"},{"line_number":1088,"context_line":"                    objects.TagList.destroy(target_ctxt, instance.uuid)"},{"line_number":1089,"context_line":"                except (exception.InstanceNotFound,"},{"line_number":1090,"context_line":"                        exception.InstanceTagNotFound):"},{"line_number":1091,"context_line":"                    pass"},{"line_number":1092,"context_line":"            return False"},{"line_number":1093,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_2b4ebf96","line":1091,"range":{"start_line":1086,"start_character":11,"end_line":1091,"end_character":24},"updated":"2017-06-02 08:06:32.000000000","message":"not fully understand but will line 1069 makes Instance not able to be found?","commit_id":"b0134e6d4e6990564657dfb5df4b4f56e4732b2d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ee267369bf165e1d238dbe74e0ddeb1461f697c4","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"                        bdm.destroy()"},{"line_number":1084,"context_line":"                    except exception.ObjectActionError:"},{"line_number":1085,"context_line":"                        pass"},{"line_number":1086,"context_line":"            with try_target_cell(context, cell) as target_ctxt:"},{"line_number":1087,"context_line":"                try:"},{"line_number":1088,"context_line":"                    objects.TagList.destroy(target_ctxt, instance.uuid)"},{"line_number":1089,"context_line":"                except (exception.InstanceNotFound,"},{"line_number":1090,"context_line":"                        exception.InstanceTagNotFound):"},{"line_number":1091,"context_line":"                    pass"},{"line_number":1092,"context_line":"            return False"},{"line_number":1093,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_06dad24a","line":1091,"range":{"start_line":1086,"start_character":11,"end_line":1091,"end_character":24},"in_reply_to":"df140735_2b4ebf96","updated":"2017-06-02 08:17:53.000000000","message":"yeah, and when delete tags, it checks like this:\nhttp://git.openstack.org/cgit/openstack/nova/tree/nova/db/sqlalchemy/api.py#n6954","commit_id":"b0134e6d4e6990564657dfb5df4b4f56e4732b2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    # NOTE(danms): This is never cell-targeted because it is only used for"},{"line_number":530,"context_line":"    # cellsv1 (which does not target cells directly) and n-cpu reschedules"},{"line_number":531,"context_line":"    # (which go to the cell conductor and thus are always cell-specific)."},{"line_number":532,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":533,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":534,"context_line":"            security_groups, block_device_mapping\u003dNone, legacy_bdm\u003dTrue,"},{"line_number":535,"context_line":"            tags\u003dNone):"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_7f501c5e","line":532,"range":{"start_line":532,"start_character":8,"end_line":532,"end_character":23},"updated":"2017-06-13 22:31:39.000000000","message":"Hmm, I\u0027m not sure how much we want to handle this here. For server create, this is only called from nova-api for cells v1. Otherwise it\u0027s called from nova-compute to nova-conductor during a reschedule when the build fails on a compute host that the scheduler picked, for whatever reason.\n\nWe definitely don\u0027t need this in the latter case, since by that time the tags have already been created.\n\nIn the former case (cells v1), I think we can say that we\u0027re not going to add API feature parity to cells v1 for tagging servers on create:\n\nhttps://docs.openstack.org/developer/nova/cells.html#status\n\n\"Cells v1 is in feature freeze. This means no new feature proposals for cells v1 will be accepted by the core team, which includes but is not limited to API parity\"","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    # NOTE(danms): This is never cell-targeted because it is only used for"},{"line_number":530,"context_line":"    # cellsv1 (which does not target cells directly) and n-cpu reschedules"},{"line_number":531,"context_line":"    # (which go to the cell conductor and thus are always cell-specific)."},{"line_number":532,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":533,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":534,"context_line":"            security_groups, block_device_mapping\u003dNone, legacy_bdm\u003dTrue,"},{"line_number":535,"context_line":"            tags\u003dNone):"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_337adb87","line":532,"range":{"start_line":532,"start_character":8,"end_line":532,"end_character":23},"in_reply_to":"7f231b9d_7f501c5e","updated":"2017-06-14 01:30:19.000000000","message":"OK, I will remove this","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":856,"context_line":"                bdm.update_or_create()"},{"line_number":857,"context_line":"        return instance_block_device_mapping"},{"line_number":858,"context_line":""},{"line_number":859,"context_line":"    def _create_tags(self, tags, cell\u003dNone):"},{"line_number":860,"context_line":"        \"\"\"Create the Tags objects in the db."},{"line_number":861,"context_line":""},{"line_number":862,"context_line":"        This method makes a copy of the list in order to avoid using the same"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_ffd1ccce","line":859,"range":{"start_line":859,"start_character":33,"end_line":859,"end_character":42},"updated":"2017-06-13 22:31:39.000000000","message":"This shouldn\u0027t be optional - you only have it as optional because of the cells v1 thing above, which I think we should remove.","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":856,"context_line":"                bdm.update_or_create()"},{"line_number":857,"context_line":"        return instance_block_device_mapping"},{"line_number":858,"context_line":""},{"line_number":859,"context_line":"    def _create_tags(self, tags, cell\u003dNone):"},{"line_number":860,"context_line":"        \"\"\"Create the Tags objects in the db."},{"line_number":861,"context_line":""},{"line_number":862,"context_line":"        This method makes a copy of the list in order to avoid using the same"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_13711faa","line":859,"range":{"start_line":859,"start_character":33,"end_line":859,"end_character":42},"in_reply_to":"7f231b9d_ffd1ccce","updated":"2017-06-14 01:30:19.000000000","message":"Done","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":862,"context_line":"        This method makes a copy of the list in order to avoid using the same"},{"line_number":863,"context_line":"        id field in case this is called for multiple instances."},{"line_number":864,"context_line":"        \"\"\""},{"line_number":865,"context_line":"        instance_tags \u003d copy.deepcopy(tags)"},{"line_number":866,"context_line":"        if tags:"},{"line_number":867,"context_line":"            for tag in tags:"},{"line_number":868,"context_line":"                if cell:"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_9fd658c3","line":865,"updated":"2017-06-13 22:31:39.000000000","message":"Move this within the \"if tags\" block so we don\u0027t copy if there is nothing to copy.","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":862,"context_line":"        This method makes a copy of the list in order to avoid using the same"},{"line_number":863,"context_line":"        id field in case this is called for multiple instances."},{"line_number":864,"context_line":"        \"\"\""},{"line_number":865,"context_line":"        instance_tags \u003d copy.deepcopy(tags)"},{"line_number":866,"context_line":"        if tags:"},{"line_number":867,"context_line":"            for tag in tags:"},{"line_number":868,"context_line":"                if cell:"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_1358ff2f","line":865,"in_reply_to":"7f231b9d_9fd658c3","updated":"2017-06-14 01:30:19.000000000","message":"Done","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                    want_result\u003dFalse)"},{"line_number":1012,"context_line":"                instance_bdms \u003d self._create_block_device_mapping("},{"line_number":1013,"context_line":"                    cell, instance.flavor, instance.uuid, block_device_mapping)"},{"line_number":1014,"context_line":"                inst_tags \u003d tags.pop(0) if tags else None"},{"line_number":1015,"context_line":"                instance_tags \u003d self._create_tags(inst_tags, cell)"},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"            # Update mapping for instance. Normally this check is guarded by"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_1ff4885a","line":1014,"range":{"start_line":1014,"start_character":28,"end_line":1014,"end_character":39},"updated":"2017-06-13 22:31:39.000000000","message":"Why is this here? Wouldn\u0027t we want to apply the same tags to all build requests (instances)?","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"37dfeb5ada9fc0a9f63c10b1aaaa0ef5a426ec73","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                    want_result\u003dFalse)"},{"line_number":1012,"context_line":"                instance_bdms \u003d self._create_block_device_mapping("},{"line_number":1013,"context_line":"                    cell, instance.flavor, instance.uuid, block_device_mapping)"},{"line_number":1014,"context_line":"                inst_tags \u003d tags.pop(0) if tags else None"},{"line_number":1015,"context_line":"                instance_tags \u003d self._create_tags(inst_tags, cell)"},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"            # Update mapping for instance. Normally this check is guarded by"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_5361d7a8","line":1014,"range":{"start_line":1014,"start_character":28,"end_line":1014,"end_character":39},"in_reply_to":"7f231b9d_13235faa","updated":"2017-06-14 01:36:19.000000000","message":"Something has to be wrong with that. BlockDeviceMapping has an instance_uuid field also, and we can do bulk create of instances with BDMs, but we don\u0027t pass those as a list of BlockDeviceMappingList.","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                    want_result\u003dFalse)"},{"line_number":1012,"context_line":"                instance_bdms \u003d self._create_block_device_mapping("},{"line_number":1013,"context_line":"                    cell, instance.flavor, instance.uuid, block_device_mapping)"},{"line_number":1014,"context_line":"                inst_tags \u003d tags.pop(0) if tags else None"},{"line_number":1015,"context_line":"                instance_tags \u003d self._create_tags(inst_tags, cell)"},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"            # Update mapping for instance. Normally this check is guarded by"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_13235faa","line":1014,"range":{"start_line":1014,"start_character":28,"end_line":1014,"end_character":39},"in_reply_to":"7f231b9d_1ff4885a","updated":"2017-06-14 01:30:19.000000000","message":"I\u0027m doing this because of bulk boot, as I will init TagList obj in https://review.openstack.org/#/c/469800/8/nova/compute/api.py@1036 and Each TagList/Tag obj contains different instance uuid. So I then put them into tags\u003d[TagList] together. And here we creating instances one by one, so take tags one by one.","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"        is already deleted by the time we try to delete it."},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        :param context: the context of the request being handled"},{"line_number":1060,"context_line":"        :type context: nova.context.RequestContext\u0027"},{"line_number":1061,"context_line":"        :param build_request: the build request to delete"},{"line_number":1062,"context_line":"        :type build_request: nova.objects.BuildRequest"},{"line_number":1063,"context_line":"        :param instance: the instance created from the build_request"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_7ffedc37","line":1060,"range":{"start_line":1060,"start_character":50,"end_line":1060,"end_character":51},"updated":"2017-06-13 22:31:39.000000000","message":"remove the \u0027","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"        is already deleted by the time we try to delete it."},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        :param context: the context of the request being handled"},{"line_number":1060,"context_line":"        :type context: nova.context.RequestContext\u0027"},{"line_number":1061,"context_line":"        :param build_request: the build request to delete"},{"line_number":1062,"context_line":"        :type build_request: nova.objects.BuildRequest"},{"line_number":1063,"context_line":"        :param instance: the instance created from the build_request"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_f32583ac","line":1060,"range":{"start_line":1060,"start_character":50,"end_line":1060,"end_character":51},"in_reply_to":"7f231b9d_7ffedc37","updated":"2017-06-14 01:30:19.000000000","message":"Done","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"                try:"},{"line_number":1103,"context_line":"                    objects.TagList.destroy(target_ctxt, instance.uuid)"},{"line_number":1104,"context_line":"                except (exception.InstanceNotFound,"},{"line_number":1105,"context_line":"                        exception.InstanceTagNotFound):"},{"line_number":1106,"context_line":"                    pass"},{"line_number":1107,"context_line":"            return False"},{"line_number":1108,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_9f8418b3","line":1105,"range":{"start_line":1105,"start_character":34,"end_line":1105,"end_character":53},"updated":"2017-06-13 22:31:39.000000000","message":"How do we hit this? It\u0027s not raised up from instance_tag_delete_all in the DB API from what I can tell.","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"                try:"},{"line_number":1103,"context_line":"                    objects.TagList.destroy(target_ctxt, instance.uuid)"},{"line_number":1104,"context_line":"                except (exception.InstanceNotFound,"},{"line_number":1105,"context_line":"                        exception.InstanceTagNotFound):"},{"line_number":1106,"context_line":"                    pass"},{"line_number":1107,"context_line":"            return False"},{"line_number":1108,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_534e776f","line":1105,"range":{"start_line":1105,"start_character":34,"end_line":1105,"end_character":53},"in_reply_to":"7f231b9d_9f8418b3","updated":"2017-06-14 01:30:19.000000000","message":"I must have wrote this for instance_tag_delete","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bd399def5689212572c1a66378961562ccb58762","unresolved":false,"context_lines":[{"line_number":847,"context_line":"            for tag in instance_tags:"},{"line_number":848,"context_line":"                tag.resource_id \u003d instance_uuid"},{"line_number":849,"context_line":"                with obj_target_cell(tag, cell):"},{"line_number":850,"context_line":"                        tag.create()"},{"line_number":851,"context_line":"        return instance_tags if tags else None"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _bury_in_cell0(self, context, request_spec, exc,"}],"source_content_type":"text/x-python","patch_set":28,"id":"7f231b9d_7d7ebdaf","line":850,"updated":"2017-06-15 00:51:57.000000000","message":"Fix the alignment please.","commit_id":"ece14e8ff569220129d39f5077ce353279faa864"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ea5e7c3a302bfa4a9a6970b309fc8f494da62d8f","unresolved":false,"context_lines":[{"line_number":847,"context_line":"            for tag in instance_tags:"},{"line_number":848,"context_line":"                tag.resource_id \u003d instance_uuid"},{"line_number":849,"context_line":"                with obj_target_cell(tag, cell):"},{"line_number":850,"context_line":"                        tag.create()"},{"line_number":851,"context_line":"        return instance_tags if tags else None"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _bury_in_cell0(self, context, request_spec, exc,"}],"source_content_type":"text/x-python","patch_set":28,"id":"7f231b9d_88cef57f","line":850,"in_reply_to":"7f231b9d_7d7ebdaf","updated":"2017-06-15 01:21:55.000000000","message":"Done","commit_id":"ece14e8ff569220129d39f5077ce353279faa864"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bd399def5689212572c1a66378961562ccb58762","unresolved":false,"context_lines":[{"line_number":848,"context_line":"                tag.resource_id \u003d instance_uuid"},{"line_number":849,"context_line":"                with obj_target_cell(tag, cell):"},{"line_number":850,"context_line":"                        tag.create()"},{"line_number":851,"context_line":"        return instance_tags if tags else None"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _bury_in_cell0(self, context, request_spec, exc,"},{"line_number":854,"context_line":"                       build_requests\u003dNone, instances\u003dNone):"}],"source_content_type":"text/x-python","patch_set":28,"id":"7f231b9d_fd43ed6a","line":851,"range":{"start_line":851,"start_character":8,"end_line":851,"end_character":46},"updated":"2017-06-15 00:51:57.000000000","message":"This is weird. If tags is [] or None, then instance_tags won\u0027t be set and then we don\u0027t have the variable in scope at this point and it\u0027s going to be a NameError. So we\u0027re missing a test where tags aren\u0027t provided.","commit_id":"ece14e8ff569220129d39f5077ce353279faa864"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ea5e7c3a302bfa4a9a6970b309fc8f494da62d8f","unresolved":false,"context_lines":[{"line_number":848,"context_line":"                tag.resource_id \u003d instance_uuid"},{"line_number":849,"context_line":"                with obj_target_cell(tag, cell):"},{"line_number":850,"context_line":"                        tag.create()"},{"line_number":851,"context_line":"        return instance_tags if tags else None"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _bury_in_cell0(self, context, request_spec, exc,"},{"line_number":854,"context_line":"                       build_requests\u003dNone, instances\u003dNone):"}],"source_content_type":"text/x-python","patch_set":28,"id":"7f231b9d_28912148","line":851,"range":{"start_line":851,"start_character":8,"end_line":851,"end_character":46},"in_reply_to":"7f231b9d_fd43ed6a","updated":"2017-06-15 01:21:55.000000000","message":"Ah, my bad","commit_id":"ece14e8ff569220129d39f5077ce353279faa864"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"515ee5c60a6ea886fda51d25c30817d8f14216bf","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"                        pass"},{"line_number":1078,"context_line":"            with try_target_cell(context, cell) as target_ctxt:"},{"line_number":1079,"context_line":"                try:"},{"line_number":1080,"context_line":"                    objects.TagList.destroy(target_ctxt, instance.uuid)"},{"line_number":1081,"context_line":"                except exception.InstanceNotFound:"},{"line_number":1082,"context_line":"                    pass"},{"line_number":1083,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f1d235d_b040f6a6","line":1080,"updated":"2017-07-05 03:31:28.000000000","message":"we should have a testcase for this.","commit_id":"3dfbb3b52823c779ede65cf282d8745a2ac8ed18"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f79b8d5fd8e7616686e417061bf5dd018e52a0cc","unresolved":false,"context_lines":[{"line_number":835,"context_line":"                bdm.update_or_create()"},{"line_number":836,"context_line":"        return instance_block_device_mapping"},{"line_number":837,"context_line":""},{"line_number":838,"context_line":"    def _create_tags(self, instance_uuid, tags, cell):"},{"line_number":839,"context_line":"        \"\"\"Create the Tags objects in the db."},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        This method makes a copy of the list in order to avoid using the same"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_29d907f2","line":838,"range":{"start_line":838,"start_character":27,"end_line":838,"end_character":52},"updated":"2017-07-05 18:42:38.000000000","message":"nit: it would be nice to be consistent with _create_block_device_mapping above and have the args as:\n\n(self, cell, instance_uuid, tags)\n\nBut we could change that later.","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d18071433e3ec7c0ac68e39ca63287cdce5d4966","unresolved":false,"context_lines":[{"line_number":835,"context_line":"                bdm.update_or_create()"},{"line_number":836,"context_line":"        return instance_block_device_mapping"},{"line_number":837,"context_line":""},{"line_number":838,"context_line":"    def _create_tags(self, instance_uuid, tags, cell):"},{"line_number":839,"context_line":"        \"\"\"Create the Tags objects in the db."},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        This method makes a copy of the list in order to avoid using the same"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_067ced1c","line":838,"range":{"start_line":838,"start_character":27,"end_line":838,"end_character":52},"in_reply_to":"3f1d235d_29d907f2","updated":"2017-07-06 01:53:12.000000000","message":"Done","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f79b8d5fd8e7616686e417061bf5dd018e52a0cc","unresolved":false,"context_lines":[{"line_number":989,"context_line":"                instance_bdms \u003d self._create_block_device_mapping("},{"line_number":990,"context_line":"                    cell, instance.flavor, instance.uuid, block_device_mapping)"},{"line_number":991,"context_line":"                instance_tags \u003d self._create_tags(instance.uuid,"},{"line_number":992,"context_line":"                                                  tags, cell)"},{"line_number":993,"context_line":""},{"line_number":994,"context_line":"            # Update mapping for instance. Normally this check is guarded by"},{"line_number":995,"context_line":"            # a try/except but if we\u0027re here we know that a newer nova-api"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_295ea743","line":992,"range":{"start_line":992,"start_character":50,"end_line":992,"end_character":54},"updated":"2017-07-05 18:42:38.000000000","message":"Couldn\u0027t we simply do:\n\nobjects.TagList.create(cctxt, instance.uuid, tags)\n\n?\n\nI realize that _create_tags is copied from _create_block_device_mapping but that\u0027s because BlockDeviceMappingList doesn\u0027t have something like TagList.create().\n\nIt seems like it would be easier (and faster) to just do this all at once using TagList.create().\n\nThat\u0027s also why we use TagList.destroy down below, since it\u0027s atomic and cleaner to call rather than manually looping over the tags to destroy them.","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d18071433e3ec7c0ac68e39ca63287cdce5d4966","unresolved":false,"context_lines":[{"line_number":989,"context_line":"                instance_bdms \u003d self._create_block_device_mapping("},{"line_number":990,"context_line":"                    cell, instance.flavor, instance.uuid, block_device_mapping)"},{"line_number":991,"context_line":"                instance_tags \u003d self._create_tags(instance.uuid,"},{"line_number":992,"context_line":"                                                  tags, cell)"},{"line_number":993,"context_line":""},{"line_number":994,"context_line":"            # Update mapping for instance. Normally this check is guarded by"},{"line_number":995,"context_line":"            # a try/except but if we\u0027re here we know that a newer nova-api"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_0c2e4f91","line":992,"range":{"start_line":992,"start_character":50,"end_line":992,"end_character":54},"in_reply_to":"3f1d235d_295ea743","updated":"2017-07-06 01:53:12.000000000","message":"Done","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"430e4c0950a073b97ac72f9448a721c10c864d58","unresolved":false,"context_lines":[{"line_number":1075,"context_line":"                        bdm.destroy()"},{"line_number":1076,"context_line":"                    except exception.ObjectActionError:"},{"line_number":1077,"context_line":"                        pass"},{"line_number":1078,"context_line":"            with try_target_cell(context, cell) as target_ctxt:"},{"line_number":1079,"context_line":"                try:"},{"line_number":1080,"context_line":"                    objects.TagList.destroy(target_ctxt, instance.uuid)"},{"line_number":1081,"context_line":"                except exception.InstanceNotFound:"},{"line_number":1082,"context_line":"                    pass"},{"line_number":1083,"context_line":"            return False"},{"line_number":1084,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_94326e5d","line":1082,"range":{"start_line":1078,"start_character":12,"end_line":1082,"end_character":24},"updated":"2017-07-05 18:45:07.000000000","message":"Seems we should put this all within a conditional block like this:\n\nif instance_tags:\n   with try_target_cell....\n\nBecause if there are no tags provided during create, then we already know we don\u0027t have anything to cleanup on delete and can save ourselves the DB query.","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d18071433e3ec7c0ac68e39ca63287cdce5d4966","unresolved":false,"context_lines":[{"line_number":1075,"context_line":"                        bdm.destroy()"},{"line_number":1076,"context_line":"                    except exception.ObjectActionError:"},{"line_number":1077,"context_line":"                        pass"},{"line_number":1078,"context_line":"            with try_target_cell(context, cell) as target_ctxt:"},{"line_number":1079,"context_line":"                try:"},{"line_number":1080,"context_line":"                    objects.TagList.destroy(target_ctxt, instance.uuid)"},{"line_number":1081,"context_line":"                except exception.InstanceNotFound:"},{"line_number":1082,"context_line":"                    pass"},{"line_number":1083,"context_line":"            return False"},{"line_number":1084,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_cc23b7a6","line":1082,"range":{"start_line":1078,"start_character":12,"end_line":1082,"end_character":24},"in_reply_to":"3f1d235d_94326e5d","updated":"2017-07-06 01:53:12.000000000","message":"Done","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d5df3615fad662ab4d41094a44ea2a0ceb885f5b","unresolved":false,"context_lines":[{"line_number":838,"context_line":"    def _create_tags(self, context, instance_uuid, tags):"},{"line_number":839,"context_line":"        \"\"\"Create the Tags objects in the db."},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        This method makes a copy of the list in order to avoid using the same"},{"line_number":842,"context_line":"        id field in case this is called for multiple instances."},{"line_number":843,"context_line":"        \"\"\""},{"line_number":844,"context_line":"        if tags:"},{"line_number":845,"context_line":"            tag_list \u003d [tag.tag for tag in tags]"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_9cd49749","line":842,"range":{"start_line":841,"start_character":8,"end_line":842,"end_character":63},"updated":"2017-07-07 06:24:55.000000000","message":"This isn\u0027t really true anymore, at least not explicitly - we don\u0027t create a copy of the list.","commit_id":"7be09feb1217a652c6b6769d7f2d65644eb021c0"}],"nova/conductor/rpcapi.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae8fca1db5ff9cd2defda38d49d163403da352b8","unresolved":false,"context_lines":[{"line_number":369,"context_line":"              \u0027block_device_mapping\u0027: block_device_mapping,"},{"line_number":370,"context_line":"              \u0027tags\u0027: tags}"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":373,"context_line":"            version \u003d \u00271.16\u0027"},{"line_number":374,"context_line":"            del kw[\u0027tags\u0027]"},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_66aa3f86","line":372,"updated":"2017-05-04 01:56:26.000000000","message":"We should probably have a unit test for this case.","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0f14ef292c1501061e715dfad060edcc073d3ff7","unresolved":false,"context_lines":[{"line_number":369,"context_line":"              \u0027block_device_mapping\u0027: block_device_mapping,"},{"line_number":370,"context_line":"              \u0027tags\u0027: tags}"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":373,"context_line":"            version \u003d \u00271.16\u0027"},{"line_number":374,"context_line":"            del kw[\u0027tags\u0027]"},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_d949f460","line":372,"in_reply_to":"3f044301_66aa3f86","updated":"2017-05-04 02:47:17.000000000","message":"Done","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8dd2996de8f470befc43e0812756d1445c93d655","unresolved":false,"context_lines":[{"line_number":375,"context_line":"              \u0027block_device_mapping\u0027: block_device_mapping,"},{"line_number":376,"context_line":"              \u0027tags\u0027: tags}"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":379,"context_line":"            version \u003d \u00271.16\u0027"},{"line_number":380,"context_line":"            del kw[\u0027tags\u0027]"},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_f2895726","line":378,"updated":"2017-05-18 01:27:16.000000000","message":"Matt Riedemann May 4 9:56 AM\nWe should probably have a unit test for this case.","commit_id":"b78da888fbb67feb14f3512de4a2280eb53e41e2"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a7db8d1429c81ab68985aa3d0fff9505e4bea7bf","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":379,"context_line":"            version \u003d \u00271.16\u0027"},{"line_number":380,"context_line":"            del kw[\u0027tags\u0027]"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":383,"context_line":"        cctxt.cast(context, \u0027schedule_and_build_instances\u0027, **kw)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_f51c78c2","line":380,"range":{"start_line":380,"start_character":12,"end_line":380,"end_character":26},"updated":"2017-05-31 03:35:12.000000000","message":"I saw that you used kw.pop(\u0027tags\u0027) in above method","commit_id":"a08f35e483c48819a0347853b563eac8d5f8bb3f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"642c359a01720505110a4f3929355b073ec87468","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":379,"context_line":"            version \u003d \u00271.16\u0027"},{"line_number":380,"context_line":"            del kw[\u0027tags\u0027]"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":383,"context_line":"        cctxt.cast(context, \u0027schedule_and_build_instances\u0027, **kw)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_5556845e","line":380,"range":{"start_line":380,"start_character":12,"end_line":380,"end_character":26},"in_reply_to":"df140735_f51c78c2","updated":"2017-05-31 03:39:13.000000000","message":"Thanks I will use del for consistancy","commit_id":"a08f35e483c48819a0347853b563eac8d5f8bb3f"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"3b5ba6d507b9043b2cf9506204817311a1cbcf7a","unresolved":false,"context_lines":[{"line_number":326,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":327,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":328,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue,"},{"line_number":329,"context_line":"            tags\u003d[]):"},{"line_number":330,"context_line":"        image_p \u003d jsonutils.to_primitive(image)"},{"line_number":331,"context_line":"        version \u003d \u00271.17\u0027"},{"line_number":332,"context_line":"        kw \u003d {\u0027instances\u0027: instances, \u0027image\u0027: image_p,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_462045b1","line":329,"range":{"start_line":329,"start_character":12,"end_line":329,"end_character":19},"updated":"2017-06-07 09:47:37.000000000","message":"this should be \u003d None\n\nthen \nif tags is None:\n    tags \u003d []\n?","commit_id":"10cac285f9a94b7b81b9b5a3822964f91c9c3c70"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a73f883480d542c948bd587631463457221d0e61","unresolved":false,"context_lines":[{"line_number":326,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":327,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":328,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue,"},{"line_number":329,"context_line":"            tags\u003d[]):"},{"line_number":330,"context_line":"        image_p \u003d jsonutils.to_primitive(image)"},{"line_number":331,"context_line":"        version \u003d \u00271.17\u0027"},{"line_number":332,"context_line":"        kw \u003d {\u0027instances\u0027: instances, \u0027image\u0027: image_p,"}],"source_content_type":"text/x-python","patch_set":24,"id":"bf091321_f8d82680","line":329,"range":{"start_line":329,"start_character":12,"end_line":329,"end_character":19},"in_reply_to":"df140735_462045b1","updated":"2017-06-08 01:59:22.000000000","message":"I guess so","commit_id":"10cac285f9a94b7b81b9b5a3822964f91c9c3c70"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":324,"context_line":"        return cctxt.call(context, \u0027migrate_server\u0027, **kw)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":327,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":328,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue,"},{"line_number":329,"context_line":"            tags\u003dNone):"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_7f813c8f","line":326,"range":{"start_line":326,"start_character":8,"end_line":326,"end_character":23},"updated":"2017-06-13 22:31:39.000000000","message":"as noted in the conductor manager we don\u0027t want this for cells v1 or reschedules from computes","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":324,"context_line":"        return cctxt.call(context, \u0027migrate_server\u0027, **kw)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":327,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":328,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue,"},{"line_number":329,"context_line":"            tags\u003dNone):"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_d36a87b1","line":326,"range":{"start_line":326,"start_character":8,"end_line":326,"end_character":23},"in_reply_to":"7f231b9d_7f813c8f","updated":"2017-06-14 01:30:19.000000000","message":"Done","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f79b8d5fd8e7616686e417061bf5dd018e52a0cc","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":324,"context_line":"        return cctxt.call(context, \u0027migrate_server\u0027, **kw)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":327,"context_line":"                        admin_password, injected_files, requested_networks,"},{"line_number":328,"context_line":"                        security_groups, block_device_mapping,"},{"line_number":329,"context_line":"                        legacy_bdm\u003dTrue):"},{"line_number":330,"context_line":"        image_p \u003d jsonutils.to_primitive(image)"},{"line_number":331,"context_line":"        version \u003d \u00271.10\u0027"},{"line_number":332,"context_line":"        if not self.client.can_send_version(version):"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_6916df57","line":329,"range":{"start_line":326,"start_character":4,"end_line":329,"end_character":41},"updated":"2017-07-05 18:42:38.000000000","message":"This is an unrelated change, we should undo this since it clutters up the review.","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d18071433e3ec7c0ac68e39ca63287cdce5d4966","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":324,"context_line":"        return cctxt.call(context, \u0027migrate_server\u0027, **kw)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":327,"context_line":"                        admin_password, injected_files, requested_networks,"},{"line_number":328,"context_line":"                        security_groups, block_device_mapping,"},{"line_number":329,"context_line":"                        legacy_bdm\u003dTrue):"},{"line_number":330,"context_line":"        image_p \u003d jsonutils.to_primitive(image)"},{"line_number":331,"context_line":"        version \u003d \u00271.10\u0027"},{"line_number":332,"context_line":"        if not self.client.can_send_version(version):"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_8c393fd8","line":329,"range":{"start_line":326,"start_character":4,"end_line":329,"end_character":41},"in_reply_to":"3f1d235d_6916df57","updated":"2017-07-06 01:53:12.000000000","message":"Done","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f79b8d5fd8e7616686e417061bf5dd018e52a0cc","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                     block_device_mapping,"},{"line_number":362,"context_line":"                                     tags\u003dNone):"},{"line_number":363,"context_line":"        version \u003d \u00271.17\u0027"},{"line_number":364,"context_line":"        if not tags:"},{"line_number":365,"context_line":"            tags \u003d []"},{"line_number":366,"context_line":"        kw \u003d {\u0027build_requests\u0027: build_requests,"},{"line_number":367,"context_line":"              \u0027request_specs\u0027: request_specs,"},{"line_number":368,"context_line":"              \u0027image\u0027: jsonutils.to_primitive(image),"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_f4b9a214","line":365,"range":{"start_line":364,"start_character":8,"end_line":365,"end_character":21},"updated":"2017-07-05 18:42:38.000000000","message":"Why do we need this conversion if tags is None (or [] already)? schedule_and_build_instances in the conductor manager handles None properly.","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d18071433e3ec7c0ac68e39ca63287cdce5d4966","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                     block_device_mapping,"},{"line_number":362,"context_line":"                                     tags\u003dNone):"},{"line_number":363,"context_line":"        version \u003d \u00271.17\u0027"},{"line_number":364,"context_line":"        if not tags:"},{"line_number":365,"context_line":"            tags \u003d []"},{"line_number":366,"context_line":"        kw \u003d {\u0027build_requests\u0027: build_requests,"},{"line_number":367,"context_line":"              \u0027request_specs\u0027: request_specs,"},{"line_number":368,"context_line":"              \u0027image\u0027: jsonutils.to_primitive(image),"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_2c50eb0a","line":365,"range":{"start_line":364,"start_character":8,"end_line":365,"end_character":21},"in_reply_to":"3f1d235d_f4b9a214","updated":"2017-07-06 01:53:12.000000000","message":"Done","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"}],"nova/tests/unit/conductor/test_conductor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae8fca1db5ff9cd2defda38d49d163403da352b8","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"            tag\u003d\u0027\u0027))"},{"line_number":1437,"context_line":"        params[\u0027block_device_mapping\u0027] \u003d objects.BlockDeviceMappingList("},{"line_number":1438,"context_line":"            objects\u003d[bdm])"},{"line_number":1439,"context_line":"        tag \u003d objects.Tag(self.ctxt, resource_id\u003dbuild_request.instance_uuid,"},{"line_number":1440,"context_line":"                          tag\u003d\u0027tag1\u0027)"},{"line_number":1441,"context_line":"        params[\u0027tags\u0027] \u003d objects.TagList(objects\u003d[tag])"},{"line_number":1442,"context_line":"        self.params \u003d params"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_06913b53","line":1439,"updated":"2017-05-04 01:56:26.000000000","message":"You\u0027re going to need more testing than this I think since this doesn\u0027t assert anything, like that we cleanup tags when deleting the build request, or that we create the tags in the cell like the BDMs.","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0f14ef292c1501061e715dfad060edcc073d3ff7","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"            tag\u003d\u0027\u0027))"},{"line_number":1437,"context_line":"        params[\u0027block_device_mapping\u0027] \u003d objects.BlockDeviceMappingList("},{"line_number":1438,"context_line":"            objects\u003d[bdm])"},{"line_number":1439,"context_line":"        tag \u003d objects.Tag(self.ctxt, resource_id\u003dbuild_request.instance_uuid,"},{"line_number":1440,"context_line":"                          tag\u003d\u0027tag1\u0027)"},{"line_number":1441,"context_line":"        params[\u0027tags\u0027] \u003d objects.TagList(objects\u003d[tag])"},{"line_number":1442,"context_line":"        self.params \u003d params"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_9975ac9b","line":1439,"in_reply_to":"3f044301_06913b53","updated":"2017-05-04 02:47:17.000000000","message":"Done","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8dd2996de8f470befc43e0812756d1445c93d655","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"            tag\u003d\u0027\u0027))"},{"line_number":1437,"context_line":"        params[\u0027block_device_mapping\u0027] \u003d objects.BlockDeviceMappingList("},{"line_number":1438,"context_line":"            objects\u003d[bdm])"},{"line_number":1439,"context_line":"        tag \u003d objects.Tag(self.ctxt, resource_id\u003dbuild_request.instance_uuid,"},{"line_number":1440,"context_line":"                          tag\u003d\u0027tag1\u0027)"},{"line_number":1441,"context_line":"        params[\u0027tags\u0027] \u003d objects.TagList(objects\u003d[tag])"},{"line_number":1442,"context_line":"        self.params \u003d params"},{"line_number":1443,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_527a4324","line":1440,"range":{"start_line":1439,"start_character":8,"end_line":1440,"end_character":37},"updated":"2017-05-18 01:27:16.000000000","message":"Matt Riedemann May 4 9:56 AM\n\nYou\u0027re going to need more testing than this I think since this doesn\u0027t assert anything, like that we cleanup tags when deleting the build request, or that we create the tags in the cell like the BDMs.","commit_id":"b78da888fbb67feb14f3512de4a2280eb53e41e2"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a7db8d1429c81ab68985aa3d0fff9505e4bea7bf","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"        @mock.patch.object(self.conductor.client, \u0027can_send_version\u0027,"},{"line_number":2489,"context_line":"                           return_value\u003dTrue)"},{"line_number":2490,"context_line":"        @mock.patch.object(self.conductor.client, \u0027prepare\u0027,"},{"line_number":2491,"context_line":"                          return_value\u003dcctxt_mock)"},{"line_number":2492,"context_line":"        def _test(prepare_mock, can_send_mock):"},{"line_number":2493,"context_line":"            self.conductor.schedule_and_build_instances("},{"line_number":2494,"context_line":"                self.context, build_request, request_spec, image,"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_15f48c85","line":2491,"updated":"2017-05-31 03:35:12.000000000","message":"add one space","commit_id":"a08f35e483c48819a0347853b563eac8d5f8bb3f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"            objects\u003d[bdm])"},{"line_number":1443,"context_line":"        tag \u003d objects.Tag(self.ctxt, resource_id\u003dbuild_request.instance_uuid,"},{"line_number":1444,"context_line":"                          tag\u003d\u0027tag1\u0027)"},{"line_number":1445,"context_line":"        params[\u0027tags\u0027] \u003d [objects.TagList(objects\u003d[tag])]"},{"line_number":1446,"context_line":"        self.params \u003d params"},{"line_number":1447,"context_line":""},{"line_number":1448,"context_line":"    @mock.patch(\u0027nova.db.sqlalchemy.api._check_instance_exists_in_project\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_bf60f402","line":1445,"range":{"start_line":1445,"start_character":25,"end_line":1445,"end_character":57},"updated":"2017-06-13 22:31:39.000000000","message":"Why pass a list of a list? TagList is already a list, so just pass it in like the block_device_mapping kwarg list above.","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"            objects\u003d[bdm])"},{"line_number":1443,"context_line":"        tag \u003d objects.Tag(self.ctxt, resource_id\u003dbuild_request.instance_uuid,"},{"line_number":1444,"context_line":"                          tag\u003d\u0027tag1\u0027)"},{"line_number":1445,"context_line":"        params[\u0027tags\u0027] \u003d [objects.TagList(objects\u003d[tag])]"},{"line_number":1446,"context_line":"        self.params \u003d params"},{"line_number":1447,"context_line":""},{"line_number":1448,"context_line":"    @mock.patch(\u0027nova.db.sqlalchemy.api._check_instance_exists_in_project\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_13a6bf11","line":1445,"range":{"start_line":1445,"start_character":25,"end_line":1445,"end_character":57},"in_reply_to":"7f231b9d_bf60f402","updated":"2017-06-14 01:30:19.000000000","message":"To support bulk boot","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ef2e0bd0a27779cb413a9b4e3b5956e657a33aaa","unresolved":false,"context_lines":[{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":"    @mock.patch(\u0027nova.db.sqlalchemy.api._check_instance_exists_in_project\u0027)"},{"line_number":1399,"context_line":"    def test_schedule_and_build_instances(self, inst_exist_mock):"},{"line_number":1400,"context_line":"        params \u003d self.params"},{"line_number":1401,"context_line":"        instance_uuid \u003d self._do_schedule_and_build_instances_tests(params)"},{"line_number":1402,"context_line":"        cells \u003d objects.CellMappingList.get_all(self.context)"},{"line_number":1403,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"5f201791_bf3492fc","line":1400,"range":{"start_line":1400,"start_character":8,"end_line":1400,"end_character":28},"updated":"2017-06-22 14:35:46.000000000","message":"This seems unnecessary.","commit_id":"e0ddf687c439e514376354ba684139be52c50a7b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ef2e0bd0a27779cb413a9b4e3b5956e657a33aaa","unresolved":false,"context_lines":[{"line_number":1401,"context_line":"        instance_uuid \u003d self._do_schedule_and_build_instances_tests(params)"},{"line_number":1402,"context_line":"        cells \u003d objects.CellMappingList.get_all(self.context)"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"        # NOTE(danms): Assert that we created the InstanceAction and Tag"},{"line_number":1405,"context_line":"        # in the correct cell"},{"line_number":1406,"context_line":"        for cell in cells:"},{"line_number":1407,"context_line":"            with context.target_cell(self.context, cell) as cctxt:"}],"source_content_type":"text/x-python","patch_set":30,"id":"5f201791_df318e0d","line":1404,"range":{"start_line":1404,"start_character":10,"end_line":1404,"end_character":21},"updated":"2017-06-22 14:35:46.000000000","message":"Where is this copied from? Seems wrong here since Dan isn\u0027t writing this.","commit_id":"e0ddf687c439e514376354ba684139be52c50a7b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2016a5a24fbb3f2350516215ad6f0c43df1a2e98","unresolved":false,"context_lines":[{"line_number":1385,"context_line":""},{"line_number":1386,"context_line":"        instance_uuid \u003d details[\u0027instance\u0027].uuid"},{"line_number":1387,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":1388,"context_line":"            self.ctxt, instance_uuid)"},{"line_number":1389,"context_line":"        ephemeral \u003d list(filter(block_device.new_format_is_ephemeral, bdms))"},{"line_number":1390,"context_line":"        self.assertEqual(1, len(ephemeral))"},{"line_number":1391,"context_line":"        swap \u003d list(filter(block_device.new_format_is_swap, bdms))"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f1d235d_15235907","line":1388,"range":{"start_line":1388,"start_character":17,"end_line":1388,"end_character":21},"updated":"2017-07-03 06:42:24.000000000","message":"I think we should have a patch to remove this \u0027self.ctxt\u0027 first. I think it is useless. And I feel it will confuse people in the future again.\n\nI didn\u0027t see any case in the class depends on admin user, so I think we can use the self.context is enough.","commit_id":"3dfbb3b52823c779ede65cf282d8745a2ac8ed18"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c0ac3690c553fdf50414a6630c3d4d0df91a3b68","unresolved":false,"context_lines":[{"line_number":1385,"context_line":""},{"line_number":1386,"context_line":"        instance_uuid \u003d details[\u0027instance\u0027].uuid"},{"line_number":1387,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":1388,"context_line":"            self.ctxt, instance_uuid)"},{"line_number":1389,"context_line":"        ephemeral \u003d list(filter(block_device.new_format_is_ephemeral, bdms))"},{"line_number":1390,"context_line":"        self.assertEqual(1, len(ephemeral))"},{"line_number":1391,"context_line":"        swap \u003d list(filter(block_device.new_format_is_swap, bdms))"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f1d235d_155b5954","line":1388,"range":{"start_line":1388,"start_character":17,"end_line":1388,"end_character":21},"in_reply_to":"3f1d235d_15235907","updated":"2017-07-03 06:53:49.000000000","message":"in line 1329, params[\u0027context\u0027] is set to be self.ctxt and used in conductor.schedule_and_build_instances, and the tests using self.context will leading to \"unable to find instance\" error.","commit_id":"3dfbb3b52823c779ede65cf282d8745a2ac8ed18"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f3df42f44e8a721d0cd8da518680ea74a81fbdeb","unresolved":false,"context_lines":[{"line_number":1385,"context_line":""},{"line_number":1386,"context_line":"        instance_uuid \u003d details[\u0027instance\u0027].uuid"},{"line_number":1387,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":1388,"context_line":"            self.ctxt, instance_uuid)"},{"line_number":1389,"context_line":"        ephemeral \u003d list(filter(block_device.new_format_is_ephemeral, bdms))"},{"line_number":1390,"context_line":"        self.assertEqual(1, len(ephemeral))"},{"line_number":1391,"context_line":"        swap \u003d list(filter(block_device.new_format_is_swap, bdms))"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f1d235d_e19fe600","line":1388,"range":{"start_line":1388,"start_character":17,"end_line":1388,"end_character":21},"in_reply_to":"3f1d235d_155b5954","updated":"2017-07-04 01:05:25.000000000","message":"How about a follow-up patch, this patch got two other patches depended on, let\u0027s not adding rebases : )","commit_id":"3dfbb3b52823c779ede65cf282d8745a2ac8ed18"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"55e4419acee62be00493cbe347c4b73da9057560","unresolved":false,"context_lines":[{"line_number":1385,"context_line":""},{"line_number":1386,"context_line":"        instance_uuid \u003d details[\u0027instance\u0027].uuid"},{"line_number":1387,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":1388,"context_line":"            self.ctxt, instance_uuid)"},{"line_number":1389,"context_line":"        ephemeral \u003d list(filter(block_device.new_format_is_ephemeral, bdms))"},{"line_number":1390,"context_line":"        self.assertEqual(1, len(ephemeral))"},{"line_number":1391,"context_line":"        swap \u003d list(filter(block_device.new_format_is_swap, bdms))"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f1d235d_b0cd9667","line":1388,"range":{"start_line":1388,"start_character":17,"end_line":1388,"end_character":21},"in_reply_to":"3f1d235d_e19fe600","updated":"2017-07-05 03:27:46.000000000","message":"ok, it is fine to me.","commit_id":"3dfbb3b52823c779ede65cf282d8745a2ac8ed18"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2f1664c979adbc6b938a9f38bdfb073ba54b5bf5","unresolved":false,"context_lines":[{"line_number":2422,"context_line":"        @mock.patch.object(self.conductor.client, \u0027prepare\u0027,"},{"line_number":2423,"context_line":"                          return_value\u003dcctxt_mock)"},{"line_number":2424,"context_line":"        def _test(prepare_mock, can_send_mock):"},{"line_number":2425,"context_line":"            self.conductor.schedule_and_build_instances("},{"line_number":2426,"context_line":"                self.context, build_request, request_spec, image,"},{"line_number":2427,"context_line":"                admin_password, injected_file, requested_network,"},{"line_number":2428,"context_line":"                block_device_mapping, tags\u003dtags)"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f1d235d_30f2a671","line":2425,"updated":"2017-07-05 03:38:14.000000000","message":"we should ensure the \u0027tags\u0027 created in the DB.","commit_id":"3dfbb3b52823c779ede65cf282d8745a2ac8ed18"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4e8bb8e16d146292364bfa8c4d7ce83627e69075","unresolved":false,"context_lines":[{"line_number":2422,"context_line":"        @mock.patch.object(self.conductor.client, \u0027prepare\u0027,"},{"line_number":2423,"context_line":"                          return_value\u003dcctxt_mock)"},{"line_number":2424,"context_line":"        def _test(prepare_mock, can_send_mock):"},{"line_number":2425,"context_line":"            self.conductor.schedule_and_build_instances("},{"line_number":2426,"context_line":"                self.context, build_request, request_spec, image,"},{"line_number":2427,"context_line":"                admin_password, injected_file, requested_network,"},{"line_number":2428,"context_line":"                block_device_mapping, tags\u003dtags)"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f1d235d_f09c2e0f","line":2425,"in_reply_to":"3f1d235d_30f2a671","updated":"2017-07-05 03:39:57.000000000","message":"ah, sorry, the line 1408 already ensure that.","commit_id":"3dfbb3b52823c779ede65cf282d8745a2ac8ed18"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b486bace50c694a6636fcee00fe138dff81a5a5b","unresolved":false,"context_lines":[{"line_number":1538,"context_line":"        self.assertFalse(build_and_run.called)"},{"line_number":1539,"context_line":"        self.assertFalse(bury.called)"},{"line_number":1540,"context_line":"        self.assertTrue(br_destroy.called)"},{"line_number":1541,"context_line":"        self.assertTrue(tag_list_destroy.called)"},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":"        test_utils.assert_instance_delete_notification_by_uuid("},{"line_number":1544,"context_line":"            notify, self.params[\u0027build_requests\u0027][0].instance_uuid,"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f1d235d_0ca9d28e","line":1541,"updated":"2017-07-05 08:19:55.000000000","message":"We can use \u0027tag_list_destory.assert_called_once_with(self.ctxt, self.params[\u0027build_requests\u0027][0].instance_uuid)","commit_id":"c6a73dc4188f8726ef63c770195ea7c7c94ca157"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f79b8d5fd8e7616686e417061bf5dd018e52a0cc","unresolved":false,"context_lines":[{"line_number":1399,"context_line":"            self.params)"},{"line_number":1400,"context_line":"        cells \u003d objects.CellMappingList.get_all(self.ctxt)"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"        for cell in cells:"},{"line_number":1403,"context_line":"            with context.target_cell(self.ctxt, cell) as cctxt:"},{"line_number":1404,"context_line":"                actions \u003d objects.InstanceActionList.get_by_instance_uuid("},{"line_number":1405,"context_line":"                    cctxt, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_f41522e6","line":1402,"updated":"2017-07-05 18:42:38.000000000","message":"You dropped the note that used to be in this test:\n\n# NOTE(danms): Assert that we created the InstanceAction in the\n# correct cell","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d18071433e3ec7c0ac68e39ca63287cdce5d4966","unresolved":false,"context_lines":[{"line_number":1399,"context_line":"            self.params)"},{"line_number":1400,"context_line":"        cells \u003d objects.CellMappingList.get_all(self.ctxt)"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"        for cell in cells:"},{"line_number":1403,"context_line":"            with context.target_cell(self.ctxt, cell) as cctxt:"},{"line_number":1404,"context_line":"                actions \u003d objects.InstanceActionList.get_by_instance_uuid("},{"line_number":1405,"context_line":"                    cctxt, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_ec5553fb","line":1402,"in_reply_to":"3f1d235d_f41522e6","updated":"2017-07-06 01:53:12.000000000","message":"Done","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f79b8d5fd8e7616686e417061bf5dd018e52a0cc","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"                    cctxt, instance_uuid)"},{"line_number":1406,"context_line":"                if cell.name \u003d\u003d \u0027cell1\u0027:"},{"line_number":1407,"context_line":"                    self.assertEqual(1, len(actions))"},{"line_number":1408,"context_line":"                    tags \u003d objects.TagList.get_by_resource_id(cctxt,"},{"line_number":1409,"context_line":"                                                          instance_uuid)"},{"line_number":1410,"context_line":"                    self.assertEqual(1, len(tags))"},{"line_number":1411,"context_line":"                else:"},{"line_number":1412,"context_line":"                    self.assertEqual(0, len(actions))"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_f4eac2d5","line":1409,"range":{"start_line":1408,"start_character":62,"end_line":1409,"end_character":71},"updated":"2017-07-05 18:42:38.000000000","message":"nit: alignment is weird, I\u0027d drop it a line like this:\n\ntags \u003d objects.TagList.get_by_resource_id(\n    cctxt, instance_uuid)","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d18071433e3ec7c0ac68e39ca63287cdce5d4966","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"                    cctxt, instance_uuid)"},{"line_number":1406,"context_line":"                if cell.name \u003d\u003d \u0027cell1\u0027:"},{"line_number":1407,"context_line":"                    self.assertEqual(1, len(actions))"},{"line_number":1408,"context_line":"                    tags \u003d objects.TagList.get_by_resource_id(cctxt,"},{"line_number":1409,"context_line":"                                                          instance_uuid)"},{"line_number":1410,"context_line":"                    self.assertEqual(1, len(tags))"},{"line_number":1411,"context_line":"                else:"},{"line_number":1412,"context_line":"                    self.assertEqual(0, len(actions))"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_ac43db41","line":1409,"range":{"start_line":1408,"start_character":62,"end_line":1409,"end_character":71},"in_reply_to":"3f1d235d_f4eac2d5","updated":"2017-07-06 01:53:12.000000000","message":"Done","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f79b8d5fd8e7616686e417061bf5dd018e52a0cc","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"                    cctxt, instance_uuid)"},{"line_number":1426,"context_line":"                if cell.name \u003d\u003d \u0027cell1\u0027:"},{"line_number":1427,"context_line":"                    self.assertEqual(1, len(actions))"},{"line_number":1428,"context_line":"                    tags \u003d objects.TagList.get_by_resource_id(cctxt,"},{"line_number":1429,"context_line":"                                                          instance_uuid)"},{"line_number":1430,"context_line":"                    self.assertEqual(0, len(tags))"},{"line_number":1431,"context_line":"                else:"},{"line_number":1432,"context_line":"                    self.assertEqual(0, len(actions))"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_14c77e66","line":1429,"range":{"start_line":1428,"start_character":62,"end_line":1429,"end_character":71},"updated":"2017-07-05 18:42:38.000000000","message":"same as above","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d18071433e3ec7c0ac68e39ca63287cdce5d4966","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"                    cctxt, instance_uuid)"},{"line_number":1426,"context_line":"                if cell.name \u003d\u003d \u0027cell1\u0027:"},{"line_number":1427,"context_line":"                    self.assertEqual(1, len(actions))"},{"line_number":1428,"context_line":"                    tags \u003d objects.TagList.get_by_resource_id(cctxt,"},{"line_number":1429,"context_line":"                                                          instance_uuid)"},{"line_number":1430,"context_line":"                    self.assertEqual(0, len(tags))"},{"line_number":1431,"context_line":"                else:"},{"line_number":1432,"context_line":"                    self.assertEqual(0, len(actions))"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_8c3edfb5","line":1429,"range":{"start_line":1428,"start_character":62,"end_line":1429,"end_character":71},"in_reply_to":"3f1d235d_14c77e66","updated":"2017-07-06 01:53:12.000000000","message":"Done","commit_id":"d0d973599b6500737d5b8ef61945796dc2cfa909"}],"nova/tests/unit/fake_build_request.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae8fca1db5ff9cd2defda38d49d163403da352b8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027tags\u0027: jsonutils.dumps(tags.obj_to_primitive()),"},{"line_number":53,"context_line":"            \u0027created_at\u0027: datetime.datetime(2016, 1, 16),"},{"line_number":54,"context_line":"            \u0027updated_at\u0027: datetime.datetime(2016, 1, 16),"},{"line_number":55,"context_line":"            \u0027tags\u0027: jsonutils.dumps(tags.obj_to_primitive()),"},{"line_number":56,"context_line":"    }"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    for name, field in objects.BuildRequest.fields.items():"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_86a54bb8","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":61},"updated":"2017-05-04 01:56:26.000000000","message":"Is this still needed? We aren\u0027t accessing the tags from conductor via the build request anymore.","commit_id":"f3d804e5c4d9d8bff4f8ba86fed1354ce39d8a86"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8dd2996de8f470befc43e0812756d1445c93d655","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027tags\u0027: jsonutils.dumps(tags.obj_to_primitive()),"},{"line_number":53,"context_line":"            \u0027created_at\u0027: datetime.datetime(2016, 1, 16),"},{"line_number":54,"context_line":"            \u0027updated_at\u0027: datetime.datetime(2016, 1, 16),"},{"line_number":55,"context_line":"            \u0027tags\u0027: jsonutils.dumps(tags.obj_to_primitive()),"},{"line_number":56,"context_line":"    }"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    for name, field in objects.BuildRequest.fields.items():"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_d293f34e","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":61},"updated":"2017-05-18 01:27:16.000000000","message":"Matt Riedemann May 4 9:56 AM\nIs this still needed? We aren\u0027t accessing the tags from conductor via the build request anymore.","commit_id":"b78da888fbb67feb14f3512de4a2280eb53e41e2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21e09e850be58ef258d471e9aca9bea02b5742a7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027instance\u0027: jsonutils.dumps(instance.obj_to_primitive()),"},{"line_number":50,"context_line":"            \u0027block_device_mappings\u0027: jsonutils.dumps("},{"line_number":51,"context_line":"                block_devices.obj_to_primitive()),"},{"line_number":52,"context_line":"            \u0027tags\u0027: jsonutils.dumps(tags.obj_to_primitive()),"},{"line_number":53,"context_line":"            \u0027created_at\u0027: datetime.datetime(2016, 1, 16),"},{"line_number":54,"context_line":"            \u0027updated_at\u0027: datetime.datetime(2016, 1, 16),"},{"line_number":55,"context_line":"            \u0027tags\u0027: jsonutils.dumps(tags.obj_to_primitive()),"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_3f32a411","line":52,"range":{"start_line":52,"start_character":12,"end_line":52,"end_character":61},"updated":"2017-06-13 22:31:39.000000000","message":"We already have tags here.","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d0998a7e76628c722540b916aee172a135672b10","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027instance\u0027: jsonutils.dumps(instance.obj_to_primitive()),"},{"line_number":50,"context_line":"            \u0027block_device_mappings\u0027: jsonutils.dumps("},{"line_number":51,"context_line":"                block_devices.obj_to_primitive()),"},{"line_number":52,"context_line":"            \u0027tags\u0027: jsonutils.dumps(tags.obj_to_primitive()),"},{"line_number":53,"context_line":"            \u0027created_at\u0027: datetime.datetime(2016, 1, 16),"},{"line_number":54,"context_line":"            \u0027updated_at\u0027: datetime.datetime(2016, 1, 16),"},{"line_number":55,"context_line":"            \u0027tags\u0027: jsonutils.dumps(tags.obj_to_primitive()),"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_73b4d335","line":52,"range":{"start_line":52,"start_character":12,"end_line":52,"end_character":61},"in_reply_to":"7f231b9d_3f32a411","updated":"2017-06-14 01:30:19.000000000","message":"Done","commit_id":"92fb1921798eaef8562e38300c57e340935bdccb"}]}
