)]}'
{"nova/api/ec2/ec2utils.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93931f25fdc4cb1b1936c22a995fc530b1dc93c9","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from nova.network import model as network_model"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_ip_info_for_instance_from_nw_info(nw_info):"},{"line_number":21,"context_line":"    if not isinstance(nw_info, network_model.NetworkInfo):"},{"line_number":22,"context_line":"        nw_info \u003d network_model.NetworkInfo.hydrate(nw_info)"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3a57f1b5_a50cd1ed","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":41},"updated":"2016-02-11 21:39:23.000000000","message":"If this is the only thing leftover (and it\u0027s only used in the metadata api base code), it seems we could refactor this out of ec2utils and move it elsewhere (nova.utils?) so then we can just completely delete the ec2utils module.\n\nI\u0027d maybe do that in a separate change to make it easier to review and get through.","commit_id":"9b3c383c6b4ff38a65056b7abb3ab3ddaa6a0895"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"a85d6d7e913f030cd85b82c2083030c829b87dcc","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from nova.network import model as network_model"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_ip_info_for_instance_from_nw_info(nw_info):"},{"line_number":21,"context_line":"    if not isinstance(nw_info, network_model.NetworkInfo):"},{"line_number":22,"context_line":"        nw_info \u003d network_model.NetworkInfo.hydrate(nw_info)"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3a57f1b5_78f8a2c3","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":41},"in_reply_to":"3a57f1b5_a50cd1ed","updated":"2016-02-12 11:52:39.000000000","message":"I did it in this review to remove this file completly.","commit_id":"9b3c383c6b4ff38a65056b7abb3ab3ddaa6a0895"}],"nova/api/metadata/base.py":[{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"6939cbbaf309d7bdcae2d30ca53afd048ff6f15c","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    def get_mimetype(self):"},{"line_number":215,"context_line":"        return self.md_mimetype"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_ec2_metadata(self, version):"},{"line_number":218,"context_line":"        if version \u003d\u003d \"latest\":"},{"line_number":219,"context_line":"            version \u003d VERSIONS[-1]"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_e49f815d","line":217,"updated":"2016-02-10 16:19:04.000000000","message":"This entire method could probably be removed as well, but it can be done in a follow up.","commit_id":"433b41c28c7802c989b1418069b641fb7d32c970"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"e9dd73c73811c1393313ff0750ecb796918040ad","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    def get_mimetype(self):"},{"line_number":215,"context_line":"        return self.md_mimetype"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_ec2_metadata(self, version):"},{"line_number":218,"context_line":"        if version \u003d\u003d \"latest\":"},{"line_number":219,"context_line":"            version \u003d VERSIONS[-1]"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_f9c93f79","line":217,"in_reply_to":"3a57f1b5_d33b029b","updated":"2016-02-11 08:54:00.000000000","message":"You are probably right.","commit_id":"433b41c28c7802c989b1418069b641fb7d32c970"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"39c4e2207bcb4f3003297dc2cfc206de3f9d4646","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    def get_mimetype(self):"},{"line_number":215,"context_line":"        return self.md_mimetype"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_ec2_metadata(self, version):"},{"line_number":218,"context_line":"        if version \u003d\u003d \"latest\":"},{"line_number":219,"context_line":"            version \u003d VERSIONS[-1]"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_d33b029b","line":217,"in_reply_to":"3a57f1b5_e49f815d","updated":"2016-02-11 08:08:14.000000000","message":"This can be impossible. Because many images uses ec2 metadata right after start - cirros for example.","commit_id":"433b41c28c7802c989b1418069b641fb7d32c970"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a35e03cd95758442d3b923d36f8ec58cbd7c05ec","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        fmt_sgroups \u003d [x[\u0027name\u0027] for x in self.security_groups]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        meta_data \u003d {"},{"line_number":235,"context_line":"            \u0027ami-id\u0027: self.instance.ec2_ids.ami_id,"},{"line_number":236,"context_line":"            \u0027ami-launch-index\u0027: self.instance.launch_index,"},{"line_number":237,"context_line":"            \u0027ami-manifest-path\u0027: \u0027FIXME\u0027,"},{"line_number":238,"context_line":"            \u0027instance-id\u0027: self.instance.ec2_ids.instance_id,"},{"line_number":239,"context_line":"            \u0027hostname\u0027: hostname,"},{"line_number":240,"context_line":"            \u0027local-ipv4\u0027: fixed_ip or self.address,"},{"line_number":241,"context_line":"            \u0027reservation-id\u0027: self.instance.reservation_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_530f5a36","side":"PARENT","line":238,"range":{"start_line":235,"start_character":12,"end_line":238,"end_character":61},"updated":"2016-02-18 17:10:04.000000000","message":"How is this not a backward incompatible API change? I\u0027d expect a version bump to the metadata API for removing entries.","commit_id":"8a74b3c517ad8bd8b2e9fb3a65272700240e4964"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"368de5cc34ff8383097f94ff5a9cf08f44d1378d","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        fmt_sgroups \u003d [x[\u0027name\u0027] for x in self.security_groups]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        meta_data \u003d {"},{"line_number":235,"context_line":"            \u0027ami-id\u0027: self.instance.ec2_ids.ami_id,"},{"line_number":236,"context_line":"            \u0027ami-launch-index\u0027: self.instance.launch_index,"},{"line_number":237,"context_line":"            \u0027ami-manifest-path\u0027: \u0027FIXME\u0027,"},{"line_number":238,"context_line":"            \u0027instance-id\u0027: self.instance.ec2_ids.instance_id,"},{"line_number":239,"context_line":"            \u0027hostname\u0027: hostname,"},{"line_number":240,"context_line":"            \u0027local-ipv4\u0027: fixed_ip or self.address,"},{"line_number":241,"context_line":"            \u0027reservation-id\u0027: self.instance.reservation_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_1b5cac24","side":"PARENT","line":238,"range":{"start_line":235,"start_character":12,"end_line":238,"end_character":61},"in_reply_to":"dae33548_1fcf8c56","updated":"2016-02-19 12:15:39.000000000","message":"maybe better to return empty string instead of removing...","commit_id":"8a74b3c517ad8bd8b2e9fb3a65272700240e4964"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"67b7d99dd742e3873c23c9ad2c92bb819fd78cf5","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        fmt_sgroups \u003d [x[\u0027name\u0027] for x in self.security_groups]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        meta_data \u003d {"},{"line_number":235,"context_line":"            \u0027ami-id\u0027: self.instance.ec2_ids.ami_id,"},{"line_number":236,"context_line":"            \u0027ami-launch-index\u0027: self.instance.launch_index,"},{"line_number":237,"context_line":"            \u0027ami-manifest-path\u0027: \u0027FIXME\u0027,"},{"line_number":238,"context_line":"            \u0027instance-id\u0027: self.instance.ec2_ids.instance_id,"},{"line_number":239,"context_line":"            \u0027hostname\u0027: hostname,"},{"line_number":240,"context_line":"            \u0027local-ipv4\u0027: fixed_ip or self.address,"},{"line_number":241,"context_line":"            \u0027reservation-id\u0027: self.instance.reservation_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_a2680af6","side":"PARENT","line":238,"range":{"start_line":235,"start_character":12,"end_line":238,"end_character":61},"in_reply_to":"dae33548_530f5a36","updated":"2016-02-18 19:15:39.000000000","message":"These entries related to EC2 metadata. EC2 metadata has own versions. This code doesn\u0027t return all metadata (in public keys for example).\nSo I don\u0027t understand how to bump version here.","commit_id":"8a74b3c517ad8bd8b2e9fb3a65272700240e4964"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"6d7db3ea8da9ea355c870f7b7292d26f27a692dc","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        fmt_sgroups \u003d [x[\u0027name\u0027] for x in self.security_groups]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        meta_data \u003d {"},{"line_number":235,"context_line":"            \u0027ami-id\u0027: self.instance.ec2_ids.ami_id,"},{"line_number":236,"context_line":"            \u0027ami-launch-index\u0027: self.instance.launch_index,"},{"line_number":237,"context_line":"            \u0027ami-manifest-path\u0027: \u0027FIXME\u0027,"},{"line_number":238,"context_line":"            \u0027instance-id\u0027: self.instance.ec2_ids.instance_id,"},{"line_number":239,"context_line":"            \u0027hostname\u0027: hostname,"},{"line_number":240,"context_line":"            \u0027local-ipv4\u0027: fixed_ip or self.address,"},{"line_number":241,"context_line":"            \u0027reservation-id\u0027: self.instance.reservation_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_1fcf8c56","side":"PARENT","line":238,"range":{"start_line":235,"start_character":12,"end_line":238,"end_character":61},"in_reply_to":"dae33548_7c80668b","updated":"2016-02-18 20:07:13.000000000","message":"do you think that is a good idea to add new version?\nbut what version we should add? and how(and where) we can  declare which fields exist in specific version?\n\nAmazon declares versions of metadata here - http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\nand, unfortunately nova metadata uses this versioning model.","commit_id":"8a74b3c517ad8bd8b2e9fb3a65272700240e4964"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8cc4c13f6f3e26649230f8a3e6317d03976fb2d9","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        fmt_sgroups \u003d [x[\u0027name\u0027] for x in self.security_groups]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        meta_data \u003d {"},{"line_number":235,"context_line":"            \u0027ami-id\u0027: self.instance.ec2_ids.ami_id,"},{"line_number":236,"context_line":"            \u0027ami-launch-index\u0027: self.instance.launch_index,"},{"line_number":237,"context_line":"            \u0027ami-manifest-path\u0027: \u0027FIXME\u0027,"},{"line_number":238,"context_line":"            \u0027instance-id\u0027: self.instance.ec2_ids.instance_id,"},{"line_number":239,"context_line":"            \u0027hostname\u0027: hostname,"},{"line_number":240,"context_line":"            \u0027local-ipv4\u0027: fixed_ip or self.address,"},{"line_number":241,"context_line":"            \u0027reservation-id\u0027: self.instance.reservation_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_7c80668b","side":"PARENT","line":238,"range":{"start_line":235,"start_character":12,"end_line":238,"end_character":61},"in_reply_to":"dae33548_a2680af6","updated":"2016-02-18 19:48:15.000000000","message":"There is a version passed into this method. We\u0027d need to add a new version and then if the version requested is that, we can drop the keys, else I\u0027d think we have to provide what we still can (like instance-id and launch-index).","commit_id":"8a74b3c517ad8bd8b2e9fb3a65272700240e4964"}],"nova/cmd/api.py":[{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"7ac4a35fd81eedc7362e330eefd7f174868d6aae","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Starter script for Nova API."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Starts the OpenStack APIs in separate greenthread."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_95b9b17b","line":19,"updated":"2016-01-14 11:14:18.000000000","message":"s/greenthread/greenthreads/","commit_id":"06619c8c81ec4829dee1fb25216ac4533e08fc65"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"359f25839c769cdcea5bd75e4a0ba0ce13fb8b37","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"    uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":1205,"context_line":""},{"line_number":1206,"context_line":""},{"line_number":1207,"context_line":"class VolumeIdMapping(BASE, NovaBase, models.SoftDeleteMixin):"},{"line_number":1208,"context_line":"    \"\"\"Compatibility layer for the EC2 volume service.\"\"\""},{"line_number":1209,"context_line":"    __tablename__ \u003d \u0027volume_id_mappings\u0027"},{"line_number":1210,"context_line":"    __table_args__ \u003d ()"}],"source_content_type":"text/x-python","patch_set":32,"id":"1af94dfe_ebf43df3","line":1207,"updated":"2016-03-16 20:12:51.000000000","message":"And this.","commit_id":"7a3c466ed8373fe51df25c27679dcd7dfc1a0d7b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"359f25839c769cdcea5bd75e4a0ba0ce13fb8b37","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"    uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":1213,"context_line":""},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"class SnapshotIdMapping(BASE, NovaBase, models.SoftDeleteMixin):"},{"line_number":1216,"context_line":"    \"\"\"Compatibility layer for the EC2 snapshot service.\"\"\""},{"line_number":1217,"context_line":"    __tablename__ \u003d \u0027snapshot_id_mappings\u0027"},{"line_number":1218,"context_line":"    __table_args__ \u003d ()"}],"source_content_type":"text/x-python","patch_set":32,"id":"1af94dfe_0bda4978","line":1215,"updated":"2016-03-16 20:12:51.000000000","message":"And this.","commit_id":"7a3c466ed8373fe51df25c27679dcd7dfc1a0d7b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"359f25839c769cdcea5bd75e4a0ba0ce13fb8b37","unresolved":false,"context_lines":[{"line_number":1277,"context_line":"    details \u003d Column(Text)"},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"class InstanceIdMapping(BASE, NovaBase, models.SoftDeleteMixin):"},{"line_number":1281,"context_line":"    \"\"\"Compatibility layer for the EC2 instance service.\"\"\""},{"line_number":1282,"context_line":"    __tablename__ \u003d \u0027instance_id_mappings\u0027"},{"line_number":1283,"context_line":"    __table_args__ \u003d ("},{"line_number":1284,"context_line":"        Index(\u0027ix_instance_id_mappings_uuid\u0027, \u0027uuid\u0027),"},{"line_number":1285,"context_line":"    )"},{"line_number":1286,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue, nullable\u003dFalse, autoincrement\u003dTrue)"},{"line_number":1287,"context_line":"    uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":1288,"context_line":""},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":"class TaskLog(BASE, NovaBase, models.SoftDeleteMixin):"}],"source_content_type":"text/x-python","patch_set":32,"id":"1af94dfe_cb806149","line":1287,"range":{"start_line":1280,"start_character":0,"end_line":1287,"end_character":45},"updated":"2016-03-16 20:12:51.000000000","message":"What about this?","commit_id":"7a3c466ed8373fe51df25c27679dcd7dfc1a0d7b"}],"nova/objects/ec2.py":[{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"6939cbbaf309d7bdcae2d30ca53afd048ff6f15c","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"},{"line_number":25,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_5782c501","side":"PARENT","line":23,"updated":"2016-02-10 16:19:04.000000000","message":"Not sure we can remove these just yet. We probably need to keep them for older clients that need to get them remotely from a conductor.","commit_id":"07573aff2326a166313ea691093bb305373feb48"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"6939cbbaf309d7bdcae2d30ca53afd048ff6f15c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from nova.objects import fields"},{"line_number":19,"context_line":"from oslo_utils import versionutils"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# NOTE(andrey-mp): left as umb object not to break compatibility"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@base.NovaObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_04fadd42","line":21,"updated":"2016-02-10 16:19:04.000000000","message":"nit: s/umb/dumb/","commit_id":"433b41c28c7802c989b1418069b641fb7d32c970"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"6939cbbaf309d7bdcae2d30ca53afd048ff6f15c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":25,"context_line":"class EC2Ids(base.NovaObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    # Version 1.1: Deprecate object"},{"line_number":28,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_84724de4","line":27,"updated":"2016-02-10 16:19:04.000000000","message":"No need to bump the version. The object hasn\u0027t changed, just the values being returned.","commit_id":"433b41c28c7802c989b1418069b641fb7d32c970"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"6939cbbaf309d7bdcae2d30ca53afd048ff6f15c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    @base.remotable_classmethod"},{"line_number":45,"context_line":"    def get_by_instance(cls, context, instance):"},{"line_number":46,"context_line":"        ec2_ids \u003d cls(context)"},{"line_number":47,"context_line":"        setattr(ec2_ids, \u0027instance_id\u0027, instance.id)"},{"line_number":48,"context_line":"        return ec2_ids"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_373869d3","line":47,"updated":"2016-02-10 16:19:04.000000000","message":"nit: easier to read if you do:\n\n ec2_ids.instance_id \u003d instance.id\n\n(this used to be an ec2 instance id can we safely replace it with instance.id here?)\n\nthe other fields should be set here too to avoid potential lazy-loads on access:\n\n ec2_ids.ami_id \u003d None\n ec2_ids.kernel_id \u003d None\n ec2_ids.ramdisk_id \u003d None","commit_id":"433b41c28c7802c989b1418069b641fb7d32c970"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"4c5ab4598739eaaebb8ddf8edcd6468068f75b72","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"},{"line_number":25,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3a57f1b5_993febd5","side":"PARENT","line":23,"updated":"2016-02-11 09:07:12.000000000","message":"I still don\u0027t think we can remove these classes like this. See my previous comment.","commit_id":"ce5a2fb419f999bec0fb2c67413387c8b67a691a"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"ca83cd7ce8d8e84fc64151c4ea7c427f854c187b","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"},{"line_number":25,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3a57f1b5_ca902346","side":"PARENT","line":23,"in_reply_to":"3a57f1b5_993febd5","updated":"2016-02-11 09:47:58.000000000","message":"Ok, maybe I can convince myself this might work.\n\nNormally when upgrading you start with the conductors, before you upgrade api services etc. These objects are to my knowledge only used by the ec2-api and s3 services. If before upgrading the conductors, you start by removing existing ec2 related services (which you should be doing anyhow since we remove support for them in Mitaka), then this shouldn\u0027t be a problem.\n\nIs this clearly stated in the upgrade notes for Liberty -\u003e Mitaka?","commit_id":"ce5a2fb419f999bec0fb2c67413387c8b67a691a"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"3f95a916ab369cdabfda335aaef52a0d274b187f","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"},{"line_number":25,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3a57f1b5_e135fdd9","side":"PARENT","line":23,"in_reply_to":"3a57f1b5_ca902346","updated":"2016-02-12 07:27:19.000000000","message":"I think no. dims didn\u0027t state this in release notes - https://github.com/openstack/nova/blob/master/releasenotes/notes/remove_ec2_and_objectstore_api-4ccb539db1d171fa.yaml\n\nShould I paste your text there? Or there is another place exists with such notes?","commit_id":"ce5a2fb419f999bec0fb2c67413387c8b67a691a"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"4c5ab4598739eaaebb8ddf8edcd6468068f75b72","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \u0027ramdisk_id\u0027: fields.StringField(nullable\u003dTrue, read_only\u003dTrue),"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":37,"context_line":"        super(EC2Ids, self).obj_make_compatible(primitive, target_version)"},{"line_number":38,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":39,"context_line":"        for field in six.iterkeys(self.fields):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3a57f1b5_390ef73b","line":36,"updated":"2016-02-11 09:07:12.000000000","message":"No need for this method.","commit_id":"249ce654ac4bbe5016c04fb97790d27e20e90694"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"4c5ab4598739eaaebb8ddf8edcd6468068f75b72","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @base.remotable_classmethod"},{"line_number":44,"context_line":"    def get_by_instance(cls, context, instance):"},{"line_number":45,"context_line":"        ec2_ids \u003d cls(context)"},{"line_number":46,"context_line":"        ec2_ids.instance_id \u003d instance.id"},{"line_number":47,"context_line":"        ec2_ids.ami_id \u003d None"},{"line_number":48,"context_line":"        ec2_ids.kernel_id \u003d None"},{"line_number":49,"context_line":"        ec2_ids.ramdisk_id \u003d None"}],"source_content_type":"text/x-python","patch_set":25,"id":"3a57f1b5_241a4e6f","line":46,"updated":"2016-02-11 09:07:12.000000000","message":"Same question as before. Is it valid to change the format of this one that used to be an ec2 instance id?","commit_id":"249ce654ac4bbe5016c04fb97790d27e20e90694"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"3f95a916ab369cdabfda335aaef52a0d274b187f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @base.remotable_classmethod"},{"line_number":44,"context_line":"    def get_by_instance(cls, context, instance):"},{"line_number":45,"context_line":"        ec2_ids \u003d cls(context)"},{"line_number":46,"context_line":"        ec2_ids.instance_id \u003d instance.id"},{"line_number":47,"context_line":"        ec2_ids.ami_id \u003d None"},{"line_number":48,"context_line":"        ec2_ids.kernel_id \u003d None"},{"line_number":49,"context_line":"        ec2_ids.ramdisk_id \u003d None"}],"source_content_type":"text/x-python","patch_set":25,"id":"3a57f1b5_81a3e94e","line":46,"in_reply_to":"3a57f1b5_241a4e6f","updated":"2016-02-12 07:27:19.000000000","message":"I think yes - it\u0027s valid. This id used only in metadata service and then it used by cirros to do something strange... and it works well with this id.","commit_id":"249ce654ac4bbe5016c04fb97790d27e20e90694"}],"nova/objects/instance.py":[{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"7ac4a35fd81eedc7362e330eefd7f174868d6aae","unresolved":false,"context_lines":[{"line_number":86,"context_line":"class Instance(base.NovaPersistentObject, base.NovaObject,"},{"line_number":87,"context_line":"               base.NovaObjectDictCompat):"},{"line_number":88,"context_line":"    # Version 2.0: Initial version"},{"line_number":89,"context_line":"    # Version 2.1: Remove ec2_ids field"},{"line_number":90,"context_line":"    VERSION \u003d \u00272.1\u0027"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_556d792f","line":89,"updated":"2016-01-14 11:14:18.000000000","message":"I don\u0027t think that you can remove a field with less than a major bump of the version since this breaks back-compat.\n\nAlso I think this has to wait until Newton because a Liberty compute that asks for a instance from a Mitaka conductor must be given an object with this field included.\n\nYou can see the error it creates in the previous gate-grenade-ddvm-multinode run here:\nhttp://logs.openstack.org/25/266425/3/check/gate-grenade-dsvm-multinode/4586438/logs/subnode-2/old/screen-n-cpu.txt.gz?level\u003dTRACE#_2016-01-14_09_36_59_856\n\nThe best way forward is probable to leave the EC2Ids object but to make it a dumb one that return some fake or empty values for as long as it has to stay.","commit_id":"06619c8c81ec4829dee1fb25216ac4533e08fc65"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"0c2854860afa8afa5b135e9f394cfc9312af5061","unresolved":false,"context_lines":[{"line_number":86,"context_line":"class Instance(base.NovaPersistentObject, base.NovaObject,"},{"line_number":87,"context_line":"               base.NovaObjectDictCompat):"},{"line_number":88,"context_line":"    # Version 2.0: Initial version"},{"line_number":89,"context_line":"    # Version 2.1: Remove ec2_ids field"},{"line_number":90,"context_line":"    VERSION \u003d \u00272.1\u0027"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_bb8063c0","line":89,"in_reply_to":"da6ed579_556d792f","updated":"2016-01-14 11:45:55.000000000","message":"Thank you for clarification!","commit_id":"06619c8c81ec4829dee1fb25216ac4533e08fc65"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e97094a6096509c11285217b6d1a24cc8547c2a0","unresolved":false,"context_lines":[{"line_number":808,"context_line":"                db_vcpu_model)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def _load_ec2_ids(self):"},{"line_number":811,"context_line":"        self.ec2_ids \u003d objects.EC2Ids.get_by_instance(self._context, self)"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"    def _load_security_groups(self):"},{"line_number":814,"context_line":"        self.security_groups \u003d objects.SecurityGroupList.get_by_instance("}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_76fd2cb0","side":"PARENT","line":811,"range":{"start_line":811,"start_character":23,"end_line":811,"end_character":74},"updated":"2016-02-18 17:18:17.000000000","message":"This still does something, why wouldn\u0027t we at least leave this stub in the instance object while we have the EC2Ids object around for compat?","commit_id":"8a74b3c517ad8bd8b2e9fb3a65272700240e4964"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"67b7d99dd742e3873c23c9ad2c92bb819fd78cf5","unresolved":false,"context_lines":[{"line_number":808,"context_line":"                db_vcpu_model)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def _load_ec2_ids(self):"},{"line_number":811,"context_line":"        self.ec2_ids \u003d objects.EC2Ids.get_by_instance(self._context, self)"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"    def _load_security_groups(self):"},{"line_number":814,"context_line":"        self.security_groups \u003d objects.SecurityGroupList.get_by_instance("}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_8dc7f762","side":"PARENT","line":811,"range":{"start_line":811,"start_character":23,"end_line":811,"end_character":74},"in_reply_to":"dae33548_363d642b","updated":"2016-02-18 19:15:39.000000000","message":"mmm, So it should be deleted, right?","commit_id":"8a74b3c517ad8bd8b2e9fb3a65272700240e4964"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b1abca4eb6c2b72991d7ed360459d94d24ff9219","unresolved":false,"context_lines":[{"line_number":808,"context_line":"                db_vcpu_model)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def _load_ec2_ids(self):"},{"line_number":811,"context_line":"        self.ec2_ids \u003d objects.EC2Ids.get_by_instance(self._context, self)"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"    def _load_security_groups(self):"},{"line_number":814,"context_line":"        self.security_groups \u003d objects.SecurityGroupList.get_by_instance("}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_363d642b","side":"PARENT","line":811,"range":{"start_line":811,"start_character":23,"end_line":811,"end_character":74},"in_reply_to":"dae33548_76fd2cb0","updated":"2016-02-18 17:25:53.000000000","message":"Yeah. Even if we just leave it as a stub that loads an empty list, we can\u0027t just remove this.","commit_id":"8a74b3c517ad8bd8b2e9fb3a65272700240e4964"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e97094a6096509c11285217b6d1a24cc8547c2a0","unresolved":false,"context_lines":[{"line_number":55,"context_line":"INSTANCE_OPTIONAL_ATTRS \u003d (_INSTANCE_OPTIONAL_JOINED_FIELDS +"},{"line_number":56,"context_line":"                           _INSTANCE_OPTIONAL_NON_COLUMN_FIELDS +"},{"line_number":57,"context_line":"                           _INSTANCE_EXTRA_FIELDS +"},{"line_number":58,"context_line":"                           _INSTANCE_DEPRECATED_FIELDS)"},{"line_number":59,"context_line":"# These are fields that most query calls load by default"},{"line_number":60,"context_line":"INSTANCE_DEFAULT_FIELDS \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027,"},{"line_number":61,"context_line":"                           \u0027info_cache\u0027, \u0027security_groups\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_b6d85454","line":58,"range":{"start_line":58,"start_character":27,"end_line":58,"end_character":54},"updated":"2016-02-18 17:18:17.000000000","message":"Why do we need to add this to INSTANCE_OPTIONAL_ATTRS?","commit_id":"5569e440dc52fdfbc6677b53c9118f14025a4eb6"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"67b7d99dd742e3873c23c9ad2c92bb819fd78cf5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"INSTANCE_OPTIONAL_ATTRS \u003d (_INSTANCE_OPTIONAL_JOINED_FIELDS +"},{"line_number":56,"context_line":"                           _INSTANCE_OPTIONAL_NON_COLUMN_FIELDS +"},{"line_number":57,"context_line":"                           _INSTANCE_EXTRA_FIELDS +"},{"line_number":58,"context_line":"                           _INSTANCE_DEPRECATED_FIELDS)"},{"line_number":59,"context_line":"# These are fields that most query calls load by default"},{"line_number":60,"context_line":"INSTANCE_DEFAULT_FIELDS \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027,"},{"line_number":61,"context_line":"                           \u0027info_cache\u0027, \u0027security_groups\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_68170145","line":58,"range":{"start_line":58,"start_character":27,"end_line":58,"end_character":54},"in_reply_to":"dae33548_b6d85454","updated":"2016-02-18 19:15:39.000000000","message":"I didn\u0027t add this here, I leave it in this X_ATTRS list because it is needed in the code.","commit_id":"5569e440dc52fdfbc6677b53c9118f14025a4eb6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e97094a6096509c11285217b6d1a24cc8547c2a0","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        \u0027old_flavor\u0027: fields.ObjectField(\u0027Flavor\u0027, nullable\u003dTrue),"},{"line_number":188,"context_line":"        \u0027new_flavor\u0027: fields.ObjectField(\u0027Flavor\u0027, nullable\u003dTrue),"},{"line_number":189,"context_line":"        \u0027vcpu_model\u0027: fields.ObjectField(\u0027VirtCPUModel\u0027, nullable\u003dTrue),"},{"line_number":190,"context_line":"        \u0027ec2_ids\u0027: fields.ObjectField(\u0027EC2Ids\u0027),"},{"line_number":191,"context_line":"        \u0027migration_context\u0027: fields.ObjectField(\u0027MigrationContext\u0027,"},{"line_number":192,"context_line":"                                                nullable\u003dTrue)"},{"line_number":193,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_d6bcf8dd","line":190,"updated":"2016-02-18 17:18:17.000000000","message":"Seems we should make this nullable\u003dTrue if we aren\u0027t going to honor loading it anymore.","commit_id":"5569e440dc52fdfbc6677b53c9118f14025a4eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b1abca4eb6c2b72991d7ed360459d94d24ff9219","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        \u0027old_flavor\u0027: fields.ObjectField(\u0027Flavor\u0027, nullable\u003dTrue),"},{"line_number":188,"context_line":"        \u0027new_flavor\u0027: fields.ObjectField(\u0027Flavor\u0027, nullable\u003dTrue),"},{"line_number":189,"context_line":"        \u0027vcpu_model\u0027: fields.ObjectField(\u0027VirtCPUModel\u0027, nullable\u003dTrue),"},{"line_number":190,"context_line":"        \u0027ec2_ids\u0027: fields.ObjectField(\u0027EC2Ids\u0027),"},{"line_number":191,"context_line":"        \u0027migration_context\u0027: fields.ObjectField(\u0027MigrationContext\u0027,"},{"line_number":192,"context_line":"                                                nullable\u003dTrue)"},{"line_number":193,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":29,"id":"dae33548_76d52ce3","line":190,"in_reply_to":"dae33548_d6bcf8dd","updated":"2016-02-18 17:25:53.000000000","message":"We can\u0027t really do this without breaking older clients. We can not pass it, if the older code won\u0027t choke on it.","commit_id":"5569e440dc52fdfbc6677b53c9118f14025a4eb6"}],"releasenotes/notes/cleanup_ec2_objects.yaml-375471939726f5c1.yaml":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"435f7fcbc4c27907032816c6039110e012c9ed7e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Replace this text with content to appear at the"},{"line_number":4,"context_line":"    top of the section for this release. All of the"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"3a57f1b5_587926c7","line":1,"updated":"2016-02-12 12:03:05.000000000","message":"Um... this is just boiler plate, needs to be updated.","commit_id":"603396beda00ee083c0c25df6a2db272bfe10377"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"229a3fa980a7ab5d8490a88db2314b112c1e4ec0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Replace this text with content to appear at the"},{"line_number":4,"context_line":"    top of the section for this release. All of the"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"3a57f1b5_f34ef36d","line":1,"in_reply_to":"3a57f1b5_587926c7","updated":"2016-02-12 12:07:44.000000000","message":"ops, I thought tool will copy content from my file...","commit_id":"603396beda00ee083c0c25df6a2db272bfe10377"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a35e03cd95758442d3b923d36f8ec58cbd7c05ec","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Object \u0027EC2Ids\u0027 has been cleaned up and left as dumb object"},{"line_number":4,"context_line":"    with its properties not to break compatibility."},{"line_number":5,"context_line":"    Normally when upgrading you start with the conductors, before you"},{"line_number":6,"context_line":"    upgrade api services etc. These objects was only used by the"},{"line_number":7,"context_line":"    ec2-api and s3 services. If before upgrading the conductors,"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"dae33548_d3652a1e","line":4,"range":{"start_line":3,"start_character":4,"end_line":4,"end_character":51},"updated":"2016-02-18 17:10:04.000000000","message":"These are technical details that an operator probably doesn\u0027t need to know. This would be more appropriate in the commit message.","commit_id":"5569e440dc52fdfbc6677b53c9118f14025a4eb6"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"fbea5a8c08379d4d4185586c60887e356b3ae64e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Object \u0027EC2Ids\u0027 has been cleaned up and left as dumb object"},{"line_number":4,"context_line":"    with its properties not to break compatibility."},{"line_number":5,"context_line":"    Normally when upgrading you start with the conductors, before you"},{"line_number":6,"context_line":"    upgrade api services etc. These objects was only used by the"},{"line_number":7,"context_line":"    ec2-api and s3 services. If before upgrading the conductors,"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"dae33548_48d4bdea","line":4,"range":{"start_line":3,"start_character":4,"end_line":4,"end_character":51},"in_reply_to":"dae33548_d3652a1e","updated":"2016-02-18 19:16:29.000000000","message":"I\u0027ll rework this.","commit_id":"5569e440dc52fdfbc6677b53c9118f14025a4eb6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a35e03cd95758442d3b923d36f8ec58cbd7c05ec","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Object \u0027EC2Ids\u0027 has been cleaned up and left as dumb object"},{"line_number":4,"context_line":"    with its properties not to break compatibility."},{"line_number":5,"context_line":"    Normally when upgrading you start with the conductors, before you"},{"line_number":6,"context_line":"    upgrade api services etc. These objects was only used by the"},{"line_number":7,"context_line":"    ec2-api and s3 services. If before upgrading the conductors,"},{"line_number":8,"context_line":"    you start by removing existing ec2 related services (which you"},{"line_number":9,"context_line":"    should be doing anyhow since we remove support for them in Mitaka),"},{"line_number":10,"context_line":"    then this shouldn\u0027t be a problem."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"dae33548_53611a04","line":7,"range":{"start_line":6,"start_character":30,"end_line":7,"end_character":28},"updated":"2016-02-18 17:10:04.000000000","message":"Along the same lines as above, seems this is better info in the commit message rather than for an operator.","commit_id":"5569e440dc52fdfbc6677b53c9118f14025a4eb6"}]}
