)]}'
{"nova/db/sqlalchemy/migrate_repo/versions/378_add_trusted_certs.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9792dfc47bbf36a7c4619bdcaacf9e54c760ca9e","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":29,"context_line":"        table \u003d Table(prefix + BASE_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"        new_column \u003d Column(NEW_COLUMN_NAME, Text, nullable\u003dTrue)"},{"line_number":31,"context_line":"        if not hasattr(table.c, NEW_COLUMN_NAME):"},{"line_number":32,"context_line":"            table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f96bb07_f760f0a7","line":30,"range":{"start_line":30,"start_character":45,"end_line":30,"end_character":49},"updated":"2018-01-15 19:44:55.000000000","message":"So, MySQL\u0027s TEXT column type stores up to 64KB of data. Just verifying that this should be enough space to store the serialized TrustedCerts object for the cert IDs?","commit_id":"2eeedc21970990b02d478460c7a4e4f6df9e9e30"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"4026b1fbb3a5cc2972ec97e5cdc88242b18b0584","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":29,"context_line":"        table \u003d Table(prefix + BASE_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"        new_column \u003d Column(NEW_COLUMN_NAME, Text, nullable\u003dTrue)"},{"line_number":31,"context_line":"        if not hasattr(table.c, NEW_COLUMN_NAME):"},{"line_number":32,"context_line":"            table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f96bb07_dd5dd5e9","line":30,"range":{"start_line":30,"start_character":45,"end_line":30,"end_character":49},"in_reply_to":"7f96bb07_f760f0a7","updated":"2018-01-15 20:40:45.000000000","message":"I believe 64KB should be sufficient. At least, similar instance objects are stored in a similar manner [1][2].\n\n[1] https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/migrate_repo/versions/276_vcpu_model.py#L30\n[2] https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/migrate_repo/versions/251_add_numa_topology_to_comput_nodes.py#L27","commit_id":"2eeedc21970990b02d478460c7a4e4f6df9e9e30"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"18a8088520ed5b1df82e2ddaa3ae0f055bed2396","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        table \u003d Table(prefix + BASE_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"        new_column \u003d Column(NEW_COLUMN_NAME, Text, nullable\u003dTrue)"},{"line_number":31,"context_line":"        if not hasattr(table.c, NEW_COLUMN_NAME):"},{"line_number":32,"context_line":"            table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_f59a936c","line":32,"updated":"2018-01-24 22:52:57.000000000","message":"This really should be in its own patch. That helps ensure that the existing code continues to run independent of this change to the schema. That in turn helps us ensure that DB schema from N+1 can be applied to a running N system without disruption.\n\nJust pull out the schema change and associated tests from your use of it.","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"f097fe4e18cc58a495f390718074c4ed2e2f4254","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        table \u003d Table(prefix + BASE_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"        new_column \u003d Column(NEW_COLUMN_NAME, Text, nullable\u003dTrue)"},{"line_number":31,"context_line":"        if not hasattr(table.c, NEW_COLUMN_NAME):"},{"line_number":32,"context_line":"            table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_c7e6b6e9","line":32,"in_reply_to":"5f93b717_8e5bf92c","updated":"2018-01-25 13:25:35.000000000","message":"I\u0027ve pulled it into it\u0027s own patch, and made it part of the chain.  See: https://review.openstack.org/#/c/537897/","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"e705bdca2bbe9df3ffd31bb7d524e84b0775fbf9","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        table \u003d Table(prefix + BASE_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"        new_column \u003d Column(NEW_COLUMN_NAME, Text, nullable\u003dTrue)"},{"line_number":31,"context_line":"        if not hasattr(table.c, NEW_COLUMN_NAME):"},{"line_number":32,"context_line":"            table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_8e5bf92c","line":32,"in_reply_to":"5f93b717_f59a936c","updated":"2018-01-25 02:45:14.000000000","message":"@Dan Smith: I can do that, but it was previously suggested that we combine the database and object patches. See Sean Dague\u0027s last comment on this abandoned patch [1].\n\n[1] https://review.openstack.org/#/c/457711/","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"}],"nova/objects/instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"18a8088520ed5b1df82e2ddaa3ae0f055bed2396","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                instance._load_trusted_certs("},{"line_number":413,"context_line":"                    db_inst[\u0027extra\u0027].get(\u0027trusted_certs\u0027))"},{"line_number":414,"context_line":"            else:"},{"line_number":415,"context_line":"                instance.trusted_certs \u003d None"},{"line_number":416,"context_line":"        if \u0027info_cache\u0027 in expected_attrs:"},{"line_number":417,"context_line":"            if db_inst.get(\u0027info_cache\u0027) is None:"},{"line_number":418,"context_line":"                instance.info_cache \u003d None"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_7513e30e","line":415,"updated":"2018-01-24 22:52:57.000000000","message":"As the complexity checker has indicated, this whole section is getting really long. Can you please just break these all out into helper? self._process_optional_attributes() or something like that. Ideally done in a patch before this one where you add another thing, so we can distinguish the refactor from the functional addition.","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"ac4d72085554fc8f953526ca3b594fb47f4b91fc","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                instance._load_trusted_certs("},{"line_number":413,"context_line":"                    db_inst[\u0027extra\u0027].get(\u0027trusted_certs\u0027))"},{"line_number":414,"context_line":"            else:"},{"line_number":415,"context_line":"                instance.trusted_certs \u003d None"},{"line_number":416,"context_line":"        if \u0027info_cache\u0027 in expected_attrs:"},{"line_number":417,"context_line":"            if db_inst.get(\u0027info_cache\u0027) is None:"},{"line_number":418,"context_line":"                instance.info_cache \u003d None"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_543d84b9","line":415,"in_reply_to":"5f93b717_4ecc1189","updated":"2018-01-25 03:15:29.000000000","message":"Done. https://review.openstack.org/#/c/537728/","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"e705bdca2bbe9df3ffd31bb7d524e84b0775fbf9","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                instance._load_trusted_certs("},{"line_number":413,"context_line":"                    db_inst[\u0027extra\u0027].get(\u0027trusted_certs\u0027))"},{"line_number":414,"context_line":"            else:"},{"line_number":415,"context_line":"                instance.trusted_certs \u003d None"},{"line_number":416,"context_line":"        if \u0027info_cache\u0027 in expected_attrs:"},{"line_number":417,"context_line":"            if db_inst.get(\u0027info_cache\u0027) is None:"},{"line_number":418,"context_line":"                instance.info_cache \u003d None"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_4ecc1189","line":415,"in_reply_to":"5f93b717_7513e30e","updated":"2018-01-25 02:45:14.000000000","message":"@Dan Smith: I can do that, but note that we will essentially be calling a helper method from a helper method.","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"}],"nova/objects/trusted_certs.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"6aea4665edf403d7ddb34685503de4dc725bfe32","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    fields \u003d {"},{"line_number":26,"context_line":"        \u0027uuids\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def obj_load_attr(self, attrname):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f515b1d_d063a6dc","line":26,"updated":"2017-10-05 19:36:31.000000000","message":"In the spec I thought you said that certificates need not be uuids. If that\u0027s true, this should probably just be called \u0027ids\u0027 instead.","commit_id":"d260ce95acad870d0c83c1fb24a56f6198be6da7"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"d1751c7250dec00de2dfb3779878badaf900872c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    fields \u003d {"},{"line_number":26,"context_line":"        \u0027uuids\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def obj_load_attr(self, attrname):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f515b1d_e7246d62","line":26,"in_reply_to":"7f515b1d_d063a6dc","updated":"2017-10-08 22:03:44.000000000","message":"Yes, certificates need not be uuids. This will be updated to \u0027ids\u0027 in the next patch update.","commit_id":"d260ce95acad870d0c83c1fb24a56f6198be6da7"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"6aea4665edf403d7ddb34685503de4dc725bfe32","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @base.remotable_classmethod"},{"line_number":33,"context_line":"    def get_by_instance_uuid(cls, context, instance_uuid):"},{"line_number":34,"context_line":"        db_extra \u003d db.instance_extra_get_by_instance_uuid("},{"line_number":35,"context_line":"                context, instance_uuid, columns\u003d[\u0027trusted_certs\u0027])"},{"line_number":36,"context_line":"        if not db_extra or not db_extra[\u0027trusted_certs\u0027]:"},{"line_number":37,"context_line":"            return None"},{"line_number":38,"context_line":"        return cls.obj_from_primitive("}],"source_content_type":"text/x-python","patch_set":16,"id":"7f515b1d_703632b7","line":35,"range":{"start_line":35,"start_character":50,"end_line":35,"end_character":63},"updated":"2017-10-05 19:36:31.000000000","message":"shouldn\u0027t there have been a db migration to create this?","commit_id":"d260ce95acad870d0c83c1fb24a56f6198be6da7"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"d1751c7250dec00de2dfb3779878badaf900872c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @base.remotable_classmethod"},{"line_number":33,"context_line":"    def get_by_instance_uuid(cls, context, instance_uuid):"},{"line_number":34,"context_line":"        db_extra \u003d db.instance_extra_get_by_instance_uuid("},{"line_number":35,"context_line":"                context, instance_uuid, columns\u003d[\u0027trusted_certs\u0027])"},{"line_number":36,"context_line":"        if not db_extra or not db_extra[\u0027trusted_certs\u0027]:"},{"line_number":37,"context_line":"            return None"},{"line_number":38,"context_line":"        return cls.obj_from_primitive("}],"source_content_type":"text/x-python","patch_set":16,"id":"7f515b1d_c7297137","line":35,"range":{"start_line":35,"start_character":50,"end_line":35,"end_character":63},"in_reply_to":"7f515b1d_703632b7","updated":"2017-10-08 22:03:44.000000000","message":"We have a corresponding database migration patch:\n\nhttps://review.openstack.org/#/c/457711/","commit_id":"d260ce95acad870d0c83c1fb24a56f6198be6da7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9792dfc47bbf36a7c4619bdcaacf9e54c760ca9e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        \u0027ids\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":30,"context_line":"        setattr(self, attrname, None)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @base.remotable_classmethod"},{"line_number":33,"context_line":"    def get_by_instance_uuid(cls, context, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f96bb07_f74c709f","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":37},"updated":"2018-01-15 19:44:55.000000000","message":"any reason you\u0027re doing this? I don\u0027t believe this is necessary, as oslo_versionedobjects.base.VersionedObjects.obj_from_primitive() calls setattr already...","commit_id":"2eeedc21970990b02d478460c7a4e4f6df9e9e30"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"4026b1fbb3a5cc2972ec97e5cdc88242b18b0584","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        \u0027ids\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":30,"context_line":"        setattr(self, attrname, None)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @base.remotable_classmethod"},{"line_number":33,"context_line":"    def get_by_instance_uuid(cls, context, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f96bb07_a2cc6461","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":37},"in_reply_to":"7f96bb07_f74c709f","updated":"2018-01-15 20:40:45.000000000","message":"Oops, thanks for pointing that out. This was copied over from nova/objects/vcpu_model.py.","commit_id":"2eeedc21970990b02d478460c7a4e4f6df9e9e30"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"18a8088520ed5b1df82e2ddaa3ae0f055bed2396","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    fields \u003d {"},{"line_number":26,"context_line":"        \u0027ids\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_f573734c","line":26,"updated":"2018-01-24 22:52:57.000000000","message":"Just to be clear, this should actually be nullable, right? Because nullable means \"can be set to None\". Would it make more sense for this to be non-nullable so we always have an empty list enforced here? Otherwise everyone has to do:\n\n if foo.ids !\u003d none:\n     do_thing_with_ids(foo.ids)","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"fb45a1037dffe415d27a0894e8afcdecac6fe6cb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    fields \u003d {"},{"line_number":26,"context_line":"        \u0027ids\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_5a0e0be6","line":26,"in_reply_to":"5f93b717_4e73b1e8","updated":"2018-01-25 04:50:27.000000000","message":"Done","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"e705bdca2bbe9df3ffd31bb7d524e84b0775fbf9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    fields \u003d {"},{"line_number":26,"context_line":"        \u0027ids\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f93b717_4e73b1e8","line":26,"in_reply_to":"5f93b717_f573734c","updated":"2018-01-25 02:45:14.000000000","message":"Yes, the plan was to make this nullable, but it doesn\u0027t look like that\u0027s necessary afterall.","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8a39d42edce77cc2c89697a24db1592d97791365","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    fields \u003d {"},{"line_number":26,"context_line":"        \u0027ids\u0027: fields.ListOfStringsField(nullable\u003dFalse),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":44,"id":"5f93b717_6040e336","line":26,"range":{"start_line":26,"start_character":41,"end_line":26,"end_character":55},"updated":"2018-01-25 17:52:50.000000000","message":"You don\u0027t need this as it\u0027s the default, but not hurting anything of course.","commit_id":"5a3c78ba5fb290f76296a60cb5de36bfac2fe643"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8a39d42edce77cc2c89697a24db1592d97791365","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        if not db_extra or not db_extra[\u0027trusted_certs\u0027]:"},{"line_number":34,"context_line":"            return None"},{"line_number":35,"context_line":"        return cls.obj_from_primitive("},{"line_number":36,"context_line":"            jsonutils.loads(db_extra[\u0027trusted_certs\u0027]))"}],"source_content_type":"text/x-python","patch_set":44,"id":"5f93b717_406047cf","line":36,"updated":"2018-01-25 17:52:50.000000000","message":"You need a new unit test file for this right? It might be covered by instance\u0027s use of it, but there should be a test_trusted_certs.py file added so you can run this, so you get the remotable/non-remotable check, and so people can add things in the future easily without claiming \"there are no tests for this object!\"","commit_id":"5a3c78ba5fb290f76296a60cb5de36bfac2fe643"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2d7212eb58b4187400d1e1dab03f392a35fabba7","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @base.remotable_classmethod"},{"line_number":30,"context_line":"    def get_by_instance_uuid(cls, context, instance_uuid):"},{"line_number":31,"context_line":"        db_extra \u003d db.instance_extra_get_by_instance_uuid("},{"line_number":32,"context_line":"                context, instance_uuid, columns\u003d[\u0027trusted_certs\u0027])"},{"line_number":33,"context_line":"        if not db_extra or not db_extra[\u0027trusted_certs\u0027]:"},{"line_number":34,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":48,"id":"df7087c5_24cbe01e","line":31,"updated":"2018-03-19 16:33:05.000000000","message":"I am always tempted by an object functional test for these things, but I am happy if Dan is happy on just doing a unit test. This isn\u0027t a new thing after all.","commit_id":"859455f5c3e3e86b941d9347ba90a7d6500e7888"}],"tox.ini":[{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1f8ac3a83985589e301105027874fa1a56d2b864","unresolved":false,"context_lines":[{"line_number":180,"context_line":"exclude \u003d  .venv,.git,.tox,dist,*lib/python*,*egg,build,tools/xenserver*,releasenotes"},{"line_number":181,"context_line":"# To get a list of functions that are more complex than 25, set max-complexity"},{"line_number":182,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":183,"context_line":"# 34 is currently the most complex thing we have"},{"line_number":184,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":185,"context_line":"max-complexity\u003d38"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"9f436f4f_6a27a814","line":183,"range":{"start_line":183,"start_character":2,"end_line":183,"end_character":4},"updated":"2017-08-08 18:03:13.000000000","message":"This should be updated too","commit_id":"b32cd38521d1edb99b6b894dee8feebd3d982a9f"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"6aea4665edf403d7ddb34685503de4dc725bfe32","unresolved":false,"context_lines":[{"line_number":183,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":184,"context_line":"# 38 is currently the most complex thing we have"},{"line_number":185,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":186,"context_line":"max-complexity\u003d38"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"[hacking]"},{"line_number":189,"context_line":"local-check-factory \u003d nova.hacking.checks.factory"}],"source_content_type":"text/x-properties","patch_set":16,"id":"7f515b1d_d0a846da","line":186,"updated":"2017-10-05 19:36:31.000000000","message":"which thing is triggering this? I don\u0027t think we want to drive this up unless we really need to.","commit_id":"d260ce95acad870d0c83c1fb24a56f6198be6da7"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"d1751c7250dec00de2dfb3779878badaf900872c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":184,"context_line":"# 38 is currently the most complex thing we have"},{"line_number":185,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":186,"context_line":"max-complexity\u003d38"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"[hacking]"},{"line_number":189,"context_line":"local-check-factory \u003d nova.hacking.checks.factory"}],"source_content_type":"text/x-properties","patch_set":16,"id":"7f515b1d_87e4990e","line":186,"in_reply_to":"7f515b1d_d0a846da","updated":"2017-10-08 22:03:44.000000000","message":"The addition of L411-416 to _from_db_object triggers this. It seems that increasing max-complexity has been done in the past for the same reason. I don\u0027t see a clean way of refactoring the code to avoid this.\n\nIt looks like the nova team is aware that there should be some action taken to get this number down to 25 or so (see TODO on L185).","commit_id":"d260ce95acad870d0c83c1fb24a56f6198be6da7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"579f697e82d40da00b7a6e8b455f2c214977aad4","unresolved":false,"context_lines":[{"line_number":204,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":205,"context_line":"# 38 is currently the most complex thing we have"},{"line_number":206,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":207,"context_line":"max-complexity\u003d38"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"[hacking]"},{"line_number":210,"context_line":"local-check-factory \u003d nova.hacking.checks.factory"}],"source_content_type":"text/x-properties","patch_set":36,"id":"5f93b717_bc0158b2","line":207,"updated":"2018-01-24 21:07:10.000000000","message":"This is kind of a giant red flag. This is a huge bump. Does this code really need this large of a bump? I can\u0027t remember the last time we had to bump this by even a single digit.","commit_id":"ee1127587d39a6a1bdea770730fe3a0facd1a161"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"e278e5ebae750afdc0e7eccf07cf2071e18d51b0","unresolved":false,"context_lines":[{"line_number":204,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":205,"context_line":"# 38 is currently the most complex thing we have"},{"line_number":206,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":207,"context_line":"max-complexity\u003d38"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"[hacking]"},{"line_number":210,"context_line":"local-check-factory \u003d nova.hacking.checks.factory"}],"source_content_type":"text/x-properties","patch_set":36,"id":"5f93b717_fc75a0cd","line":207,"in_reply_to":"5f93b717_bc0158b2","updated":"2018-01-24 21:34:12.000000000","message":"I agree that this isn\u0027t ideal, but the addition of instance extra fields requires a bit more complexity. See previous comment [1]. It looks like we /can/ decrease to max-complexity of 37, though.\n\n[1] https://review.openstack.org/#/c/489408/16/tox.ini","commit_id":"ee1127587d39a6a1bdea770730fe3a0facd1a161"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"4b72ae411dbf3b8ad66009e5f49c405de712e6ce","unresolved":false,"context_lines":[{"line_number":204,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":205,"context_line":"# 38 is currently the most complex thing we have"},{"line_number":206,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":207,"context_line":"max-complexity\u003d37"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"[hacking]"},{"line_number":210,"context_line":"local-check-factory \u003d nova.hacking.checks.factory"}],"source_content_type":"text/x-properties","patch_set":38,"id":"5f93b717_3fb77a89","line":207,"range":{"start_line":207,"start_character":0,"end_line":207,"end_character":17},"updated":"2018-01-24 21:52:54.000000000","message":"The bump is due to the modification to Instance._from_db_object in nova/objects/instance.py to support trusted certificates. \n\nOn nova master, a max-complexity \u003c35 causes the following error:\nnova/objects/instance.py:336:1: C901 \u0027Instance._from_db_object\u0027 is too complex (34)\n\nWith this patch, a max-complexity \u003c37 causes the following error:\nnova/objects/instance.py:340:1: C901 \u0027Instance._from_db_object\u0027 is too complex (36)","commit_id":"33027571058dd5e94c463d577ac1919c1bbe208a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"18a8088520ed5b1df82e2ddaa3ae0f055bed2396","unresolved":false,"context_lines":[{"line_number":204,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":205,"context_line":"# 38 is currently the most complex thing we have"},{"line_number":206,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":207,"context_line":"max-complexity\u003d37"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"[hacking]"},{"line_number":210,"context_line":"local-check-factory \u003d nova.hacking.checks.factory"}],"source_content_type":"text/x-properties","patch_set":38,"id":"5f93b717_d553d7e1","line":207,"range":{"start_line":207,"start_character":0,"end_line":207,"end_character":17},"in_reply_to":"5f93b717_3fb77a89","updated":"2018-01-24 22:52:57.000000000","message":"Okay, so please refactor the method. This is set here for a reason, and you tripping it means something :)","commit_id":"33027571058dd5e94c463d577ac1919c1bbe208a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"18a8088520ed5b1df82e2ddaa3ae0f055bed2396","unresolved":false,"context_lines":[{"line_number":204,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":205,"context_line":"# 36 is currently the most complex thing we have"},{"line_number":206,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":207,"context_line":"max-complexity\u003d37"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"[hacking]"},{"line_number":210,"context_line":"local-check-factory \u003d nova.hacking.checks.factory"}],"source_content_type":"text/x-properties","patch_set":39,"id":"5f93b717_b593ab4f","line":207,"updated":"2018-01-24 22:52:57.000000000","message":"Again, please refactor to avoid this.","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"66b2f56f8b3927c1ddbbc34d4b5ac9039e7f2d62","unresolved":false,"context_lines":[{"line_number":204,"context_line":"# to 25 and run \u0027tox -epep8\u0027."},{"line_number":205,"context_line":"# 36 is currently the most complex thing we have"},{"line_number":206,"context_line":"# TODO(jogo): get this number down to 25 or so"},{"line_number":207,"context_line":"max-complexity\u003d37"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"[hacking]"},{"line_number":210,"context_line":"local-check-factory \u003d nova.hacking.checks.factory"}],"source_content_type":"text/x-properties","patch_set":39,"id":"5f93b717_55e6e7ea","line":207,"in_reply_to":"5f93b717_b593ab4f","updated":"2018-01-24 22:54:57.000000000","message":"Yeah, this hasn\u0027t been touched in two years, and that was to reduce the limit to 35. Please refactor and don\u0027t send us backwards :)","commit_id":"30929a76124a9db8f12e2cf70a389419a9437a42"}]}
