)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Introducing a data migration tool for populating the new column"},{"line_number":10,"context_line":"queued_for_delete, for existing instance_mappings. If the vm_state"},{"line_number":11,"context_line":"of the instance in the cell is either \"DELETED\" or \"SOFT_DELETED\""},{"line_number":12,"context_line":"queued_fro_delete will be set to True, else it will be in its"},{"line_number":13,"context_line":"default value, False. The tool is not multi-cell aware like most of"},{"line_number":14,"context_line":"the other migration tools and uses a global marker to ensure re-running"},{"line_number":15,"context_line":"of command doesn\u0027t iterate over already mapped records."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f7c97a3_c7e037ce","line":12,"range":{"start_line":12,"start_character":7,"end_line":12,"end_character":10},"updated":"2018-07-19 21:04:09.000000000","message":"for","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"}],"nova/objects/instance_mapping.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self._destroy_in_db(self._context, self.instance_uuid)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"FAKE_UUID \u003d \u002700000000-0000-0000-0000-000000000000\u0027"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"@db_api.api_context_manager.writer"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_9a0b7620","line":150,"updated":"2018-07-19 21:04:09.000000000","message":"OK same as https://github.com/openstack/nova/blob/eb4f65a7951e921b1cd8d05713e144e72f2f254f/nova/objects/request_spec.py#L628","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"@db_api.api_context_manager.writer"},{"line_number":154,"context_line":"def _set_or_delete_marker_for_migrate_instances(context, marker\u003dNone):"},{"line_number":155,"context_line":"    context.session.query(api_models.InstanceMapping).filter_by("},{"line_number":156,"context_line":"        instance_uuid\u003dFAKE_UUID).delete()"},{"line_number":157,"context_line":"    if marker is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_fa4aaa58","line":154,"range":{"start_line":154,"start_character":4,"end_line":154,"end_character":47},"updated":"2018-07-19 21:04:09.000000000","message":"docstring could be useful","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"@db_api.api_context_manager.writer"},{"line_number":154,"context_line":"def _set_or_delete_marker_for_migrate_instances(context, marker\u003dNone):"},{"line_number":155,"context_line":"    context.session.query(api_models.InstanceMapping).filter_by("},{"line_number":156,"context_line":"        instance_uuid\u003dFAKE_UUID).delete()"},{"line_number":157,"context_line":"    if marker is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_3d7a5cba","line":154,"range":{"start_line":154,"start_character":4,"end_line":154,"end_character":47},"in_reply_to":"5f7c97a3_fa4aaa58","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"@db_api.api_context_manager.writer"},{"line_number":154,"context_line":"def _set_or_delete_marker_for_migrate_instances(context, marker\u003dNone):"},{"line_number":155,"context_line":"    context.session.query(api_models.InstanceMapping).filter_by("},{"line_number":156,"context_line":"        instance_uuid\u003dFAKE_UUID).delete()"},{"line_number":157,"context_line":"    if marker is not None:"},{"line_number":158,"context_line":"        db_mapping \u003d api_models.InstanceMapping()"},{"line_number":159,"context_line":"        db_mapping.update({\u0027instance_uuid\u0027: FAKE_UUID, \u0027project_id\u0027: marker})"},{"line_number":160,"context_line":"        db_mapping.save(context.session)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"@db_api.api_context_manager.reader"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1a7766a1","line":160,"range":{"start_line":155,"start_character":4,"end_line":160,"end_character":40},"updated":"2018-07-19 21:04:09.000000000","message":"OK this mimics the reqspec migration:\n\nhttps://github.com/openstack/nova/blob/eb4f65a7951e921b1cd8d05713e144e72f2f254f/nova/objects/request_spec.py#L640","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"@db_api.api_context_manager.reader"},{"line_number":164,"context_line":"def _get_marker_from_previous_run(context):"},{"line_number":165,"context_line":"    inst_mapp \u003d (context.session.query(api_models.InstanceMapping).filter_by("},{"line_number":166,"context_line":"                instance_uuid\u003dFAKE_UUID)).first()"},{"line_number":167,"context_line":"    marker \u003d inst_mapp[\u0027project_id\u0027] if inst_mapp else None"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_3a2fc289","line":164,"range":{"start_line":164,"start_character":4,"end_line":164,"end_character":33},"updated":"2018-07-19 21:04:09.000000000","message":"docstring could be useful","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"@db_api.api_context_manager.reader"},{"line_number":164,"context_line":"def _get_marker_from_previous_run(context):"},{"line_number":165,"context_line":"    inst_mapp \u003d (context.session.query(api_models.InstanceMapping).filter_by("},{"line_number":166,"context_line":"                instance_uuid\u003dFAKE_UUID)).first()"},{"line_number":167,"context_line":"    marker \u003d inst_mapp[\u0027project_id\u0027] if inst_mapp else None"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5d75d8c7","line":164,"range":{"start_line":164,"start_character":4,"end_line":164,"end_character":33},"in_reply_to":"5f7c97a3_3a2fc289","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":163,"context_line":"@db_api.api_context_manager.reader"},{"line_number":164,"context_line":"def _get_marker_from_previous_run(context):"},{"line_number":165,"context_line":"    inst_mapp \u003d (context.session.query(api_models.InstanceMapping).filter_by("},{"line_number":166,"context_line":"                instance_uuid\u003dFAKE_UUID)).first()"},{"line_number":167,"context_line":"    marker \u003d inst_mapp[\u0027project_id\u0027] if inst_mapp else None"},{"line_number":168,"context_line":"    return marker"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_ba50b20a","line":166,"range":{"start_line":166,"start_character":16,"end_line":166,"end_character":17},"updated":"2018-07-19 21:04:09.000000000","message":"alignment","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":163,"context_line":"@db_api.api_context_manager.reader"},{"line_number":164,"context_line":"def _get_marker_from_previous_run(context):"},{"line_number":165,"context_line":"    inst_mapp \u003d (context.session.query(api_models.InstanceMapping).filter_by("},{"line_number":166,"context_line":"                instance_uuid\u003dFAKE_UUID)).first()"},{"line_number":167,"context_line":"    marker \u003d inst_mapp[\u0027project_id\u0027] if inst_mapp else None"},{"line_number":168,"context_line":"    return marker"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_9d585057","line":166,"range":{"start_line":166,"start_character":16,"end_line":166,"end_character":17},"in_reply_to":"5f7c97a3_ba50b20a","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":164,"context_line":"def _get_marker_from_previous_run(context):"},{"line_number":165,"context_line":"    inst_mapp \u003d (context.session.query(api_models.InstanceMapping).filter_by("},{"line_number":166,"context_line":"                instance_uuid\u003dFAKE_UUID)).first()"},{"line_number":167,"context_line":"    marker \u003d inst_mapp[\u0027project_id\u0027] if inst_mapp else None"},{"line_number":168,"context_line":"    return marker"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_3a5d8215","line":167,"updated":"2018-07-19 21:04:09.000000000","message":"Mimics https://github.com/openstack/nova/blob/eb4f65a7951e921b1cd8d05713e144e72f2f254f/nova/objects/request_spec.py#L632","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    return marker"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def populate_queued_for_delete(context, max_count):"},{"line_number":172,"context_line":"    \"\"\"Populates queued_for_delete column in the instance_mapping table.\"\"\""},{"line_number":173,"context_line":"    marker \u003d _get_marker_from_previous_run(context)"},{"line_number":174,"context_line":"    # By default, queued_for_delete is False. Hence we query for only deleted"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1a9c46bd","line":171,"updated":"2018-07-19 21:04:09.000000000","message":"mimics https://github.com/openstack/nova/blob/eb4f65a7951e921b1cd8d05713e144e72f2f254f/nova/objects/request_spec.py#L670","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    # By default, queued_for_delete is False. Hence we query for only deleted"},{"line_number":175,"context_line":"    # instances."},{"line_number":176,"context_line":"    instances \u003d objects.InstanceList.get_by_filters(context,"},{"line_number":177,"context_line":"                                                    filters\u003d{\u0027deleted\u0027: True,"},{"line_number":178,"context_line":"                                                    \u0027soft_deleted\u0027: True},"},{"line_number":179,"context_line":"                                                    sort_key\u003d\u0027created_at\u0027,"},{"line_number":180,"context_line":"                                                    sort_dir\u003d\u0027asc\u0027,"},{"line_number":181,"context_line":"                                                    limit\u003dmax_count,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5ae5de05","line":178,"range":{"start_line":177,"start_character":52,"end_line":178,"end_character":74},"updated":"2018-07-19 21:04:09.000000000","message":"Looks good for https://github.com/openstack/nova/blob/eb4f65a7951e921b1cd8d05713e144e72f2f254f/nova/db/sqlalchemy/api.py#L2109-L2116","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    instances \u003d objects.InstanceList.get_by_filters(context,"},{"line_number":177,"context_line":"                                                    filters\u003d{\u0027deleted\u0027: True,"},{"line_number":178,"context_line":"                                                    \u0027soft_deleted\u0027: True},"},{"line_number":179,"context_line":"                                                    sort_key\u003d\u0027created_at\u0027,"},{"line_number":180,"context_line":"                                                    sort_dir\u003d\u0027asc\u0027,"},{"line_number":181,"context_line":"                                                    limit\u003dmax_count,"},{"line_number":182,"context_line":"                                                    marker\u003dmarker)"},{"line_number":183,"context_line":"    count_all \u003d len(instances)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_9aa7f609","line":180,"range":{"start_line":179,"start_character":52,"end_line":180,"end_character":67},"updated":"2018-07-19 21:04:09.000000000","message":"This is for a stable sort order when it comes to the marker, OK.","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                                                    sort_key\u003d\u0027created_at\u0027,"},{"line_number":180,"context_line":"                                                    sort_dir\u003d\u0027asc\u0027,"},{"line_number":181,"context_line":"                                                    limit\u003dmax_count,"},{"line_number":182,"context_line":"                                                    marker\u003dmarker)"},{"line_number":183,"context_line":"    count_all \u003d len(instances)"},{"line_number":184,"context_line":"    count_hit \u003d 0"},{"line_number":185,"context_line":"    for instance in instances:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7a953a87","line":182,"updated":"2018-07-19 21:04:09.000000000","message":"Pass expected_attrs\u003d[] to avoid the default joins on info_cache and security_groups:\n\nhttps://github.com/openstack/nova/blob/eb4f65a7951e921b1cd8d05713e144e72f2f254f/nova/db/sqlalchemy/api.py#L2079","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                                                    sort_key\u003d\u0027created_at\u0027,"},{"line_number":180,"context_line":"                                                    sort_dir\u003d\u0027asc\u0027,"},{"line_number":181,"context_line":"                                                    limit\u003dmax_count,"},{"line_number":182,"context_line":"                                                    marker\u003dmarker)"},{"line_number":183,"context_line":"    count_all \u003d len(instances)"},{"line_number":184,"context_line":"    count_hit \u003d 0"},{"line_number":185,"context_line":"    for instance in instances:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5d4e3890","line":182,"in_reply_to":"5f7c97a3_7a953a87","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"7acdf83f8b2fff5b8981948eca1438eb8360f1d0","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            im.queued_for_delete \u003d True"},{"line_number":189,"context_line":"            im.save()"},{"line_number":190,"context_line":"            count_hit +\u003d 1"},{"line_number":191,"context_line":"        except exception.InstanceMappingNotFound:"},{"line_number":192,"context_line":"            LOG.error(\u0027InstanceMapping not found, unable to populate\u0027,"},{"line_number":193,"context_line":"                      instance\u003dinstance)"},{"line_number":194,"context_line":"    if count_all \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1f77e6d3","line":191,"updated":"2018-07-13 13:13:48.000000000","message":"not sure if there will be a situation where there is an instance with no mapping. I don\u0027t think there is, and may be this can be removed..","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"510b48ec14fd9e3a941d277216dbe7ccaeb44f6d","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            im.queued_for_delete \u003d True"},{"line_number":189,"context_line":"            im.save()"},{"line_number":190,"context_line":"            count_hit +\u003d 1"},{"line_number":191,"context_line":"        except exception.InstanceMappingNotFound:"},{"line_number":192,"context_line":"            LOG.error(\u0027InstanceMapping not found, unable to populate\u0027,"},{"line_number":193,"context_line":"                      instance\u003dinstance)"},{"line_number":194,"context_line":"    if count_all \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_abb0f0dd","line":191,"in_reply_to":"5f7c97a3_1f77e6d3","updated":"2018-07-13 15:34:12.000000000","message":"Sure, there could be if map_instances wasn\u0027t run yet right?","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"1f7853512e2c0f27f02ada8c6b9c12d23d24cec2","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            im.queued_for_delete \u003d True"},{"line_number":189,"context_line":"            im.save()"},{"line_number":190,"context_line":"            count_hit +\u003d 1"},{"line_number":191,"context_line":"        except exception.InstanceMappingNotFound:"},{"line_number":192,"context_line":"            LOG.error(\u0027InstanceMapping not found, unable to populate\u0027,"},{"line_number":193,"context_line":"                      instance\u003dinstance)"},{"line_number":194,"context_line":"    if count_all \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_eb2908f1","line":191,"in_reply_to":"5f7c97a3_abb0f0dd","updated":"2018-07-13 15:37:14.000000000","message":"oh right! forgot that. I got carried away on seeing InstanceMapping getting created along with RequestSpec during boot time.","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            im.save()"},{"line_number":190,"context_line":"            count_hit +\u003d 1"},{"line_number":191,"context_line":"        except exception.InstanceMappingNotFound:"},{"line_number":192,"context_line":"            LOG.error(\u0027InstanceMapping not found, unable to populate\u0027,"},{"line_number":193,"context_line":"                      instance\u003dinstance)"},{"line_number":194,"context_line":"    if count_all \u003e 0:"},{"line_number":195,"context_line":"        marker \u003d instances[len(instances) - 1].uuid"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_9d1db078","line":192,"updated":"2018-07-19 22:10:47.000000000","message":"I\u0027m not totally sure if we should stop here, because it would mean we\u0027re going to store a marker and never create this instance mapping - should we create the instance mapping?\n\nAlso, this scenario isn\u0027t tested.","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            LOG.error(\u0027InstanceMapping not found, unable to populate\u0027,"},{"line_number":193,"context_line":"                      instance\u003dinstance)"},{"line_number":194,"context_line":"    if count_all \u003e 0:"},{"line_number":195,"context_line":"        marker \u003d instances[len(instances) - 1].uuid"},{"line_number":196,"context_line":"    # Note that we persist the marker so that the command does not execute"},{"line_number":197,"context_line":"    # again in the next run for that cell. Also this is not multi-cell aware."},{"line_number":198,"context_line":"    _set_or_delete_marker_for_migrate_instances(context, marker)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1abd26d6","line":195,"range":{"start_line":195,"start_character":8,"end_line":195,"end_character":51},"updated":"2018-07-19 21:04:09.000000000","message":"marker \u003d instances[-1].uuid\n\nhttps://github.com/openstack/nova/blob/eb4f65a7951e921b1cd8d05713e144e72f2f254f/nova/objects/request_spec.py#L694","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"83a5f0f519cf3000ffa566976a387fabcc6b5f10","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    filters \u003d {\u0027deleted\u0027: True, \u0027soft_deleted\u0027: True}"},{"line_number":184,"context_line":"    instances \u003d objects.InstanceList.get_by_filters("},{"line_number":185,"context_line":"        context, filters\u003dfilters, sort_key\u003d\u0027created_at\u0027, sort_dir\u003d\u0027asc\u0027,"},{"line_number":186,"context_line":"        limit\u003dmax_count, marker\u003dmarker, expected_attrs\u003d[])"},{"line_number":187,"context_line":"    count_all \u003d len(instances)"},{"line_number":188,"context_line":"    count_hit \u003d 0"},{"line_number":189,"context_line":"    for instance in instances:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_666278db","line":186,"updated":"2018-07-20 09:01:55.000000000","message":"ack, thanks.","commit_id":"9cb005d572421cecef89c98d1ea98507515a0853"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a1d4d0ed5491a6d73f2084ae5e99eb375d2fbfe","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    for instance in instances:"},{"line_number":190,"context_line":"        try:"},{"line_number":191,"context_line":"            im \u003d InstanceMapping.get_by_instance_uuid(context, instance.uuid)"},{"line_number":192,"context_line":"            im.queued_for_delete \u003d True"},{"line_number":193,"context_line":"            im.save()"},{"line_number":194,"context_line":"            count_hit +\u003d 1"},{"line_number":195,"context_line":"        except exception.InstanceMappingNotFound:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_aebe19ac","line":192,"updated":"2018-07-20 19:58:39.000000000","message":"Since the field in the mapping is not server_default\u003dFalse, this will leave any of them for non-deleted instances as NULL, FYI.","commit_id":"9cb005d572421cecef89c98d1ea98507515a0853"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"1b9902a2d4aeb5b328e8579b773c3e1a5ffd7bd7","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    for instance in instances:"},{"line_number":190,"context_line":"        try:"},{"line_number":191,"context_line":"            im \u003d InstanceMapping.get_by_instance_uuid(context, instance.uuid)"},{"line_number":192,"context_line":"            im.queued_for_delete \u003d True"},{"line_number":193,"context_line":"            im.save()"},{"line_number":194,"context_line":"            count_hit +\u003d 1"},{"line_number":195,"context_line":"        except exception.InstanceMappingNotFound:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_08a7000b","line":192,"in_reply_to":"5f7c97a3_aebe19ac","updated":"2018-07-20 21:06:50.000000000","message":"thanks for teaching me this today :)","commit_id":"9cb005d572421cecef89c98d1ea98507515a0853"}],"nova/tests/functional/db/test_instance_mapping.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        for uuid in uuids[:-1]:"},{"line_number":143,"context_line":"            inst_del \u003d instance.Instance.get_by_uuid(self.context, uuid\u003duuid)"},{"line_number":144,"context_line":"            inst_del.destroy()"},{"line_number":145,"context_line":"        # updating the vm_state of 0, 1 to deleted for testing purpose"},{"line_number":146,"context_line":"        for i in range(2):"},{"line_number":147,"context_line":"            inst_del \u003d instance.Instance.get_by_uuid(self.context.elevated("},{"line_number":148,"context_line":"                read_deleted\u003d\u0027yes\u0027), uuid\u003duuids[i])"},{"line_number":149,"context_line":"            self.assertEqual(uuids[i], inst_del.uuid)"},{"line_number":150,"context_line":"            inst_del.vm_state \u003d vm_states.DELETED"},{"line_number":151,"context_line":"        # updating the vm_state of 2, 3 to soft-deleted for testing purpose"},{"line_number":152,"context_line":"        for i in range(2, 4):"},{"line_number":153,"context_line":"            inst_sdel \u003d instance.Instance.get_by_uuid(self.context.elevated("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_ba7d121f","line":150,"range":{"start_line":145,"start_character":7,"end_line":150,"end_character":49},"updated":"2018-07-19 21:04:09.000000000","message":"Why? The vm_state isn\u0027t considered in the query.","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        for uuid in uuids[:-1]:"},{"line_number":143,"context_line":"            inst_del \u003d instance.Instance.get_by_uuid(self.context, uuid\u003duuid)"},{"line_number":144,"context_line":"            inst_del.destroy()"},{"line_number":145,"context_line":"        # updating the vm_state of 0, 1 to deleted for testing purpose"},{"line_number":146,"context_line":"        for i in range(2):"},{"line_number":147,"context_line":"            inst_del \u003d instance.Instance.get_by_uuid(self.context.elevated("},{"line_number":148,"context_line":"                read_deleted\u003d\u0027yes\u0027), uuid\u003duuids[i])"},{"line_number":149,"context_line":"            self.assertEqual(uuids[i], inst_del.uuid)"},{"line_number":150,"context_line":"            inst_del.vm_state \u003d vm_states.DELETED"},{"line_number":151,"context_line":"        # updating the vm_state of 2, 3 to soft-deleted for testing purpose"},{"line_number":152,"context_line":"        for i in range(2, 4):"},{"line_number":153,"context_line":"            inst_sdel \u003d instance.Instance.get_by_uuid(self.context.elevated("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_3da57c48","line":150,"range":{"start_line":145,"start_character":7,"end_line":150,"end_character":49},"in_reply_to":"5f7c97a3_ba7d121f","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            inst_sdel \u003d instance.Instance.get_by_uuid(self.context.elevated("},{"line_number":154,"context_line":"                read_deleted\u003d\u0027yes\u0027), uuid\u003duuids[i])"},{"line_number":155,"context_line":"            self.assertEqual(uuids[i], inst_sdel.uuid)"},{"line_number":156,"context_line":"            inst_sdel.vm_state \u003d vm_states.SOFT_DELETED"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        # executes over instance 0 and 1"},{"line_number":159,"context_line":"        match, done \u003d instance_mapping.populate_queued_for_delete("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_9a9b7662","line":156,"updated":"2018-07-19 21:04:09.000000000","message":"Yes this is needed because of the OR query:\n\nhttps://github.com/openstack/nova/blob/eb4f65a7951e921b1cd8d05713e144e72f2f254f/nova/db/sqlalchemy/api.py#L2109-L2116\n\nBut don\u0027t you need to save() this? The test probably doesn\u0027t fail b/c you\u0027re not persisting this and the instances are already deleted. Why don\u0027t you do this instead:\n\n1. create 2 instances and delete them\n2. create 2 instances that are SOFT_DELETED\n3. create 1 instance that is not deleted at all","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            inst_sdel \u003d instance.Instance.get_by_uuid(self.context.elevated("},{"line_number":154,"context_line":"                read_deleted\u003d\u0027yes\u0027), uuid\u003duuids[i])"},{"line_number":155,"context_line":"            self.assertEqual(uuids[i], inst_sdel.uuid)"},{"line_number":156,"context_line":"            inst_sdel.vm_state \u003d vm_states.SOFT_DELETED"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        # executes over instance 0 and 1"},{"line_number":159,"context_line":"        match, done \u003d instance_mapping.populate_queued_for_delete("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_fd60640f","line":156,"in_reply_to":"5f7c97a3_9a9b7662","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        self.assertTrue(inst_mapp_del0.queued_for_delete)"},{"line_number":168,"context_line":"        self.assertTrue(inst_mapp_del1.queued_for_delete)"},{"line_number":169,"context_line":"        marker \u003d instance_mapping.InstanceMapping.get_by_instance_uuid("},{"line_number":170,"context_line":"            self.context, \u002700000000-0000-0000-0000-000000000000\u0027)"},{"line_number":171,"context_line":"        self.assertEqual(uuids[1], marker.project_id)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # executes over instance 2 and 3, leaves 4 out since its not"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_fab5cad0","line":170,"range":{"start_line":170,"start_character":26,"end_line":170,"end_character":64},"updated":"2018-07-19 21:04:09.000000000","message":"Use your constant?","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        self.assertTrue(inst_mapp_del0.queued_for_delete)"},{"line_number":168,"context_line":"        self.assertTrue(inst_mapp_del1.queued_for_delete)"},{"line_number":169,"context_line":"        marker \u003d instance_mapping.InstanceMapping.get_by_instance_uuid("},{"line_number":170,"context_line":"            self.context, \u002700000000-0000-0000-0000-000000000000\u0027)"},{"line_number":171,"context_line":"        self.assertEqual(uuids[1], marker.project_id)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # executes over instance 2 and 3, leaves 4 out since its not"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1d644020","line":170,"range":{"start_line":170,"start_character":26,"end_line":170,"end_character":64},"in_reply_to":"5f7c97a3_fab5cad0","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        self.assertTrue(inst_map_sdel0.queued_for_delete)"},{"line_number":184,"context_line":"        self.assertTrue(inst_map_sdel1.queued_for_delete)"},{"line_number":185,"context_line":"        marker \u003d instance_mapping.InstanceMapping.get_by_instance_uuid("},{"line_number":186,"context_line":"            self.context, \u002700000000-0000-0000-0000-000000000000\u0027)"},{"line_number":187,"context_line":"        self.assertEqual(uuids[3], marker.project_id)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # Make sure we ran over all the instances successfully without"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1ab9a6c9","line":186,"updated":"2018-07-19 21:04:09.000000000","message":"same","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        self.assertTrue(inst_map_sdel0.queued_for_delete)"},{"line_number":184,"context_line":"        self.assertTrue(inst_map_sdel1.queued_for_delete)"},{"line_number":185,"context_line":"        marker \u003d instance_mapping.InstanceMapping.get_by_instance_uuid("},{"line_number":186,"context_line":"            self.context, \u002700000000-0000-0000-0000-000000000000\u0027)"},{"line_number":187,"context_line":"        self.assertEqual(uuids[3], marker.project_id)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # Make sure we ran over all the instances successfully without"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_dd69e8f6","line":186,"in_reply_to":"5f7c97a3_1ab9a6c9","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b84030bd8380cabb535ff58485c16d5e6de486","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        self.assertEqual(0, match)"},{"line_number":194,"context_line":"        self.assertEqual(0, done)"},{"line_number":195,"context_line":"        marker \u003d instance_mapping.InstanceMapping.get_by_instance_uuid("},{"line_number":196,"context_line":"            self.context, \u002700000000-0000-0000-0000-000000000000\u0027)"},{"line_number":197,"context_line":"        self.assertEqual(uuids[3], marker.project_id)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        im_active \u003d instance_mapping.InstanceMapping.get_by_instance_uuid("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_daaece7e","line":196,"updated":"2018-07-19 21:04:09.000000000","message":"same","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"29207ae4956c3137df6072045e6fd36ca4ed51b0","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        self.assertEqual(0, match)"},{"line_number":194,"context_line":"        self.assertEqual(0, done)"},{"line_number":195,"context_line":"        marker \u003d instance_mapping.InstanceMapping.get_by_instance_uuid("},{"line_number":196,"context_line":"            self.context, \u002700000000-0000-0000-0000-000000000000\u0027)"},{"line_number":197,"context_line":"        self.assertEqual(uuids[3], marker.project_id)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        im_active \u003d instance_mapping.InstanceMapping.get_by_instance_uuid("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7d7454d0","line":196,"in_reply_to":"5f7c97a3_daaece7e","updated":"2018-07-19 22:10:47.000000000","message":"Done","commit_id":"b9da4c33461c185e6219ff7544ec898bf4b90e23"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"88d863b8dd9700f873233ef6e1cc079934b0ba37","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                         c_mapping.id)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def test_populate_queued_for_delete(self):"},{"line_number":131,"context_line":"        # create 5 instances and their mappings"},{"line_number":132,"context_line":"        uuids \u003d []"},{"line_number":133,"context_line":"        for i in range(6):"},{"line_number":134,"context_line":"            uuid \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_33edadb7","line":131,"range":{"start_line":131,"start_character":17,"end_line":131,"end_character":18},"updated":"2018-07-19 23:21:19.000000000","message":"6","commit_id":"06f422795035020b1aa803e71114f49bdc072aa9"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"83a5f0f519cf3000ffa566976a387fabcc6b5f10","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            elif i in (2, 3):"},{"line_number":147,"context_line":"                # Soft delete the 3rd and 4th instance."},{"line_number":148,"context_line":"                inst.vm_state \u003d vm_states.SOFT_DELETED"},{"line_number":149,"context_line":"                inst.save()"},{"line_number":150,"context_line":"            # Leave the 5th instance alone to make sure it\u0027s filtered out."},{"line_number":151,"context_line":"            elif i \u003d\u003d 5:"},{"line_number":152,"context_line":"                # Delete the instance *and* mapping for the 6th instance to"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_a653b014","line":149,"updated":"2018-07-20 09:01:55.000000000","message":"oo right, and guess what you have done is way neater, hope some day I can start writing neat test cases. Thanks for bearing the dirt mriedem.","commit_id":"9cb005d572421cecef89c98d1ea98507515a0853"}]}
