)]}'
{"nova/block_device.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21ca53ec218df37a7c9c5420df04bf8b85df2fde","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                     \u0027connection_info\u0027, \u0027tag\u0027, \u0027attachment_id\u0027])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"bdm_db_only_fields \u003d set([\u0027id\u0027, \u0027instance_uuid\u0027, \u0027uuid\u0027])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"bdm_db_inherited_fields \u003d set([\u0027created_at\u0027, \u0027updated_at\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_511cf169","line":51,"updated":"2017-03-03 01:52:41.000000000","message":"Isn\u0027t attachment_id a db only field? God I wish these sets had descriptions of wtf they meant. Like why is attachment_id in bdm_new_fields but uuid isn\u0027t?","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"a084a57e561f1b2365400bce86613329d006a251","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                     \u0027connection_info\u0027, \u0027tag\u0027, \u0027attachment_id\u0027])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"bdm_db_only_fields \u003d set([\u0027id\u0027, \u0027instance_uuid\u0027, \u0027uuid\u0027])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"bdm_db_inherited_fields \u003d set([\u0027created_at\u0027, \u0027updated_at\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_97a594a3","line":51,"in_reply_to":"ba2be162_511cf169","updated":"2017-03-09 13:06:28.000000000","message":"Done, for some reason I assumed we would need access to attachment_id via BlockDeviceDict but we don\u0027t.\n\nFully agree that this needs to be better documented, I wonder if we should also start planning to remove this layer entirely?","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21ca53ec218df37a7c9c5420df04bf8b85df2fde","unresolved":false,"context_lines":[{"line_number":4318,"context_line":"                                              columns_to_join\u003dNone):"},{"line_number":4319,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4320,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4321,"context_line":"                filter_by(attachment_id\u003dattachment_id).\\"},{"line_number":4322,"context_line":"                first()"},{"line_number":4323,"context_line":""},{"line_number":4324,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_b1d7ed49","line":4321,"updated":"2017-03-03 01:52:41.000000000","message":"If we\u0027re going to be able to get a BDM by attachment_id, should we have an index on that column, like we do for uuid?","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"a084a57e561f1b2365400bce86613329d006a251","unresolved":false,"context_lines":[{"line_number":4318,"context_line":"                                              columns_to_join\u003dNone):"},{"line_number":4319,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4320,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4321,"context_line":"                filter_by(attachment_id\u003dattachment_id).\\"},{"line_number":4322,"context_line":"                first()"},{"line_number":4323,"context_line":""},{"line_number":4324,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_57807cf7","line":4321,"in_reply_to":"ba2be162_b1d7ed49","updated":"2017-03-09 13:06:28.000000000","message":"Done","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"1b8282a6bd3c398842dca0f6165203e05c14d355","unresolved":false,"context_lines":[{"line_number":4324,"context_line":"    return _block_device_mapping_get_query(context,"},{"line_number":4325,"context_line":"            columns_to_join\u003dcolumns_to_join).\\"},{"line_number":4326,"context_line":"                filter_by(attachment_id\u003dattachment_id).\\"},{"line_number":4327,"context_line":"                first()"},{"line_number":4328,"context_line":""},{"line_number":4329,"context_line":""},{"line_number":4330,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a1ff146_6bc15ce4","line":4327,"updated":"2017-03-15 18:03:16.000000000","message":"nit: one_or_none()","commit_id":"10cb0620be4585ed151d42f16afab18c86cbb5c3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1636f54dafcfb9f0ba909f3d90b96b8f1c45ec63","unresolved":false,"context_lines":[{"line_number":4294,"context_line":""},{"line_number":4295,"context_line":""},{"line_number":4296,"context_line":"@require_context"},{"line_number":4297,"context_line":"@pick_context_manager_reader"},{"line_number":4298,"context_line":"def block_device_mapping_get_by_attachment_id(context, attachment_id,"},{"line_number":4299,"context_line":"                                              columns_to_join\u003dNone):"},{"line_number":4300,"context_line":"    return _block_device_mapping_get_query(context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_b7a5b0b6","line":4297,"updated":"2017-03-16 17:38:26.000000000","message":"I am not sure about adding this method if we don\u0027t need it.","commit_id":"36cd99695bda6abc4b764b6652445388b47f514b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c07d7102691124d3296b30f5ca081b27d6726433","unresolved":false,"context_lines":[{"line_number":4294,"context_line":""},{"line_number":4295,"context_line":""},{"line_number":4296,"context_line":"@require_context"},{"line_number":4297,"context_line":"@pick_context_manager_reader"},{"line_number":4298,"context_line":"def block_device_mapping_get_by_attachment_id(context, attachment_id,"},{"line_number":4299,"context_line":"                                              columns_to_join\u003dNone):"},{"line_number":4300,"context_line":"    return _block_device_mapping_get_query(context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_5758fc56","line":4297,"in_reply_to":"1a1ced50_b7a5b0b6","updated":"2017-03-16 17:48:39.000000000","message":"I assume this was added because the bdm.uuid patch, which this used to build on, had a similar query method. I agree that if we don\u0027t need it, we don\u0027t need to add it.","commit_id":"36cd99695bda6abc4b764b6652445388b47f514b"}],"nova/db/sqlalchemy/migrate_repo/versions/359_bdm_attachment_id.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"1b8282a6bd3c398842dca0f6165203e05c14d355","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":33,"context_line":"        table \u003d Table(prefix + \u0027block_device_mapping\u0027, meta, autoload\u003dTrue)"},{"line_number":34,"context_line":"        new_column \u003d Column(\u0027attachment_id\u0027, String(36), nullable\u003dTrue)"},{"line_number":35,"context_line":"        if not hasattr(table.c, \u0027attachment_id\u0027):"},{"line_number":36,"context_line":"            table.create_column(new_column)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a1ff146_a62b892f","line":34,"updated":"2017-03-15 18:03:16.000000000","message":"nit: this could live under the guard below.","commit_id":"10cb0620be4585ed151d42f16afab18c86cbb5c3"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21ca53ec218df37a7c9c5420df04bf8b85df2fde","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"    tag \u003d Column(String(255))"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    attachment_id \u003d Column(String(36))"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"class SecurityGroupInstanceAssociation(BASE, NovaBase, models.SoftDeleteMixin):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_71e3b533","line":630,"updated":"2017-03-03 01:52:41.000000000","message":"I almost wonder if we should have a unique constraint across volume_id and attachment_id since multiple bdms shouldn\u0027t be able to represent the same attachment on the same volume. But I might be overthinking this, I don\u0027t know how it\u0027s going to be used yet really.","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e023f4b092d74c3d7e7442dac6d64aeb6d62ff85","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"    tag \u003d Column(String(255))"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    attachment_id \u003d Column(String(36))"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"class SecurityGroupInstanceAssociation(BASE, NovaBase, models.SoftDeleteMixin):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_a36063d0","line":630,"in_reply_to":"ba2be162_71e3b533","updated":"2017-03-03 17:18:20.000000000","message":"The other issue with a unique constraint would be that both volume_id and attachment_id are nullable, and some DBs are strict and don\u0027t allow constraints over nullable columns.","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"a084a57e561f1b2365400bce86613329d006a251","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"    tag \u003d Column(String(255))"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    attachment_id \u003d Column(String(36))"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"class SecurityGroupInstanceAssociation(BASE, NovaBase, models.SoftDeleteMixin):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_57331c62","line":630,"in_reply_to":"ba2be162_a36063d0","updated":"2017-03-09 13:06:28.000000000","message":"Would it be enough to make volume_id non-nullable here?","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"1b8282a6bd3c398842dca0f6165203e05c14d355","unresolved":false,"context_lines":[{"line_number":580,"context_line":"              \u0027instance_uuid\u0027, \u0027volume_id\u0027),"},{"line_number":581,"context_line":"        Index(\u0027block_device_mapping_instance_uuid_idx\u0027, \u0027instance_uuid\u0027),"},{"line_number":582,"context_line":"        Index(\u0027block_device_mapping_uuid_idx\u0027, \u0027uuid\u0027),"},{"line_number":583,"context_line":"        Index(\u0027block_device_mapping_attachment_id_idx\u0027, \u0027attachment_id\u0027),"},{"line_number":584,"context_line":"    )"},{"line_number":585,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":586,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a1ff146_a65d49eb","line":583,"updated":"2017-03-15 18:03:16.000000000","message":"As discussed on IRC I was going to ask for a unique constraint here, but as it\u0027s nullable we can\u0027t do this.","commit_id":"10cb0620be4585ed151d42f16afab18c86cbb5c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6989b3a4eed92a3924cb6a7f7b0ffdfc7fb2f4ec","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        Index(\u0027block_device_mapping_instance_uuid_volume_id_idx\u0027,"},{"line_number":580,"context_line":"              \u0027instance_uuid\u0027, \u0027volume_id\u0027),"},{"line_number":581,"context_line":"        Index(\u0027block_device_mapping_instance_uuid_idx\u0027, \u0027instance_uuid\u0027),"},{"line_number":582,"context_line":"        Index(\u0027block_device_mapping_attachment_id_idx\u0027, \u0027attachment_id\u0027),"},{"line_number":583,"context_line":"    )"},{"line_number":584,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":585,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_b2a5beb6","line":582,"updated":"2017-03-16 18:02:36.000000000","message":"As noted in IRC, we can also drop this.","commit_id":"36cd99695bda6abc4b764b6652445388b47f514b"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21ca53ec218df37a7c9c5420df04bf8b85df2fde","unresolved":false,"context_lines":[{"line_number":6612,"context_line":"        self._create_bdm({\u0027attachment_id\u0027: uuidsentinel.attachment_id})"},{"line_number":6613,"context_line":"        bdm \u003d db.block_device_mapping_get_by_attachment_id(self.ctxt,"},{"line_number":6614,"context_line":"                uuidsentinel.attachment_id)"},{"line_number":6615,"context_line":"        self.assertEqual(bdm.attachment_id, uuidsentinel.attachment_id)"},{"line_number":6616,"context_line":""},{"line_number":6617,"context_line":"    def test_block_device_mapping_get_all_by_volume_id(self):"},{"line_number":6618,"context_line":"        self._create_bdm({\u0027volume_id\u0027: \u0027fake_id\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_b13e0d8a","line":6615,"updated":"2017-03-03 01:52:41.000000000","message":"The args on this are reversed, should be (expected, observed).","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"a084a57e561f1b2365400bce86613329d006a251","unresolved":false,"context_lines":[{"line_number":6612,"context_line":"        self._create_bdm({\u0027attachment_id\u0027: uuidsentinel.attachment_id})"},{"line_number":6613,"context_line":"        bdm \u003d db.block_device_mapping_get_by_attachment_id(self.ctxt,"},{"line_number":6614,"context_line":"                uuidsentinel.attachment_id)"},{"line_number":6615,"context_line":"        self.assertEqual(bdm.attachment_id, uuidsentinel.attachment_id)"},{"line_number":6616,"context_line":""},{"line_number":6617,"context_line":"    def test_block_device_mapping_get_all_by_volume_id(self):"},{"line_number":6618,"context_line":"        self._create_bdm({\u0027volume_id\u0027: \u0027fake_id\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_b7a29897","line":6615,"in_reply_to":"ba2be162_b13e0d8a","updated":"2017-03-09 13:06:28.000000000","message":"Done","commit_id":"ed986e90dd3f8be92f619c18c073156b86fa1086"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1636f54dafcfb9f0ba909f3d90b96b8f1c45ec63","unresolved":false,"context_lines":[{"line_number":6559,"context_line":"        self._create_bdm({\u0027attachment_id\u0027: uuidsentinel.attachment_id})"},{"line_number":6560,"context_line":"        db_bdm1 \u003d db.block_device_mapping_get_by_attachment_id(self.ctxt,"},{"line_number":6561,"context_line":"                     uuidsentinel.attachment_id)"},{"line_number":6562,"context_line":"        db_bdm2 \u003d db.block_device_mapping_get_by_attachment_id(self.ctxt,"},{"line_number":6563,"context_line":"                     uuidsentinel.attachment_id, columns_to_join\u003d[\u0027instance\u0027])"},{"line_number":6564,"context_line":""},{"line_number":6565,"context_line":"        self.assertEqual(uuidsentinel.attachment_id, db_bdm1.attachment_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_978ef425","line":6562,"updated":"2017-03-16 17:38:26.000000000","message":"could we not just block_device_mapping_get_all_by_instance and avoid adding the new method?","commit_id":"36cd99695bda6abc4b764b6652445388b47f514b"}]}
