)]}'
{"nova/api/openstack/compute/flavor_manage.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5906875e7f982259a47786835063f57b2f6f7359","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    # NOTE(oomichi): Return 200 for backwards compatibility but should be 201"},{"line_number":95,"context_line":"    # as this operation complete the creation of flavor resource."},{"line_number":96,"context_line":"    @wsgi.Controller.api_version(\"2.28\")  # noqa"},{"line_number":97,"context_line":"    @wsgi.action(\"create\")"},{"line_number":98,"context_line":"    @extensions.expected_errors((400, 409))"},{"line_number":99,"context_line":"    @validation.schema(flavor_manage.create_v20, \u00272.0\u0027, \u00272.0\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_3a03c5b9","line":96,"updated":"2016-06-01 09:33:57.000000000","message":"This is bad, its a big cut and paste.\n\nI expect to see at least and updated validation schema for this version.\n\nNote you can inspect the req object inside the above create method to see which version it is.","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5906875e7f982259a47786835063f57b2f6f7359","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    @wsgi.action(\"create\")"},{"line_number":98,"context_line":"    @extensions.expected_errors((400, 409))"},{"line_number":99,"context_line":"    @validation.schema(flavor_manage.create_v20, \u00272.0\u0027, \u00272.0\u0027)"},{"line_number":100,"context_line":"    @validation.schema(flavor_manage.create, \u00272.1\u0027)"},{"line_number":101,"context_line":"    def _create(self, req, body):"},{"line_number":102,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":103,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_7abd4dd7","line":100,"updated":"2016-06-01 09:33:57.000000000","message":"you surely need to update the validation schema to allow the new local_disks value for this version only.","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5906875e7f982259a47786835063f57b2f6f7359","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        swap \u003d vals.get(\u0027swap\u0027, 0)"},{"line_number":114,"context_line":"        rxtx_factor \u003d vals.get(\u0027rxtx_factor\u0027, 1.0)"},{"line_number":115,"context_line":"        is_public \u003d vals.get(\u0027os-flavor-access:is_public\u0027, True)"},{"line_number":116,"context_line":"        local_disks \u003d vals.get(\u0027local_disks\u0027, True)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        try:"},{"line_number":119,"context_line":"            flavor \u003d flavors.create(name, memory, vcpus, root_gb,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_1a1521e4","line":116,"updated":"2016-06-01 09:33:57.000000000","message":"you could just add this into the above method.","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5906875e7f982259a47786835063f57b2f6f7359","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003d_("},{"line_number":133,"context_line":"                \u0027Not all flavors have been migrated to the API database\u0027))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        return self._view_builder.show(req, flavor)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"class FlavorManage(extensions.V21APIExtensionBase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_ba597590","line":135,"updated":"2016-06-01 09:33:57.000000000","message":"Note, I don\u0027t see any of the required functional tests being added here.\n\nPlease seem similar microversion adds to see what is required.","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"}],"nova/api/openstack/compute/flavors.py":[{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"75fc827838dc4a08ca38a3bb82d21508423403d6","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            req.cache_db_flavor(flavor)"},{"line_number":56,"context_line":"        except exception.FlavorNotFound as e:"},{"line_number":57,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        return self._view_builder.show(req, flavor)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _parse_is_public(self, is_public):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_49ec508f","side":"PARENT","line":58,"updated":"2016-06-08 09:07:16.000000000","message":"Not releated to the change","commit_id":"5b0773f53a70564cb19003f0480e84e59d34c963"}],"nova/api/openstack/compute/views/flavors.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5906875e7f982259a47786835063f57b2f6f7359","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                \"ram\": flavor[\"memory_mb\"],"},{"line_number":40,"context_line":"                \"disk\": flavor[\"root_gb\"],"},{"line_number":41,"context_line":"                \"vcpus\": flavor.get(\"vcpus\") or \"\","},{"line_number":42,"context_line":"                \"local_disks\": flavor[\"local_disks\"],"},{"line_number":43,"context_line":"                \"links\": self._get_links(request,"},{"line_number":44,"context_line":"                                         flavor[\"flavorid\"],"},{"line_number":45,"context_line":"                                         self._collection_name),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_3a9f4560","line":42,"updated":"2016-06-01 09:33:57.000000000","message":"You must only do this for the new micro version, so this has to be optional, and only shown if the correct version is requested","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"}],"nova/compute/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5906875e7f982259a47786835063f57b2f6f7359","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        # Target disk is a local disk whose size is taken from the flavor"},{"line_number":652,"context_line":"        else:"},{"line_number":653,"context_line":"            if instance_type[\u0027local_disks\u0027] is False:"},{"line_number":654,"context_line":"                raise exception.FlavorLocalDisksDisabled"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"            dest_size \u003d instance_type[\u0027root_gb\u0027] * units.Gi"},{"line_number":657,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_1a71a144","line":654,"range":{"start_line":654,"start_character":32,"end_line":654,"end_character":56},"updated":"2016-06-01 09:33:57.000000000","message":"will this not generate a 500 error in the API if it is not handled?","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"}],"nova/compute/flavors.py":[{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"75fc827838dc4a08ca38a3bb82d21508423403d6","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    if local_disks is False:"},{"line_number":136,"context_line":"        if (root_gb \u003e 0) or (ephemeral_gb \u003e 0) or (swap \u003e 0):"},{"line_number":137,"context_line":"            msg \u003d _(\"When local_disks are disabled, root_gb, ephemeral_gb and \""},{"line_number":138,"context_line":"                    \"swap must not be set.\")"},{"line_number":139,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_445c35ed","line":137,"range":{"start_line":137,"start_character":21,"end_line":137,"end_character":25},"updated":"2016-06-08 09:07:16.000000000","message":"s/When/If/","commit_id":"77929b2b6ab31f8b84d19a58dc6aa5eb01ac7faf"}],"nova/db/sqlalchemy/api_models.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ad366c65f681201e93f8f99bfdc01c7617096e5","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    vcpu_weight \u003d Column(Integer)"},{"line_number":183,"context_line":"    disabled \u003d Column(Boolean, default\u003dFalse)"},{"line_number":184,"context_line":"    is_public \u003d Column(Boolean, default\u003dTrue)"},{"line_number":185,"context_line":"    local_disks \u003d Column(Boolean, default\u003dTrue)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class FlavorExtraSpecs(API_BASE):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3aaa91ec_d7f30009","line":185,"updated":"2016-06-22 12:18:04.000000000","message":"I wonder if allow_local_disks is more accurate name for this?","commit_id":"a8f20586aff63f8b2dede9b324f04fd1405e75ff"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"368574a3cdc1273c30cbe4e75b2199fdfb1f689c","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    vcpu_weight \u003d Column(Integer)"},{"line_number":183,"context_line":"    disabled \u003d Column(Boolean, default\u003dFalse)"},{"line_number":184,"context_line":"    is_public \u003d Column(Boolean, default\u003dTrue)"},{"line_number":185,"context_line":"    local_disks \u003d Column(Boolean, default\u003dTrue)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class FlavorExtraSpecs(API_BASE):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3aaa91ec_a987fc0d","line":185,"in_reply_to":"3aaa91ec_d7f30009","updated":"2016-06-22 12:38:31.000000000","message":"Ignore me, this matches the API, lets go with this one.","commit_id":"a8f20586aff63f8b2dede9b324f04fd1405e75ff"}],"nova/db/sqlalchemy/migrate_repo/versions/333_local_disks_to_instance_types.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6d73aaf3df435a0e449112faf1ea32f277c936ed","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    meta \u003d MetaData()"},{"line_number":22,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    column_name \u003d \u0027local_disks\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":27,"context_line":"        table \u003d Table(prefix + \u0027instance_types\u0027, meta, autoload\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_7d29c789","line":24,"updated":"2016-06-01 09:34:38.000000000","message":"not sure we want this one.","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"}],"nova/db/sqlalchemy/migrate_repo/versions/334_local_disks_to_instance_types.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"48facb2033da5edb27eccf67d1b3b4c4ff93a00c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        table \u003d Table(prefix + \u0027instance_types\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":"        new_column \u003d Column(\u0027local_disks\u0027, Boolean, default\u003dTrue)"},{"line_number":27,"context_line":"        if not hasattr(table.c, \u0027local_disks\u0027):"},{"line_number":28,"context_line":"            table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3aaa91ec_1c976f91","line":28,"updated":"2016-06-22 12:04:17.000000000","message":"is there a concern about the alter cost here given that this includes setting a default, which means it\u0027s a data migration (even though not obviously so).","commit_id":"a8f20586aff63f8b2dede9b324f04fd1405e75ff"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3b9fc64e2a079cf1df232a02566589c18651ecc0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        table \u003d Table(prefix + \u0027instance_types\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":"        new_column \u003d Column(\u0027local_disks\u0027, Boolean, default\u003dTrue)"},{"line_number":27,"context_line":"        if not hasattr(table.c, \u0027local_disks\u0027):"},{"line_number":28,"context_line":"            table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3aaa91ec_bc03bb72","line":28,"in_reply_to":"3aaa91ec_1c976f91","updated":"2016-06-22 12:11:57.000000000","message":"So I thought updating the default value generally only changes the table metadata.\n\nAlthough in other news, I thought we were not meant to be updating these older flavors tables.","commit_id":"a8f20586aff63f8b2dede9b324f04fd1405e75ff"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"16c406aac9d7f284accdfb31e60082ae0f43ecd5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        table \u003d Table(prefix + \u0027instance_types\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":"        new_column \u003d Column(\u0027local_disks\u0027, Boolean, default\u003dTrue)"},{"line_number":27,"context_line":"        if not hasattr(table.c, \u0027local_disks\u0027):"},{"line_number":28,"context_line":"            table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3aaa91ec_82881524","line":28,"in_reply_to":"3aaa91ec_bc03bb72","updated":"2016-06-22 13:27:06.000000000","message":"I started with having only the migration in the new api db flavors table. But a bunch of tests still use instance_types tables from the old db","commit_id":"a8f20586aff63f8b2dede9b324f04fd1405e75ff"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6d73aaf3df435a0e449112faf1ea32f277c936ed","unresolved":false,"context_lines":[{"line_number":413,"context_line":"    vcpu_weight \u003d Column(Integer)"},{"line_number":414,"context_line":"    disabled \u003d Column(Boolean, default\u003dFalse)"},{"line_number":415,"context_line":"    is_public \u003d Column(Boolean, default\u003dTrue)"},{"line_number":416,"context_line":"    local_disks \u003d Column(Boolean, default\u003dTrue)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"class Quota(BASE, NovaBase, models.SoftDeleteMixin):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_1d187b74","line":416,"updated":"2016-06-01 09:34:38.000000000","message":"I am not sure we want to update this one.","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3b9fc64e2a079cf1df232a02566589c18651ecc0","unresolved":false,"context_lines":[{"line_number":413,"context_line":"    vcpu_weight \u003d Column(Integer)"},{"line_number":414,"context_line":"    disabled \u003d Column(Boolean, default\u003dFalse)"},{"line_number":415,"context_line":"    is_public \u003d Column(Boolean, default\u003dTrue)"},{"line_number":416,"context_line":"    local_disks \u003d Column(Boolean, default\u003dTrue)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"class Quota(BASE, NovaBase, models.SoftDeleteMixin):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3aaa91ec_dc0cc796","line":416,"updated":"2016-06-22 12:11:57.000000000","message":"Why do we need to make this change? I don\u0027t think we should be accessing these models, post upgrade.","commit_id":"a8f20586aff63f8b2dede9b324f04fd1405e75ff"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"16c406aac9d7f284accdfb31e60082ae0f43ecd5","unresolved":false,"context_lines":[{"line_number":413,"context_line":"    vcpu_weight \u003d Column(Integer)"},{"line_number":414,"context_line":"    disabled \u003d Column(Boolean, default\u003dFalse)"},{"line_number":415,"context_line":"    is_public \u003d Column(Boolean, default\u003dTrue)"},{"line_number":416,"context_line":"    local_disks \u003d Column(Boolean, default\u003dTrue)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"class Quota(BASE, NovaBase, models.SoftDeleteMixin):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3aaa91ec_6209a995","line":416,"in_reply_to":"3aaa91ec_dc0cc796","updated":"2016-06-22 13:27:06.000000000","message":"I started with having only the migration in the new api db flavors table, and model change only in api_models. But a bunch of tests still use instance_types tables from the old db, which failed without that change.","commit_id":"a8f20586aff63f8b2dede9b324f04fd1405e75ff"}],"nova/exception.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5906875e7f982259a47786835063f57b2f6f7359","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"                \"minimum size is %(image_min_disk)i bytes.\")"},{"line_number":1391,"context_line":""},{"line_number":1392,"context_line":""},{"line_number":1393,"context_line":"class FlavorLocalDisksDisabled(FlavorDiskTooSmall):"},{"line_number":1394,"context_line":"    msg_fmt \u003d _(\"Flavor\u0027s local disks are disabled. You need to create a \""},{"line_number":1395,"context_line":"                \"bootable volume to use this flavor for your instance.\")"},{"line_number":1396,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_3aad8588","line":1393,"range":{"start_line":1393,"start_character":31,"end_line":1393,"end_character":49},"updated":"2016-06-01 09:33:57.000000000","message":"I would just inherit from the NovaException class.","commit_id":"6ed922845d37a3bf56959b978f7acc7fa7d188c4"}]}
