)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14274,"name":"XinXiaohui","email":"xiaohui.xin@intel.com","username":"XinXiaohui"},"change_message_id":"e0cfd59138938113ad4b4183189e9868d4fd6ed8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"but different cases, \u0027image-metadata unset\u0027 command deletes all"},{"line_number":11,"context_line":"of them irrespective of case."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"For ex, \"image-metadata unset ab\u003d123\" will delete all image-metadata"},{"line_number":14,"context_line":"entries with name abc, ABC, Abc etc."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This is fixed by using id instead of name to fetch image-metadata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5a5ae5dd_01e162fe","line":13,"range":{"start_line":13,"start_character":33,"end_line":13,"end_character":36},"updated":"2016-02-04 02:32:20.000000000","message":"do you mean \"abc\u003d123\"?","commit_id":"d0ea40721bc13a8e9aee4201d208f4653a50fc21"}],"cinder/tests/unit/test_db_api.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"26df73b64ed17ae16a806a2707c820e777639b3a","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        # assert _volume_glance_metadata_key_to_id() was called exactly once"},{"line_number":988,"context_line":"        metadata_key_to_id_mock.assert_called_once_with(self.ctxt, 1, \u0027abc\u0027)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def test_case_sensitive_glance_metadata_delete(self):"},{"line_number":991,"context_line":"        user_metadata \u003d {\u0027a\u0027: \u00271\u0027, \u0027c\u0027: \u00272\u0027}"},{"line_number":992,"context_line":"        image_metadata \u003d {\u0027abc\u0027: \u0027123\u0027, \u0027ABC\u0027: \u0027123\u0027}"},{"line_number":993,"context_line":""},{"line_number":994,"context_line":"        # create volume with metadata."},{"line_number":995,"context_line":"        db.volume_create(self.ctxt, {\u0027id\u0027: 1,"},{"line_number":996,"context_line":"                                     \u0027metadata\u0027: user_metadata})"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"        # delete user metadata associated with the volume."},{"line_number":999,"context_line":"        db.volume_metadata_delete(self.ctxt, 1, \u0027c\u0027,"},{"line_number":1000,"context_line":"                                  meta_type\u003dcommon.METADATA_TYPES.user)"},{"line_number":1001,"context_line":"        user_metadata.pop(\u0027c\u0027)"},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"        self.assertEqual(user_metadata,"},{"line_number":1004,"context_line":"                         db.volume_metadata_get(self.ctxt, 1))"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"        # create image metadata associated with the volume."},{"line_number":1007,"context_line":"        db.volume_metadata_update("},{"line_number":1008,"context_line":"            self.ctxt,"},{"line_number":1009,"context_line":"            1,"},{"line_number":1010,"context_line":"            image_metadata,"},{"line_number":1011,"context_line":"            False,"},{"line_number":1012,"context_line":"            meta_type\u003dcommon.METADATA_TYPES.image)"},{"line_number":1013,"context_line":""},{"line_number":1014,"context_line":"        # delete image metadata associated with the volume."},{"line_number":1015,"context_line":"        db.volume_metadata_delete("},{"line_number":1016,"context_line":"            self.ctxt,"},{"line_number":1017,"context_line":"            1,"},{"line_number":1018,"context_line":"            \u0027abc\u0027,"},{"line_number":1019,"context_line":"            meta_type\u003dcommon.METADATA_TYPES.image)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        image_metadata.pop(\u0027abc\u0027)"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"        # parse the result to build the dict."},{"line_number":1024,"context_line":"        rows \u003d db.volume_glance_metadata_get(self.ctxt, 1)"},{"line_number":1025,"context_line":"        result \u003d {}"},{"line_number":1026,"context_line":"        for row in rows:"},{"line_number":1027,"context_line":"            result[row[\u0027key\u0027]] \u003d row[\u0027value\u0027]"},{"line_number":1028,"context_line":"        self.assertEqual(image_metadata, result)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"    def test_volume_metadata_update_with_metatype(self):"},{"line_number":1031,"context_line":"        user_metadata1 \u003d {\u0027a\u0027: \u00271\u0027, \u0027c\u0027: \u00272\u0027}"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_ba93dca2","line":1028,"range":{"start_line":990,"start_character":0,"end_line":1028,"end_character":48},"updated":"2016-02-15 15:13:04.000000000","message":"This test still will pass even without your fix, so it doesn\u0027t really check the real bugfix. I\u0027ve managed to find an earlier commit that deals with similar problem. Take a look at unit tests in [1]. It forces filter_by to return both uppercased and lowercased occurrences. I think you can build your regression unit tests based on that approach.\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/tests/unit/test_db_api.py#L242-L282","commit_id":"7d8369099180bb65449685755b0f69f1378bc8ae"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"ff9193385dcaee31a333a63f95d86f23004dfc5d","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        # assert _volume_glance_metadata_key_to_id() was called exactly once"},{"line_number":988,"context_line":"        metadata_key_to_id_mock.assert_called_once_with(self.ctxt, 1, \u0027abc\u0027)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def test_case_sensitive_glance_metadata_delete(self):"},{"line_number":991,"context_line":"        user_metadata \u003d {\u0027a\u0027: \u00271\u0027, \u0027c\u0027: \u00272\u0027}"},{"line_number":992,"context_line":"        image_metadata \u003d {\u0027abc\u0027: \u0027123\u0027, \u0027ABC\u0027: \u0027123\u0027}"},{"line_number":993,"context_line":""},{"line_number":994,"context_line":"        # create volume with metadata."},{"line_number":995,"context_line":"        db.volume_create(self.ctxt, {\u0027id\u0027: 1,"},{"line_number":996,"context_line":"                                     \u0027metadata\u0027: user_metadata})"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"        # delete user metadata associated with the volume."},{"line_number":999,"context_line":"        db.volume_metadata_delete(self.ctxt, 1, \u0027c\u0027,"},{"line_number":1000,"context_line":"                                  meta_type\u003dcommon.METADATA_TYPES.user)"},{"line_number":1001,"context_line":"        user_metadata.pop(\u0027c\u0027)"},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"        self.assertEqual(user_metadata,"},{"line_number":1004,"context_line":"                         db.volume_metadata_get(self.ctxt, 1))"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"        # create image metadata associated with the volume."},{"line_number":1007,"context_line":"        db.volume_metadata_update("},{"line_number":1008,"context_line":"            self.ctxt,"},{"line_number":1009,"context_line":"            1,"},{"line_number":1010,"context_line":"            image_metadata,"},{"line_number":1011,"context_line":"            False,"},{"line_number":1012,"context_line":"            meta_type\u003dcommon.METADATA_TYPES.image)"},{"line_number":1013,"context_line":""},{"line_number":1014,"context_line":"        # delete image metadata associated with the volume."},{"line_number":1015,"context_line":"        db.volume_metadata_delete("},{"line_number":1016,"context_line":"            self.ctxt,"},{"line_number":1017,"context_line":"            1,"},{"line_number":1018,"context_line":"            \u0027abc\u0027,"},{"line_number":1019,"context_line":"            meta_type\u003dcommon.METADATA_TYPES.image)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        image_metadata.pop(\u0027abc\u0027)"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"        # parse the result to build the dict."},{"line_number":1024,"context_line":"        rows \u003d db.volume_glance_metadata_get(self.ctxt, 1)"},{"line_number":1025,"context_line":"        result \u003d {}"},{"line_number":1026,"context_line":"        for row in rows:"},{"line_number":1027,"context_line":"            result[row[\u0027key\u0027]] \u003d row[\u0027value\u0027]"},{"line_number":1028,"context_line":"        self.assertEqual(image_metadata, result)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"    def test_volume_metadata_update_with_metatype(self):"},{"line_number":1031,"context_line":"        user_metadata1 \u003d {\u0027a\u0027: \u00271\u0027, \u0027c\u0027: \u00272\u0027}"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_c9d35b37","line":1028,"range":{"start_line":990,"start_character":0,"end_line":1028,"end_character":48},"in_reply_to":"dae33548_ba93dca2","updated":"2016-02-26 18:24:21.000000000","message":"Dear Michal,\nAs discussed on IRC, \"test_volume_glance_metadata_key_to_id_called\" is written to support testing this behavior.\nThis may be further improved for some more corner cases, but for that efforts required is high and benefit is low.\nI am happy that i could make you agree on this.\nThanks!!","commit_id":"7d8369099180bb65449685755b0f69f1378bc8ae"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"afd646928b789569dd3990194cc83cd6d4d6ca10","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                                              updates)"},{"line_number":700,"context_line":"        self.assertEqual(\u0027foobbar\u0027, volume.display_name)"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    def test_delete_volume_metadata_with_caseSensitive_metatype(self):"},{"line_number":703,"context_line":"        \"\"\"Test delete volume metadata with different metadata type.\"\"\""},{"line_number":704,"context_line":"        test_meta1 \u003d {\u0027fake1\u0027: \u0027fake_value1\u0027, \u0027FAKE1\u0027: \u0027fake_value2\u0027}"},{"line_number":705,"context_line":"        test_meta2 \u003d {\u0027fake1\u0027: \u0027fake_value1\u0027}"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_79a21db0","line":702,"range":{"start_line":702,"start_character":45,"end_line":702,"end_character":46},"updated":"2016-02-04 20:29:17.000000000","message":"S should not be upper case here. Ironic. :)\n\nShould be \"casesensitive\" or \"case_sensitive\".","commit_id":"854a6abf0a85e63e9d78a8d93744f2cd1615b6fe"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"f7fe35dd9883f42f870b512f0258593e34665c6a","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        for row in rows:"},{"line_number":745,"context_line":"            result[row[\u0027key\u0027]] \u003d row[\u0027value\u0027]"},{"line_number":746,"context_line":"        self.assertEqual(test_meta2, result)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"        # delete volume metadata with invalid metadta type."},{"line_number":749,"context_line":"        self.assertRaises(exception.InvalidMetadataType,"},{"line_number":750,"context_line":"                          volume_api.delete_volume_metadata,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_9c302203","line":747,"updated":"2016-02-04 23:23:58.000000000","message":"s/metadta/metadata","commit_id":"854a6abf0a85e63e9d78a8d93744f2cd1615b6fe"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2e3142fecd16609e8e45e2b83ef229b871fb483a","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                                              updates)"},{"line_number":700,"context_line":"        self.assertEqual(\u0027foobbar\u0027, volume.display_name)"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    def test_delete_volume_metadata_with_case_sensitive_metatype(self):"},{"line_number":703,"context_line":"        \"\"\"Test delete volume metadata with different metadata type.\"\"\""},{"line_number":704,"context_line":"        test_meta1 \u003d {\u0027fake1\u0027: \u0027fake_value1\u0027, \u0027FAKE1\u0027: \u0027fake_value2\u0027}"},{"line_number":705,"context_line":"        test_meta2 \u003d {\u0027fake1\u0027: \u0027fake_value1\u0027}"},{"line_number":706,"context_line":"        FAKE_METADATA_TYPE \u003d enum.Enum(\u0027METADATA_TYPES\u0027, \u0027fake_type\u0027)"},{"line_number":707,"context_line":"        volume \u003d tests_utils.create_volume(self.context, metadata\u003dtest_meta1,"},{"line_number":708,"context_line":"                                           **self.volume_params)"},{"line_number":709,"context_line":"        volume_id \u003d volume[\u0027id\u0027]"},{"line_number":710,"context_line":"        self.volume.create_volume(self.context, volume_id)"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        # delete user metadata associated with the volume."},{"line_number":715,"context_line":"        volume_api.delete_volume_metadata("},{"line_number":716,"context_line":"            self.context,"},{"line_number":717,"context_line":"            volume,"},{"line_number":718,"context_line":"            \u0027FAKE1\u0027,"},{"line_number":719,"context_line":"            common.METADATA_TYPES.user)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":"        self.assertEqual(test_meta2,"},{"line_number":722,"context_line":"                         db.volume_metadata_get(self.context, volume_id))"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        # create image metadata associated with the volume."},{"line_number":725,"context_line":"        result_meta \u003d volume_api.update_volume_metadata("},{"line_number":726,"context_line":"            self.context,"},{"line_number":727,"context_line":"            volume,"},{"line_number":728,"context_line":"            test_meta1,"},{"line_number":729,"context_line":"            False,"},{"line_number":730,"context_line":"            common.METADATA_TYPES.image)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"        self.assertEqual(test_meta1, result_meta)"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        # delete image metadata associated with the volume."},{"line_number":735,"context_line":"        volume_api.delete_volume_metadata("},{"line_number":736,"context_line":"            self.context,"},{"line_number":737,"context_line":"            volume,"},{"line_number":738,"context_line":"            \u0027FAKE1\u0027,"},{"line_number":739,"context_line":"            common.METADATA_TYPES.image)"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        # parse the result to build the dict."},{"line_number":742,"context_line":"        rows \u003d db.volume_glance_metadata_get(self.context, volume_id)"},{"line_number":743,"context_line":"        result \u003d {}"},{"line_number":744,"context_line":"        for row in rows:"},{"line_number":745,"context_line":"            result[row[\u0027key\u0027]] \u003d row[\u0027value\u0027]"},{"line_number":746,"context_line":"        self.assertEqual(test_meta2, result)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"        # delete volume metadata with invalid metadata type."},{"line_number":749,"context_line":"        self.assertRaises(exception.InvalidMetadataType,"},{"line_number":750,"context_line":"                          volume_api.delete_volume_metadata,"},{"line_number":751,"context_line":"                          self.context,"},{"line_number":752,"context_line":"                          volume,"},{"line_number":753,"context_line":"                          \u0027fake1\u0027,"},{"line_number":754,"context_line":"                          FAKE_METADATA_TYPE.fake_type)"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    def test_delete_volume_metadata_with_metatype(self):"},{"line_number":757,"context_line":"        \"\"\"Test delete volume metadata with different metadata type.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_c0b596d0","line":754,"range":{"start_line":702,"start_character":0,"end_line":754,"end_character":55},"updated":"2016-02-09 16:40:34.000000000","message":"This test should probably go to cinder.tests.unit.test_db_api.","commit_id":"378a0691c3f13c57973c0f36cfca7a48a37288e0"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"fd52571129ad1bbbf04fed0dad8d6da9cf760dc7","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                                              updates)"},{"line_number":700,"context_line":"        self.assertEqual(\u0027foobbar\u0027, volume.display_name)"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    def test_delete_volume_metadata_with_case_sensitive_metatype(self):"},{"line_number":703,"context_line":"        \"\"\"Test delete volume metadata with different metadata type.\"\"\""},{"line_number":704,"context_line":"        test_meta1 \u003d {\u0027fake1\u0027: \u0027fake_value1\u0027, \u0027FAKE1\u0027: \u0027fake_value2\u0027}"},{"line_number":705,"context_line":"        test_meta2 \u003d {\u0027fake1\u0027: \u0027fake_value1\u0027}"},{"line_number":706,"context_line":"        FAKE_METADATA_TYPE \u003d enum.Enum(\u0027METADATA_TYPES\u0027, \u0027fake_type\u0027)"},{"line_number":707,"context_line":"        volume \u003d tests_utils.create_volume(self.context, metadata\u003dtest_meta1,"},{"line_number":708,"context_line":"                                           **self.volume_params)"},{"line_number":709,"context_line":"        volume_id \u003d volume[\u0027id\u0027]"},{"line_number":710,"context_line":"        self.volume.create_volume(self.context, volume_id)"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        # delete user metadata associated with the volume."},{"line_number":715,"context_line":"        volume_api.delete_volume_metadata("},{"line_number":716,"context_line":"            self.context,"},{"line_number":717,"context_line":"            volume,"},{"line_number":718,"context_line":"            \u0027FAKE1\u0027,"},{"line_number":719,"context_line":"            common.METADATA_TYPES.user)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":"        self.assertEqual(test_meta2,"},{"line_number":722,"context_line":"                         db.volume_metadata_get(self.context, volume_id))"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        # create image metadata associated with the volume."},{"line_number":725,"context_line":"        result_meta \u003d volume_api.update_volume_metadata("},{"line_number":726,"context_line":"            self.context,"},{"line_number":727,"context_line":"            volume,"},{"line_number":728,"context_line":"            test_meta1,"},{"line_number":729,"context_line":"            False,"},{"line_number":730,"context_line":"            common.METADATA_TYPES.image)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"        self.assertEqual(test_meta1, result_meta)"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        # delete image metadata associated with the volume."},{"line_number":735,"context_line":"        volume_api.delete_volume_metadata("},{"line_number":736,"context_line":"            self.context,"},{"line_number":737,"context_line":"            volume,"},{"line_number":738,"context_line":"            \u0027FAKE1\u0027,"},{"line_number":739,"context_line":"            common.METADATA_TYPES.image)"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        # parse the result to build the dict."},{"line_number":742,"context_line":"        rows \u003d db.volume_glance_metadata_get(self.context, volume_id)"},{"line_number":743,"context_line":"        result \u003d {}"},{"line_number":744,"context_line":"        for row in rows:"},{"line_number":745,"context_line":"            result[row[\u0027key\u0027]] \u003d row[\u0027value\u0027]"},{"line_number":746,"context_line":"        self.assertEqual(test_meta2, result)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"        # delete volume metadata with invalid metadata type."},{"line_number":749,"context_line":"        self.assertRaises(exception.InvalidMetadataType,"},{"line_number":750,"context_line":"                          volume_api.delete_volume_metadata,"},{"line_number":751,"context_line":"                          self.context,"},{"line_number":752,"context_line":"                          volume,"},{"line_number":753,"context_line":"                          \u0027fake1\u0027,"},{"line_number":754,"context_line":"                          FAKE_METADATA_TYPE.fake_type)"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    def test_delete_volume_metadata_with_metatype(self):"},{"line_number":757,"context_line":"        \"\"\"Test delete volume metadata with different metadata type.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a57f1b5_6094fd36","line":754,"range":{"start_line":702,"start_character":0,"end_line":754,"end_character":55},"in_reply_to":"5a5ae5dd_c0b596d0","updated":"2016-02-10 04:23:49.000000000","message":"Actually I wanted to use this test to test whole flow from api to db in respect of my changes, so kept it here.\nThis will test db operation as well because \"no mock\" is used here in it for db.\n\nI followed existing pattern of metadata related tests in this script. \nSo, may be we can keep this here.","commit_id":"378a0691c3f13c57973c0f36cfca7a48a37288e0"}]}
