)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"107c895ec3aa9164b76c779e4cea2496c17a3083","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Create snapshot, option name is optional. But if no option name is"},{"line_number":10,"context_line":"given, it would fail because option name\u0027s value is None, while"},{"line_number":11,"context_line":"required name\u0027s type is string."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9f1f39b30d43dc16a474febcf6549cf1901732ec"},{"line_number":14,"context_line":"Closes-bug: 1741191"},{"line_number":15,"context_line":"Co-Authored-By: yatin \u003cykarel@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f91af0f_27329560","line":12,"updated":"2018-01-08 06:23:14.000000000","message":"Need to add descriptions about other cases (snapshot update/manage, backup create/update/restore).","commit_id":"1873ec0106583f0448018f53bf010ea35cfcec06"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"c6c05e718bfd5030843873eb85f336fba7f1990c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     ivyzhang \u003cshzyu@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-08 20:58:18 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix: create snapshot failed with no option name is given"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Create snapshot, option name is optional. But if no option name is"},{"line_number":10,"context_line":"given, it would fail because option name\u0027s value is None, while"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9f91af0f_107b00f5","line":7,"range":{"start_line":7,"start_character":5,"end_line":7,"end_character":56},"updated":"2018-01-08 13:13:55.000000000","message":"What about: \"create a snapshot without the name option failed\" ?","commit_id":"ff85e932653f02d39a7b9b36d71d4fb6dbb98562"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"c6c05e718bfd5030843873eb85f336fba7f1990c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix: create snapshot failed with no option name is given"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Create snapshot, option name is optional. But if no option name is"},{"line_number":10,"context_line":"given, it would fail because option name\u0027s value is None, while"},{"line_number":11,"context_line":"required name\u0027s type is string."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9f91af0f_d08038c2","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":41},"updated":"2018-01-08 13:13:55.000000000","message":"When creating a snapshot, snapshot name is optional.","commit_id":"ff85e932653f02d39a7b9b36d71d4fb6dbb98562"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"c6c05e718bfd5030843873eb85f336fba7f1990c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Create snapshot, option name is optional. But if no option name is"},{"line_number":10,"context_line":"given, it would fail because option name\u0027s value is None, while"},{"line_number":11,"context_line":"required name\u0027s type is string."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9f1f39b30d43dc16a474febcf6549cf1901732ec"},{"line_number":14,"context_line":"Closes-bug: 1741191"},{"line_number":15,"context_line":"Co-Authored-By: yatin \u003cykarel@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9f91af0f_f0853cd0","line":12,"updated":"2018-01-08 13:13:55.000000000","message":"Still we should mention here, modified \"name_allow_zero_min_length\" will also affect backup and snapshot manage api.","commit_id":"ff85e932653f02d39a7b9b36d71d4fb6dbb98562"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"01877cde3d108be9ad49171dbd52cbe000eefd9f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"2. Backup: option name in create/update/restore backup is optional"},{"line_number":12,"context_line":"which type is name_allow_zero_min_length and should allow null."},{"line_number":13,"context_line":"3. Backup: snapshot_id in create backup or volume_id in restore backup"},{"line_number":14,"context_line":"is optional, set its type to uuid_allow_null."},{"line_number":15,"context_line":"4. Group_snapshot: option name in create group-snapshot is optional, and"},{"line_number":16,"context_line":"should allow null."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9f91af0f_33c13be6","line":14,"updated":"2018-01-10 06:06:15.000000000","message":"Missing the newly modified backup_create metadata option.","commit_id":"05cd2c1b8dfe2d0a24285645c7393bf0864ab4a9"}],"cinder/api/schemas/backups.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"c6c05e718bfd5030843873eb85f336fba7f1990c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                \u0027incremental\u0027: parameter_types.boolean,"},{"line_number":36,"context_line":"                \u0027force\u0027: parameter_types.boolean,"},{"line_number":37,"context_line":"                \u0027name\u0027: parameter_types.name_allow_zero_min_length,"},{"line_number":38,"context_line":"                \u0027snapshot_id\u0027: parameter_types.uuid_allow_null,"},{"line_number":39,"context_line":"            },"},{"line_number":40,"context_line":"            \u0027required\u0027: [\u0027volume_id\u0027],"},{"line_number":41,"context_line":"            \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_d0e7d8ab","line":38,"updated":"2018-01-08 13:13:55.000000000","message":"This may need another patch.","commit_id":"ff85e932653f02d39a7b9b36d71d4fb6dbb98562"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"c6c05e718bfd5030843873eb85f336fba7f1990c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":81,"context_line":"            \u0027properties\u0027: {"},{"line_number":82,"context_line":"                \u0027name\u0027: parameter_types.name_allow_zero_min_length,"},{"line_number":83,"context_line":"                \u0027volume_id\u0027: parameter_types.uuid_allow_null"},{"line_number":84,"context_line":"            },"},{"line_number":85,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":86,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_9005d048","line":83,"updated":"2018-01-08 13:13:55.000000000","message":"Same here.","commit_id":"ff85e932653f02d39a7b9b36d71d4fb6dbb98562"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"9d3aa01d83c6112b393542116aaf1a036ef7e6d7","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"create_backup_v343 \u003d copy.deepcopy(create)"},{"line_number":50,"context_line":"create_backup_v343[\u0027properties\u0027][\u0027backup\u0027][\u0027properties\u0027]["},{"line_number":51,"context_line":"    \u0027metadata\u0027] \u003d parameter_types.extra_specs"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"update \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f91af0f_0872e27b","line":51,"range":{"start_line":51,"start_character":18,"end_line":51,"end_character":45},"updated":"2018-01-09 06:07:59.000000000","message":"it seems metadata should also be allowed to null","commit_id":"a1b959500efeb943b063703c043752393cb82e72"}],"cinder/api/schemas/group_snapshots.py":[{"author":{"_account_id":26541,"name":"Neha Alhat","email":"neha.alhat@nttdata.com","username":"nehaalhat"},"change_message_id":"87a7e790fb7b5d5fa3d91e60be56b3e4d5b32d57","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.api.validation import parameter_types"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"name_optional \u003d parameter_types.name"},{"line_number":25,"context_line":"name_optional[\u0027minLength\u0027] \u003d 0"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"create \u003d {"},{"line_number":28,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_10df800d","line":25,"range":{"start_line":24,"start_character":0,"end_line":25,"end_character":30},"updated":"2018-01-08 13:01:13.000000000","message":"Please remove this unused parameter.","commit_id":"78ba5e7b615816a76c272712f531bf5eef60ef83"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"c6c05e718bfd5030843873eb85f336fba7f1990c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.api.validation import parameter_types"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"name_optional \u003d parameter_types.name"},{"line_number":25,"context_line":"name_optional[\u0027minLength\u0027] \u003d 0"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"create \u003d {"},{"line_number":28,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_d00b587a","line":25,"range":{"start_line":24,"start_character":0,"end_line":25,"end_character":30},"in_reply_to":"9f91af0f_10df800d","updated":"2018-01-08 13:13:55.000000000","message":"+1","commit_id":"78ba5e7b615816a76c272712f531bf5eef60ef83"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"c6c05e718bfd5030843873eb85f336fba7f1990c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":33,"context_line":"            \u0027properties\u0027: {"},{"line_number":34,"context_line":"                \u0027group_id\u0027: parameter_types.uuid,"},{"line_number":35,"context_line":"                \u0027name\u0027: parameter_types.name_allow_zero_min_length,"},{"line_number":36,"context_line":"                \u0027description\u0027: parameter_types.description,"},{"line_number":37,"context_line":"            },"},{"line_number":38,"context_line":"            \u0027required\u0027: [\u0027group_id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_10c0e0e0","line":35,"updated":"2018-01-08 13:13:55.000000000","message":"Didn\u0027t notic this has been changed before. Then group_snapshot_create (api v3) should also be tested.","commit_id":"ff85e932653f02d39a7b9b36d71d4fb6dbb98562"}],"cinder/api/validation/parameter_types.py":[{"author":{"_account_id":26541,"name":"Neha Alhat","email":"neha.alhat@nttdata.com","username":"nehaalhat"},"change_message_id":"caed4a00783cb5e83f47456992f2d782fafd6d49","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    \u0027^[a-zA-Z0-9-_:. ]{1,255}$\u0027][\u0027type\u0027] \u003d [\u0027string\u0027, \u0027null\u0027]"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"name_allow_zero_min_length \u003d {"},{"line_number":167,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":168,"context_line":"}"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_8be2ac2e","line":166,"range":{"start_line":166,"start_character":0,"end_line":166,"end_character":26},"updated":"2018-01-05 10:13:48.000000000","message":"As this parameter change fixes name allows null issue for snapshot-manage and backup API\u0027s, you need to add unit test cases for both backup and snapshot-manage API\u0027s.","commit_id":"636b97f8a4838894c5fd4c2923288f6cc5c9897c"}],"cinder/tests/unit/api/contrib/test_backups.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"107c895ec3aa9164b76c779e4cea2496c17a3083","unresolved":false,"context_lines":[{"line_number":1006,"context_line":"        volume.destroy()"},{"line_number":1007,"context_line":""},{"line_number":1008,"context_line":"    @mock.patch(\u0027cinder.db.service_get_all\u0027)"},{"line_number":1009,"context_line":"    def test_create_backup_with_null_name_description(self,"},{"line_number":1010,"context_line":"                                                      _mock_service_get_all):"},{"line_number":1011,"context_line":"        _mock_service_get_all.return_value \u003d ["},{"line_number":1012,"context_line":"            {\u0027availability_zone\u0027: \u0027fake_az\u0027, \u0027host\u0027: \u0027testhost\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_a7546554","line":1009,"updated":"2018-01-08 06:23:14.000000000","message":"We need a new backup restore unitest too.","commit_id":"1873ec0106583f0448018f53bf010ea35cfcec06"}],"cinder/tests/unit/api/contrib/test_snapshot_manage.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"6c783bcb8925e0c59ed0d31597dcd5860945d1a4","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        res \u003d self._get_resp_post(body)"},{"line_number":340,"context_line":"        self.assertEqual(http_client.ACCEPTED, res.status_int, res)"},{"line_number":341,"context_line":"        self.assertIn(\u0027snapshot\u0027, res.body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_c0d7f8ed","line":341,"updated":"2018-01-09 01:29:04.000000000","message":"This test failed in py35 env. Seems like jsoutils.loads should be used to covert \"res.body\".","commit_id":"eec0df209bb7ebf0f8bc82d7fb982c0895e0aec1"}],"cinder/tests/unit/api/v2/test_snapshots.py":[{"author":{"_account_id":26541,"name":"Neha Alhat","email":"neha.alhat@nttdata.com","username":"nehaalhat"},"change_message_id":"caed4a00783cb5e83f47456992f2d782fafd6d49","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertIn(\u0027updated_at\u0027, resp_dict[\u0027snapshot\u0027])"},{"line_number":112,"context_line":"        db.volume_destroy(self.ctx, volume.id)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_snapshot_create_with_default_optional_parameters(self):"},{"line_number":115,"context_line":"        volume \u003d utils.create_volume(self.ctx)"},{"line_number":116,"context_line":"        snapshot \u003d {"},{"line_number":117,"context_line":"            \"volume_id\": volume.id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_abf9b0c8","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":61},"updated":"2018-01-05 10:13:48.000000000","message":"I think test case name doesn’t reflect the purpose why the test case is added. Also You can also check values of name and description from response that it is None using (assertIsNone).","commit_id":"636b97f8a4838894c5fd4c2923288f6cc5c9897c"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"107c895ec3aa9164b76c779e4cea2496c17a3083","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertIn(\u0027updated_at\u0027, resp_dict[\u0027snapshot\u0027])"},{"line_number":112,"context_line":"        db.volume_destroy(self.ctx, volume.id)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_snapshot_create_with_null_name_description(self):"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        volume \u003d utils.create_volume(self.ctx)"},{"line_number":117,"context_line":"        snapshot \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_e7ecad90","line":114,"updated":"2018-01-08 06:23:14.000000000","message":"And snapshot update.","commit_id":"1873ec0106583f0448018f53bf010ea35cfcec06"}],"cinder/tests/unit/api/v3/test_backups.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"107c895ec3aa9164b76c779e4cea2496c17a3083","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            self.assertIn(\u0027metadata\u0027, backup_get)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    @mock.patch(\u0027cinder.db.service_get_all\u0027)"},{"line_number":251,"context_line":"    def test_create_backup_with_null_name(self, _mock_service_get_all):"},{"line_number":252,"context_line":"        _mock_service_get_all.return_value \u003d ["},{"line_number":253,"context_line":"            {\u0027availability_zone\u0027: \u0027fake_az\u0027, \u0027host\u0027: \u0027testhost\u0027,"},{"line_number":254,"context_line":"             \u0027disabled\u0027: 0, \u0027updated_at\u0027: timeutils.utcnow(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_47fb1946","line":251,"updated":"2018-01-08 06:23:14.000000000","message":"For backup v3 api, backup update also need to be covered.\n\nAnd for backup restore, I just realize v3 api inherit must methods from v2 (or the contrib) api, so we could only test backup create and restore in v2 api. This should be true for snapshots api.","commit_id":"1873ec0106583f0448018f53bf010ea35cfcec06"}],"cinder/tests/unit/api/v3/test_snapshot_manage.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"107c895ec3aa9164b76c779e4cea2496c17a3083","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                                 version\u003dmv.MANAGE_EXISTING_CLUSTER,"},{"line_number":203,"context_line":"                                 cluster\u003d\u0027cluster\u0027)"},{"line_number":204,"context_line":"        self.assertEqual(http_client.BAD_REQUEST, res.status_int)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    @mock.patch(\u0027cinder.volume.rpcapi.VolumeAPI.manage_existing_snapshot\u0027)"},{"line_number":207,"context_line":"    @mock.patch(\u0027cinder.volume.api.API.create_snapshot_in_db\u0027)"},{"line_number":208,"context_line":"    @mock.patch(\u0027cinder.objects.service.Service.get_by_id\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_c206371d","line":205,"updated":"2018-01-08 06:23:14.000000000","message":"This may not be neccessary. See the comment in cinder/tests/unit/api/v3/test_backups.py about the v3/v2 api inheritance.","commit_id":"1873ec0106583f0448018f53bf010ea35cfcec06"}],"cinder/tests/unit/api/v3/test_snapshots.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"107c895ec3aa9164b76c779e4cea2496c17a3083","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        self.assertNotEqual(0, len(res_dict[\u0027snapshots\u0027]))"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @mock.patch(\u0027cinder.objects.volume.Volume.refresh\u0027)"},{"line_number":374,"context_line":"    def test_snapshot_create_with_null_name_description(self, mock_refresh):"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        snapshot \u003d {"},{"line_number":377,"context_line":"            \"volume_id\": fake.VOLUME_ID,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_c76ac9eb","line":374,"updated":"2018-01-08 06:23:14.000000000","message":"This may not be neccessary. See the comment in cinder/tests/unit/api/v3/test_backups.py about the v3/v2 api inheritance.","commit_id":"1873ec0106583f0448018f53bf010ea35cfcec06"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"c6c05e718bfd5030843873eb85f336fba7f1990c","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        self.assertNotEqual(0, len(res_dict[\u0027snapshots\u0027]))"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @mock.patch(\u0027cinder.objects.volume.Volume.refresh\u0027)"},{"line_number":374,"context_line":"    def test_snapshot_create_with_null_name_description(self, mock_refresh):"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        snapshot \u003d {"},{"line_number":377,"context_line":"            \"volume_id\": fake.VOLUME_ID,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_f06f7cf9","line":374,"updated":"2018-01-08 13:13:55.000000000","message":"The same test in v2 api should be sufficient.","commit_id":"ff85e932653f02d39a7b9b36d71d4fb6dbb98562"}]}
