)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7795603320a7f2798c3678b811fa61627501454a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support availability-zone type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now availability zone highly is integrated into"},{"line_number":10,"context_line":"volume type\u0027s extra spec, it will be recognized"},{"line_number":11,"context_line":"when creating and retyping, also we can filter"},{"line_number":12,"context_line":"volume type by extra spec now."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"bf659307_1623ad57","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":43},"updated":"2018-04-14 11:12:14.000000000","message":"is highly integragted","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"a7513513be8a99079cd68aec5ec1862c7d0895dc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support availability-zone type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now availability zone highly is integrated into"},{"line_number":10,"context_line":"volume type\u0027s extra spec, it will be recognized"},{"line_number":11,"context_line":"when creating and retyping, also we can filter"},{"line_number":12,"context_line":"volume type by extra spec now."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9f6a8fd7_f1cf0855","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":43},"in_reply_to":"bf659307_1623ad57","updated":"2018-04-16 03:39:11.000000000","message":"Done","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"}],"cinder/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"43154f1c591a2d6057e2701d18d3883080f21c2d","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"3.52"},{"line_number":409,"context_line":"----"},{"line_number":410,"context_line":"``os-extended:availability_zones`` is a reserved spec key for AZ volume type,"},{"line_number":411,"context_line":"and filter volume type by ``extra_specs`` is supported now."}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f6a8fd7_63456070","line":410,"range":{"start_line":410,"start_character":2,"end_line":410,"end_character":32},"updated":"2018-04-16 15:20:25.000000000","message":"Why is this formatted as \"os-extended:availability-zones\"?\n\nI don\u0027t see any precedence for using \"os-extended:\" in this way for reserved keys.\n\nDo we have a standard way to do this?  I\u0027d prefer we didn\u0027t just invent a convention for this without fully designing and documenting it.","commit_id":"1e65fab7db8eb9244680a754c1fa9ec6934e34be"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c3812c0a467cdda30020f986960539cc4d1bd5ca","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"3.52"},{"line_number":409,"context_line":"----"},{"line_number":410,"context_line":"``os-extended:availability_zones`` is a reserved spec key for AZ volume type,"},{"line_number":411,"context_line":"and filter volume type by ``extra_specs`` is supported now."}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f6a8fd7_fe2a638e","line":410,"range":{"start_line":410,"start_character":2,"end_line":410,"end_character":32},"in_reply_to":"9f6a8fd7_63456070","updated":"2018-04-16 15:45:38.000000000","message":"I\u0027m not sure if we\u0027ve really had a policy or convention before. Should it just be \u0027availability_zone\u0027 without the os-extended part?","commit_id":"1e65fab7db8eb9244680a754c1fa9ec6934e34be"}],"cinder/api/v2/types.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7795603320a7f2798c3678b811fa61627501454a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\"The volume type \u0026 volume types extra specs extension.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import ast"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":"from oslo_utils import strutils"},{"line_number":21,"context_line":"from webob import exc"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bf659307_361ef10b","line":19,"updated":"2018-04-14 11:12:14.000000000","message":"Please, add an empty line here to split imports into groups","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"a7513513be8a99079cd68aec5ec1862c7d0895dc","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\"The volume type \u0026 volume types extra specs extension.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import ast"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":"from oslo_utils import strutils"},{"line_number":21,"context_line":"from webob import exc"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_d1d684f2","line":19,"in_reply_to":"bf659307_361ef10b","updated":"2018-04-16 03:39:11.000000000","message":"Done","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b470d33c4a5e43ff5ec36ffeb080910f326b3b9e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            filters[\u0027is_public\u0027] \u003d True"},{"line_number":114,"context_line":"        if \u0027extra_specs\u0027 in filters:"},{"line_number":115,"context_line":"            try:"},{"line_number":116,"context_line":"                filters[\u0027extra_specs\u0027] \u003d ast.literal_eval("},{"line_number":117,"context_line":"                    filters[\u0027extra_specs\u0027])"},{"line_number":118,"context_line":"            except (ValueError, SyntaxError):"},{"line_number":119,"context_line":"                LOG.debug(\u0027Could not evaluate \"extra_specs\" %s, assuming \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_08d860ec","line":116,"range":{"start_line":116,"start_character":41,"end_line":116,"end_character":57},"updated":"2018-05-16 13:21:20.000000000","message":"What is a use-case for ast.literal_eval here?","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"85c795d8c74c371bdc991732c109a0c80dcb2c56","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            filters[\u0027is_public\u0027] \u003d True"},{"line_number":114,"context_line":"        if \u0027extra_specs\u0027 in filters:"},{"line_number":115,"context_line":"            try:"},{"line_number":116,"context_line":"                filters[\u0027extra_specs\u0027] \u003d ast.literal_eval("},{"line_number":117,"context_line":"                    filters[\u0027extra_specs\u0027])"},{"line_number":118,"context_line":"            except (ValueError, SyntaxError):"},{"line_number":119,"context_line":"                LOG.debug(\u0027Could not evaluate \"extra_specs\" %s, assuming \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_ca8c8f81","line":116,"range":{"start_line":116,"start_character":41,"end_line":116,"end_character":57},"in_reply_to":"5f7c97a3_08d860ec","updated":"2018-05-17 01:55:26.000000000","message":"Convert the extra spec string to dict and ensure the content valid.","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7795603320a7f2798c3678b811fa61627501454a","unresolved":false,"context_lines":[{"line_number":3611,"context_line":"                # AZ list info within the format: \"az1, az2,....\""},{"line_number":3612,"context_line":"                if k \u003d\u003d \u0027os-extended:availability_zones\u0027:"},{"line_number":3613,"context_line":"                    the_filter.extend([extra_specs.any("},{"line_number":3614,"context_line":"                        models.VolumeTypeExtraSpecs.value.like(u\u0027%%%s%%\u0027 % v),"},{"line_number":3615,"context_line":"                        key\u003dk, deleted\u003dFalse)])"},{"line_number":3616,"context_line":"                else:"},{"line_number":3617,"context_line":"                    the_filter.extend("}],"source_content_type":"text/x-python","patch_set":10,"id":"bf659307_d618d51e","line":3614,"updated":"2018-04-14 11:12:14.000000000","message":"Should we use six.text_type here?","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"a7513513be8a99079cd68aec5ec1862c7d0895dc","unresolved":false,"context_lines":[{"line_number":3611,"context_line":"                # AZ list info within the format: \"az1, az2,....\""},{"line_number":3612,"context_line":"                if k \u003d\u003d \u0027os-extended:availability_zones\u0027:"},{"line_number":3613,"context_line":"                    the_filter.extend([extra_specs.any("},{"line_number":3614,"context_line":"                        models.VolumeTypeExtraSpecs.value.like(u\u0027%%%s%%\u0027 % v),"},{"line_number":3615,"context_line":"                        key\u003dk, deleted\u003dFalse)])"},{"line_number":3616,"context_line":"                else:"},{"line_number":3617,"context_line":"                    the_filter.extend("}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_b14750bd","line":3614,"in_reply_to":"bf659307_c9a91a7c","updated":"2018-04-16 03:39:11.000000000","message":"Looks like we never tried this in our sql statement.","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6a6b5f6d30b034ec5e29477908c36787f41e9ebf","unresolved":false,"context_lines":[{"line_number":3611,"context_line":"                # AZ list info within the format: \"az1, az2,....\""},{"line_number":3612,"context_line":"                if k \u003d\u003d \u0027os-extended:availability_zones\u0027:"},{"line_number":3613,"context_line":"                    the_filter.extend([extra_specs.any("},{"line_number":3614,"context_line":"                        models.VolumeTypeExtraSpecs.value.like(u\u0027%%%s%%\u0027 % v),"},{"line_number":3615,"context_line":"                        key\u003dk, deleted\u003dFalse)])"},{"line_number":3616,"context_line":"                else:"},{"line_number":3617,"context_line":"                    the_filter.extend("}],"source_content_type":"text/x-python","patch_set":10,"id":"bf659307_c9a91a7c","line":3614,"in_reply_to":"bf659307_d618d51e","updated":"2018-04-14 14:26:03.000000000","message":"If this was just converting v directly to a string I think so, but since it is also formatting with additional % characters, this is probably best the way it is.\n\nI\u0027m not entirely sure about formatting it into a unicode string (u\"\") but sqlalchemy appears to be fine with that.","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"}],"cinder/scheduler/filters/availability_zone_filter.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b470d33c4a5e43ff5ec36ffeb080910f326b3b9e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def backend_passes(self, backend_state, filter_properties):"},{"line_number":26,"context_line":"        spec \u003d filter_properties.get(\u0027request_spec\u0027, {})"},{"line_number":27,"context_line":"        availability_zones \u003d spec.get(\u0027availability_zones\u0027, {})"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        if availability_zones:"},{"line_number":30,"context_line":"            return (backend_state.service[\u0027availability_zone\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_a8904cee","line":27,"range":{"start_line":27,"start_character":58,"end_line":27,"end_character":62},"updated":"2018-05-16 13:21:20.000000000","message":"nit: we don\u0027t need a default value for \u0027get\u0027 function here. None will work well for us.","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"85c795d8c74c371bdc991732c109a0c80dcb2c56","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def backend_passes(self, backend_state, filter_properties):"},{"line_number":26,"context_line":"        spec \u003d filter_properties.get(\u0027request_spec\u0027, {})"},{"line_number":27,"context_line":"        availability_zones \u003d spec.get(\u0027availability_zones\u0027, {})"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        if availability_zones:"},{"line_number":30,"context_line":"            return (backend_state.service[\u0027availability_zone\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_0a65a7e1","line":27,"range":{"start_line":27,"start_character":58,"end_line":27,"end_character":62},"in_reply_to":"5f7c97a3_a8904cee","updated":"2018-05-17 01:55:26.000000000","message":"Done","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"}],"cinder/tests/unit/api/v2/test_types.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ddf730cf0651686f3e0be2acff0170b253bf0251","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def test_volume_types_index_with_invalid_filter(self):"},{"line_number":187,"context_line":"        req \u003d fakes.HTTPRequest.blank("},{"line_number":188,"context_line":"            \u0027/v2/%s/types?id\u003d%s\u0027 % (fake.PROJECT_ID, self.type_id1))"},{"line_number":189,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d \\"},{"line_number":190,"context_line":"            context.RequestContext(user_id\u003dfake.USER_ID,"},{"line_number":191,"context_line":"                                   project_id\u003dfake.PROJECT_ID,"},{"line_number":192,"context_line":"                                   is_admin\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_2d3a4298","line":189,"range":{"start_line":189,"start_character":40,"end_line":189,"end_character":41},"updated":"2018-04-02 15:40:34.000000000","message":"Looks like context.RequestContext( could be on the first line so we could avoid using \\. But we haven\u0027t been enforcing that as much with unit tests, so I think it\u0027s OK if this goes in without that changing.","commit_id":"4136fd3e407e9f2370b06d71587c91ed86f61b92"}],"cinder/tests/unit/api/v3/test_types.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ddf730cf0651686f3e0be2acff0170b253bf0251","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_ed3f6a84","line":1,"updated":"2018-04-02 15:40:34.000000000","message":"New code should not have OpenStack Foundation copyright statements unless the code is submitted by an actual employee of the Foundation.","commit_id":"4136fd3e407e9f2370b06d71587c91ed86f61b92"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b470d33c4a5e43ff5ec36ffeb080910f326b3b9e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.ctxt \u003d context.RequestContext(user_id\u003dfake.USER_ID,"},{"line_number":33,"context_line":"                                           project_id\u003dfake.PROJECT_ID,"},{"line_number":34,"context_line":"                                           is_admin\u003dTrue)"},{"line_number":35,"context_line":"        self.type_id1 \u003d self._create_volume_type("},{"line_number":36,"context_line":"            \u0027volume_type1\u0027,"},{"line_number":37,"context_line":"            {\u0027key1\u0027: \u0027value1\u0027, \u0027RESKEY:availability_zones\u0027: \u0027az1,az2\u0027})"},{"line_number":38,"context_line":"        self.type_id2 \u003d self._create_volume_type("},{"line_number":39,"context_line":"            \u0027volume_type2\u0027,"},{"line_number":40,"context_line":"            {\u0027key2\u0027: \u0027value2\u0027, \u0027RESKEY:availability_zones\u0027: \u0027az1,az3\u0027})"},{"line_number":41,"context_line":"        self.type_id3 \u003d self._create_volume_type(\u0027volume_type3\u0027,"},{"line_number":42,"context_line":"                                                 {\u0027key3\u0027: \u0027value3\u0027}, False,"},{"line_number":43,"context_line":"                                                 [fake.PROJECT_ID])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_volume_types_index_with_extra_specs(self):"},{"line_number":46,"context_line":"        req \u003d fakes.HTTPRequest.blank("}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_88c310ed","line":43,"range":{"start_line":35,"start_character":8,"end_line":43,"end_character":67},"updated":"2018-05-16 13:21:20.000000000","message":"Please, remove volume types on cleanUp","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"85c795d8c74c371bdc991732c109a0c80dcb2c56","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.ctxt \u003d context.RequestContext(user_id\u003dfake.USER_ID,"},{"line_number":33,"context_line":"                                           project_id\u003dfake.PROJECT_ID,"},{"line_number":34,"context_line":"                                           is_admin\u003dTrue)"},{"line_number":35,"context_line":"        self.type_id1 \u003d self._create_volume_type("},{"line_number":36,"context_line":"            \u0027volume_type1\u0027,"},{"line_number":37,"context_line":"            {\u0027key1\u0027: \u0027value1\u0027, \u0027RESKEY:availability_zones\u0027: \u0027az1,az2\u0027})"},{"line_number":38,"context_line":"        self.type_id2 \u003d self._create_volume_type("},{"line_number":39,"context_line":"            \u0027volume_type2\u0027,"},{"line_number":40,"context_line":"            {\u0027key2\u0027: \u0027value2\u0027, \u0027RESKEY:availability_zones\u0027: \u0027az1,az3\u0027})"},{"line_number":41,"context_line":"        self.type_id3 \u003d self._create_volume_type(\u0027volume_type3\u0027,"},{"line_number":42,"context_line":"                                                 {\u0027key3\u0027: \u0027value3\u0027}, False,"},{"line_number":43,"context_line":"                                                 [fake.PROJECT_ID])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_volume_types_index_with_extra_specs(self):"},{"line_number":46,"context_line":"        req \u003d fakes.HTTPRequest.blank("}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_0a37e7e5","line":43,"range":{"start_line":35,"start_character":8,"end_line":43,"end_character":67},"in_reply_to":"5f7c97a3_88c310ed","updated":"2018-05-17 01:55:26.000000000","message":"Done","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"}],"cinder/tests/unit/volume/flows/test_create_volume_flow.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b470d33c4a5e43ff5ec36ffeb080910f326b3b9e","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    def test__extract_availability_zones_az_not_in_type_azs(self):"},{"line_number":445,"context_line":"        self.override_config(\u0027allow_availability_zone_fallback\u0027, False)"},{"line_number":446,"context_line":"        fake_image_service \u003d fake_image.FakeImageService()"},{"line_number":447,"context_line":"        image_id \u003d six.text_type(uuid.uuid4())"},{"line_number":448,"context_line":"        image_meta \u003d {}"},{"line_number":449,"context_line":"        image_meta[\u0027id\u0027] \u003d image_id"},{"line_number":450,"context_line":"        image_meta[\u0027status\u0027] \u003d \u0027active\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_085dc045","line":447,"updated":"2018-05-16 13:21:20.000000000","message":"Should we use Image ID from constants here?","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"85c795d8c74c371bdc991732c109a0c80dcb2c56","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    def test__extract_availability_zones_az_not_in_type_azs(self):"},{"line_number":445,"context_line":"        self.override_config(\u0027allow_availability_zone_fallback\u0027, False)"},{"line_number":446,"context_line":"        fake_image_service \u003d fake_image.FakeImageService()"},{"line_number":447,"context_line":"        image_id \u003d six.text_type(uuid.uuid4())"},{"line_number":448,"context_line":"        image_meta \u003d {}"},{"line_number":449,"context_line":"        image_meta[\u0027id\u0027] \u003d image_id"},{"line_number":450,"context_line":"        image_meta[\u0027status\u0027] \u003d \u0027active\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_4f7091dd","line":447,"in_reply_to":"5f7c97a3_085dc045","updated":"2018-05-17 01:55:26.000000000","message":"We need to use different image id here otherwise there could be a duplicate exception","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b470d33c4a5e43ff5ec36ffeb080910f326b3b9e","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        fake_image_service \u003d fake_image.FakeImageService()"},{"line_number":447,"context_line":"        image_id \u003d six.text_type(uuid.uuid4())"},{"line_number":448,"context_line":"        image_meta \u003d {}"},{"line_number":449,"context_line":"        image_meta[\u0027id\u0027] \u003d image_id"},{"line_number":450,"context_line":"        image_meta[\u0027status\u0027] \u003d \u0027active\u0027"},{"line_number":451,"context_line":"        image_meta[\u0027size\u0027] \u003d 1"},{"line_number":452,"context_line":"        fake_image_service.create(self.ctxt, image_meta)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_68331415","line":449,"updated":"2018-05-16 13:21:20.000000000","message":"nit: image_id variable is not needed because it\u0027s used only in one place","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"85c795d8c74c371bdc991732c109a0c80dcb2c56","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        fake_image_service \u003d fake_image.FakeImageService()"},{"line_number":447,"context_line":"        image_id \u003d six.text_type(uuid.uuid4())"},{"line_number":448,"context_line":"        image_meta \u003d {}"},{"line_number":449,"context_line":"        image_meta[\u0027id\u0027] \u003d image_id"},{"line_number":450,"context_line":"        image_meta[\u0027status\u0027] \u003d \u0027active\u0027"},{"line_number":451,"context_line":"        image_meta[\u0027size\u0027] \u003d 1"},{"line_number":452,"context_line":"        fake_image_service.create(self.ctxt, image_meta)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_8f66a929","line":449,"in_reply_to":"5f7c97a3_68331415","updated":"2018-05-17 01:55:26.000000000","message":"It\u0027s also used down below:)","commit_id":"21c03296aa1d08985a0334aa09dc45410ee4aeb1"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7b7051ad666e9592bb409e0a3d73e168dec11777","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            safe_azs \u003d list("},{"line_number":308,"context_line":"                set(type_azs).intersection(self.availability_zones))"},{"line_number":309,"context_line":"            if not safe_azs:"},{"line_number":310,"context_line":"                refresh_az \u003d True"},{"line_number":311,"context_line":"                raise exception.InvalidTypeAvailabilityZones(az\u003dtype_azs)"},{"line_number":312,"context_line":"        else:"},{"line_number":313,"context_line":"            safe_azs \u003d self.availability_zones"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_9ab55734","line":310,"range":{"start_line":310,"start_character":16,"end_line":310,"end_character":33},"updated":"2018-03-26 16:08:04.000000000","message":"This won\u0027t do anything.","commit_id":"a182a63a71062fe0296df1e33886c53bfa4bb094"}],"cinder/volume/utils.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"cc28534716e38adf775a105c3c114562ce6083f7","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        return []"},{"line_number":646,"context_line":"    azs \u003d volume_type.get(\u0027extra_specs\u0027,"},{"line_number":647,"context_line":"                          {}).get(\u0027availability_zones\u0027, \u0027\u0027).split(\u0027,\u0027)"},{"line_number":648,"context_line":"    return [az.strip() for az in azs if az !\u003d \u0027\u0027]"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"# Default symbols to use for passwords. Avoids visually confusing characters."}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_3ad20b5e","line":648,"range":{"start_line":648,"start_character":37,"end_line":648,"end_character":48},"updated":"2018-03-26 16:09:32.000000000","message":"This check isn\u0027t needed since strip() has the same behavior on \u0027\u0027 as it does any other string.","commit_id":"a182a63a71062fe0296df1e33886c53bfa4bb094"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"819581dfb845b96c70f44783383e3a925bfe5b60","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        return []"},{"line_number":646,"context_line":"    azs \u003d volume_type.get(\u0027extra_specs\u0027,"},{"line_number":647,"context_line":"                          {}).get(\u0027availability_zones\u0027, \u0027\u0027).split(\u0027,\u0027)"},{"line_number":648,"context_line":"    return [az.strip() for az in azs if az !\u003d \u0027\u0027]"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"# Default symbols to use for passwords. Avoids visually confusing characters."}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_0673264f","line":648,"range":{"start_line":648,"start_character":37,"end_line":648,"end_character":48},"in_reply_to":"bf659307_3ad20b5e","updated":"2018-03-27 03:51:39.000000000","message":"It\u0027s used to eliminate empty item in list.","commit_id":"a182a63a71062fe0296df1e33886c53bfa4bb094"}],"doc/source/admin/blockstorage-availability-zone-type.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ddf730cf0651686f3e0be2acff0170b253bf0251","unresolved":false,"context_lines":[{"line_number":15,"context_line":"How to config availability zone types?"},{"line_number":16,"context_line":"--------------------------------------"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"We decided to use type\u0027s extra-specs to store this additional info, administrators"},{"line_number":19,"context_line":"can turn it on by updating volume type\u0027s key ``os-extended:availability_zones`` as below::"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \"os-extended:availability_zones\": \"az1,az2,az3\""}],"source_content_type":"text/x-rst","patch_set":9,"id":"bf659307_cd714678","line":18,"updated":"2018-04-02 15:40:34.000000000","message":"If you can keep lines within 80 characters (other than code snippets and URLs) that would be best.","commit_id":"4136fd3e407e9f2370b06d71587c91ed86f61b92"},{"author":{"_account_id":12736,"name":"Xuepeng Ji","email":"ji.xuepeng@zte.com.cn","username":"jixuepeng"},"change_message_id":"c21e9c65d4432d7339503285f132b7ac38e24051","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Remember, Cinder will always try inexact match for this spec value, for"},{"line_number":33,"context_line":"instance, when extra spec ``os-extended:availability_zones`` is configured"},{"line_number":34,"context_line":"with value ``az1,az2``, both ``az1`` and ``az2`` are valid input for query,"},{"line_number":35,"context_line":"also this spec will not be used during performing capability filter, instead"},{"line_number":36,"context_line":"it will be only used for choosing suitable availability zones in these two"},{"line_number":37,"context_line":"cases below."}],"source_content_type":"text/x-rst","patch_set":10,"id":"bf659307_96d49d21","line":34,"range":{"start_line":34,"start_character":59,"end_line":34,"end_character":64},"updated":"2018-04-14 11:19:42.000000000","message":"It should be inputs.","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"a7513513be8a99079cd68aec5ec1862c7d0895dc","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Remember, Cinder will always try inexact match for this spec value, for"},{"line_number":33,"context_line":"instance, when extra spec ``os-extended:availability_zones`` is configured"},{"line_number":34,"context_line":"with value ``az1,az2``, both ``az1`` and ``az2`` are valid input for query,"},{"line_number":35,"context_line":"also this spec will not be used during performing capability filter, instead"},{"line_number":36,"context_line":"it will be only used for choosing suitable availability zones in these two"},{"line_number":37,"context_line":"cases below."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9f6a8fd7_b1f2f099","line":34,"range":{"start_line":34,"start_character":59,"end_line":34,"end_character":64},"in_reply_to":"bf659307_96d49d21","updated":"2018-04-16 03:39:11.000000000","message":"Done","commit_id":"ebb9aecaf3c148f36c22ef5f4d2aa2cae983cc2f"}],"releasenotes/notes/support-az-in-volumetype-8yt6fg67de3976ty.yaml":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"773d725ce090e3461156dd514e232b48857bfbeb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Now avaialbility-zone is supported in volume type as below::"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    - \"availability_zones\" now is a reserved spec key for AZ volume type, and administrator"},{"line_number":7,"context_line":"      can create AZ volume type with extra spec included \u0027availability_zones: az1, az2\u0027"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df7087c5_67806cc0","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":20},"updated":"2018-03-14 13:55:31.000000000","message":"typo","commit_id":"d2f4a7be92befcefb1b9dbf44db8637ef3837560"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df3a05558ab6670b786218d183d540a96c972b2b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Now availability zone is supported in volume type as below."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"    * ``RESKEY:availability_zones`` now is a reserved spec key for AZ volume type,"},{"line_number":6,"context_line":"      and administrator can create AZ volume type with extra spec included"},{"line_number":7,"context_line":"      ``RESKEY:availability_zones: az1,az2``."},{"line_number":8,"context_line":"    * Extra spec ``RESKEY:availability_zones`` will only be used for filtering backend"},{"line_number":9,"context_line":"      when creating and retyping volumes."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5f7c97a3_b860f1d0","line":6,"range":{"start_line":6,"start_character":10,"end_line":6,"end_character":74},"updated":"2018-05-11 16:17:24.000000000","message":"administrators can create volume type\u0027s that include AZ restrictions by adding a list of AZ\u0027s to the extra specs similar to:","commit_id":"655caeb8128aa82a5e6541c519d391acd653c137"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df3a05558ab6670b786218d183d540a96c972b2b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    * ``RESKEY:availability_zones`` now is a reserved spec key for AZ volume type,"},{"line_number":6,"context_line":"      and administrator can create AZ volume type with extra spec included"},{"line_number":7,"context_line":"      ``RESKEY:availability_zones: az1,az2``."},{"line_number":8,"context_line":"    * Extra spec ``RESKEY:availability_zones`` will only be used for filtering backend"},{"line_number":9,"context_line":"      when creating and retyping volumes."},{"line_number":10,"context_line":"    * Volume type can be filtered within extra spec: /types?extra_specs\u003d{\"key\":\"value\"}"},{"line_number":11,"context_line":"      since \"3.52\"."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5f7c97a3_d85dad15","line":8,"range":{"start_line":8,"start_character":79,"end_line":8,"end_character":86},"updated":"2018-05-11 16:17:24.000000000","message":"backends","commit_id":"655caeb8128aa82a5e6541c519d391acd653c137"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df3a05558ab6670b786218d183d540a96c972b2b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    * Extra spec ``RESKEY:availability_zones`` will only be used for filtering backend"},{"line_number":9,"context_line":"      when creating and retyping volumes."},{"line_number":10,"context_line":"    * Volume type can be filtered within extra spec: /types?extra_specs\u003d{\"key\":\"value\"}"},{"line_number":11,"context_line":"      since \"3.52\"."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5f7c97a3_58a75d0c","line":11,"range":{"start_line":11,"start_character":6,"end_line":11,"end_character":11},"updated":"2018-05-11 16:17:24.000000000","message":"since microversion","commit_id":"655caeb8128aa82a5e6541c519d391acd653c137"}]}
