)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"1855710fa3376b880192f85289dd005efdac4c32","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yuyafei \u003cyu.yafei@zte.com.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-24 01:17:03 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Volume manage should get ceiling of volume size"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The function manage_existing_object_get_size return the floor of volume"},{"line_number":10,"context_line":"size in ceph. It should return the ceiling of volume size, just like"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bab6814e_fc5d0b16","line":7,"updated":"2016-05-25 15:01:01.000000000","message":"I think it\u0027s more accurate to say:\nVolume manage should parse volume size as float\n\nSince the problem you are fixing is that it is an int now, not a float, as it should be.","commit_id":"9c6b1f8a52aeb213f1546d455baaf70c55f08b2e"},{"author":{"_account_id":20146,"name":"yuyafei","email":"yu.yafei@foxmail.com","username":"yuyafei"},"change_message_id":"7dcc1d4315b14476d2d59782a17f3067b5af8a6b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yuyafei \u003cyu.yafei@zte.com.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-24 01:17:03 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Volume manage should get ceiling of volume size"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The function manage_existing_object_get_size return the floor of volume"},{"line_number":10,"context_line":"size in ceph. It should return the ceiling of volume size, just like"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bab6814e_5d907c43","line":7,"in_reply_to":"bab6814e_fc5d0b16","updated":"2016-05-26 00:51:48.000000000","message":"Thank you for your advice, I fixed it.","commit_id":"9c6b1f8a52aeb213f1546d455baaf70c55f08b2e"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"1855710fa3376b880192f85289dd005efdac4c32","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Volume manage should get ceiling of volume size"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The function manage_existing_object_get_size return the floor of volume"},{"line_number":10,"context_line":"size in ceph. It should return the ceiling of volume size, just like"},{"line_number":11,"context_line":"LVM backend."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bab6814e_1ce8cf0f","line":9,"updated":"2016-05-25 15:01:01.000000000","message":"I think this should also state something like:\nThe function manage_existing_object_get_size casts the volume size as an int, which results in returning the floor of the volume size instead of the ceiling. It should cast it as a float, which will correctly result in the ceiling","commit_id":"9c6b1f8a52aeb213f1546d455baaf70c55f08b2e"},{"author":{"_account_id":20146,"name":"yuyafei","email":"yu.yafei@foxmail.com","username":"yuyafei"},"change_message_id":"7dcc1d4315b14476d2d59782a17f3067b5af8a6b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Volume manage should get ceiling of volume size"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The function manage_existing_object_get_size return the floor of volume"},{"line_number":10,"context_line":"size in ceph. It should return the ceiling of volume size, just like"},{"line_number":11,"context_line":"LVM backend."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bab6814e_3d95b832","line":9,"in_reply_to":"bab6814e_1ce8cf0f","updated":"2016-05-26 00:51:48.000000000","message":"Thank you for your advice.","commit_id":"9c6b1f8a52aeb213f1546d455baaf70c55f08b2e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0866c5a892f1e12a314ee4bc107fd7fe335d6981","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Volume manage should parse volume size as float"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The function manage_existing_object_get_size casts the volume size as "},{"line_number":10,"context_line":"an int, which results in returning the floor of the volume size instead"},{"line_number":11,"context_line":"of the ceiling. It should cast it as a float, which will correctly "},{"line_number":12,"context_line":"result in the ceiling."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"bab6814e_83f9c950","line":9,"range":{"start_line":9,"start_character":69,"end_line":9,"end_character":70},"updated":"2016-05-26 13:43:01.000000000","message":"nit: No trailing spaces","commit_id":"4f7e7824899d6945f7ffcbdbe580021bdbafd306"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0866c5a892f1e12a314ee4bc107fd7fe335d6981","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The function manage_existing_object_get_size casts the volume size as "},{"line_number":10,"context_line":"an int, which results in returning the floor of the volume size instead"},{"line_number":11,"context_line":"of the ceiling. It should cast it as a float, which will correctly "},{"line_number":12,"context_line":"result in the ceiling."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I3c8134964e3d8709657fb8bf49d8ba2f9d673149"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"bab6814e_a39a0d12","line":11,"range":{"start_line":11,"start_character":66,"end_line":11,"end_character":67},"updated":"2016-05-26 13:43:01.000000000","message":"nit: No trailing spaces","commit_id":"4f7e7824899d6945f7ffcbdbe580021bdbafd306"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"fa21e6c56dc44d701e31e81c2913ab0aa3a2af97","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yuyafei \u003cyu.yafei@zte.com.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-26 13:46:16 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Volume manage should parse volume size as float"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The function manage_existing_object_get_size casts the volume size as"},{"line_number":10,"context_line":"an int, which results in returning the floor of the volume size instead"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bab6814e_d531b5ee","line":7,"updated":"2016-05-26 17:36:55.000000000","message":"It is better to prefix RBD:","commit_id":"512d7dbcfbe08e7a197ead9cb2fcc65bd42ee88b"}],"cinder/tests/unit/test_rbd.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fd048a545081d0749cbc04379ce75f8f272b07bf","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                mock_rbd_image_size:"},{"line_number":223,"context_line":"            with mock.patch.object(self.driver.rbd.Image(), \u0027close\u0027) \\"},{"line_number":224,"context_line":"                    as mock_rbd_image_close:"},{"line_number":225,"context_line":"                mock_rbd_image_size.return_value \u003d 1.75 * units.Gi"},{"line_number":226,"context_line":"                existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}"},{"line_number":227,"context_line":"                return_size \u003d self.driver.manage_existing_get_size("},{"line_number":228,"context_line":"                    self.volume_a,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_e5234754","line":225,"range":{"start_line":225,"start_character":51,"end_line":225,"end_character":66},"updated":"2016-05-23 09:36:51.000000000","message":"-1: Image size return value should be an int, not a float.","commit_id":"539a576dcda1d63d7e2e057174065cb792ed41c1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fd048a545081d0749cbc04379ce75f8f272b07bf","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @common_mocks"},{"line_number":220,"context_line":"    def test_manage_existing_get_non_integer_size(self):"},{"line_number":221,"context_line":"        with mock.patch.object(self.driver.rbd.Image(), \u0027size\u0027) as \\"},{"line_number":222,"context_line":"                mock_rbd_image_size:"},{"line_number":223,"context_line":"            with mock.patch.object(self.driver.rbd.Image(), \u0027close\u0027) \\"},{"line_number":224,"context_line":"                    as mock_rbd_image_close:"},{"line_number":225,"context_line":"                mock_rbd_image_size.return_value \u003d 1.75 * units.Gi"},{"line_number":226,"context_line":"                existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}"},{"line_number":227,"context_line":"                return_size \u003d self.driver.manage_existing_get_size("},{"line_number":228,"context_line":"                    self.volume_a,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_e5e0672b","line":225,"range":{"start_line":221,"start_character":7,"end_line":225,"end_character":66},"updated":"2016-05-23 09:36:51.000000000","message":"-1: This is making it really confusing, since self.driver.rbd is already a Mock.  You don\u0027t need to mock any of those 2 methods.\n\n rbd_image \u003d self.driver.rbd.Image.return_value\n rbd_image.size.return_value \u003d int(1.75 * units.Gi)\n\n ...\n\n rbd_image.size.assert_called_once_with()0\n rbd_image.close.assert_called_once_with()0","commit_id":"539a576dcda1d63d7e2e057174065cb792ed41c1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4de97236a996b2794b07b769e77195c74082aa6e","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                mock_rbd_image_size:"},{"line_number":223,"context_line":"            with mock.patch.object(self.driver.rbd.Image(), \u0027close\u0027) \\"},{"line_number":224,"context_line":"                    as mock_rbd_image_close:"},{"line_number":225,"context_line":"                mock_rbd_image_size.return_value \u003d 1.75 * units.Gi"},{"line_number":226,"context_line":"                existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}"},{"line_number":227,"context_line":"                return_size \u003d self.driver.manage_existing_get_size("},{"line_number":228,"context_line":"                    self.volume_a,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_e3c7b861","line":225,"range":{"start_line":225,"start_character":51,"end_line":225,"end_character":66},"in_reply_to":"bab6814e_3d9b9f67","updated":"2016-05-23 12:01:46.000000000","message":"No, it is not an int.  It is a float value with no significant decimal information, which is not the same:\n\n 1.75 * units.Gi is 1879048192.0\n\nWhich is a float, and on a running system non mocked size() method would not return a float, otherwise you wouldn\u0027t need to do the float cast in the code inside the math.ceil method call in manage_existing_get_size.","commit_id":"539a576dcda1d63d7e2e057174065cb792ed41c1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4de97236a996b2794b07b769e77195c74082aa6e","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @common_mocks"},{"line_number":220,"context_line":"    def test_manage_existing_get_non_integer_size(self):"},{"line_number":221,"context_line":"        with mock.patch.object(self.driver.rbd.Image(), \u0027size\u0027) as \\"},{"line_number":222,"context_line":"                mock_rbd_image_size:"},{"line_number":223,"context_line":"            with mock.patch.object(self.driver.rbd.Image(), \u0027close\u0027) \\"},{"line_number":224,"context_line":"                    as mock_rbd_image_close:"},{"line_number":225,"context_line":"                mock_rbd_image_size.return_value \u003d 1.75 * units.Gi"},{"line_number":226,"context_line":"                existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}"},{"line_number":227,"context_line":"                return_size \u003d self.driver.manage_existing_get_size("},{"line_number":228,"context_line":"                    self.volume_a,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_c3c27452","line":225,"range":{"start_line":221,"start_character":7,"end_line":225,"end_character":66},"in_reply_to":"bab6814e_5d59438d","updated":"2016-05-23 12:01:46.000000000","message":"I understand what you are trying to test, I\u0027m just saying that the way you are doing it is too convoluted.\n\nThis test reads a lot better replacing L221 to L232 with:\n\n rbd_image \u003d self.driver.rbd.Image.return_value\n rbd_image.size.return_value \u003d int(1.75 * units.Gi)\n existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}\n return_size \u003d self.driver.manage_existing_get_size(\n     self.volume_a, existing_ref)\n self.assertEqual(2, return_size)\n rbd_image.size.assert_called_once_with()\n rbd_image.close.assert_called_once_with()","commit_id":"539a576dcda1d63d7e2e057174065cb792ed41c1"},{"author":{"_account_id":20146,"name":"yuyafei","email":"yu.yafei@foxmail.com","username":"yuyafei"},"change_message_id":"5f89c43f6d337c13f8e9d547eaa1018447f22815","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                mock_rbd_image_size:"},{"line_number":223,"context_line":"            with mock.patch.object(self.driver.rbd.Image(), \u0027close\u0027) \\"},{"line_number":224,"context_line":"                    as mock_rbd_image_close:"},{"line_number":225,"context_line":"                mock_rbd_image_size.return_value \u003d 1.75 * units.Gi"},{"line_number":226,"context_line":"                existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}"},{"line_number":227,"context_line":"                return_size \u003d self.driver.manage_existing_get_size("},{"line_number":228,"context_line":"                    self.volume_a,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_3d9b9f67","line":225,"range":{"start_line":225,"start_character":51,"end_line":225,"end_character":66},"in_reply_to":"bab6814e_e5234754","updated":"2016-05-23 11:33:36.000000000","message":"Yes, Image size return value should be an int of MB, 1.75*units.Gi is 1792MB, it is an int.","commit_id":"539a576dcda1d63d7e2e057174065cb792ed41c1"},{"author":{"_account_id":20146,"name":"yuyafei","email":"yu.yafei@foxmail.com","username":"yuyafei"},"change_message_id":"5f89c43f6d337c13f8e9d547eaa1018447f22815","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @common_mocks"},{"line_number":220,"context_line":"    def test_manage_existing_get_non_integer_size(self):"},{"line_number":221,"context_line":"        with mock.patch.object(self.driver.rbd.Image(), \u0027size\u0027) as \\"},{"line_number":222,"context_line":"                mock_rbd_image_size:"},{"line_number":223,"context_line":"            with mock.patch.object(self.driver.rbd.Image(), \u0027close\u0027) \\"},{"line_number":224,"context_line":"                    as mock_rbd_image_close:"},{"line_number":225,"context_line":"                mock_rbd_image_size.return_value \u003d 1.75 * units.Gi"},{"line_number":226,"context_line":"                existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}"},{"line_number":227,"context_line":"                return_size \u003d self.driver.manage_existing_get_size("},{"line_number":228,"context_line":"                    self.volume_a,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_5d59438d","line":225,"range":{"start_line":221,"start_character":7,"end_line":225,"end_character":66},"in_reply_to":"bab6814e_e5e0672b","updated":"2016-05-23 11:33:36.000000000","message":"This unit test refers to test_rbd.test_manage_existing_get_size, and I want to test the size of rbd_image is non_integer in GB and return the ceiling of volume size in GB. Thank you.","commit_id":"539a576dcda1d63d7e2e057174065cb792ed41c1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"258062be8abf18c98e4d671af6e37b2cff69f33b","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @common_mocks"},{"line_number":220,"context_line":"    def test_manage_existing_get_non_integer_size(self):"},{"line_number":221,"context_line":"        with mock.patch.object(self.driver.rbd.Image(), \u0027size\u0027) as \\"},{"line_number":222,"context_line":"                mock_rbd_image_size:"},{"line_number":223,"context_line":"            with mock.patch.object(self.driver.rbd.Image(), \u0027close\u0027) \\"},{"line_number":224,"context_line":"                    as mock_rbd_image_close:"},{"line_number":225,"context_line":"                mock_rbd_image_size.return_value \u003d 1.75 * units.Gi"},{"line_number":226,"context_line":"                existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}"},{"line_number":227,"context_line":"                return_size \u003d self.driver.manage_existing_get_size("}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_0f349af9","line":224,"range":{"start_line":221,"start_character":1,"end_line":224,"end_character":44},"updated":"2016-05-23 13:47:33.000000000","message":"-1: As mentioned on patch 2, this is not necessary and makes the test harder to read.","commit_id":"484cbb759e20980e70a70716bbb1d5710bf8c40f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"258062be8abf18c98e4d671af6e37b2cff69f33b","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                mock_rbd_image_size:"},{"line_number":223,"context_line":"            with mock.patch.object(self.driver.rbd.Image(), \u0027close\u0027) \\"},{"line_number":224,"context_line":"                    as mock_rbd_image_close:"},{"line_number":225,"context_line":"                mock_rbd_image_size.return_value \u003d 1.75 * units.Gi"},{"line_number":226,"context_line":"                existing_ref \u003d {\u0027source-name\u0027: self.volume_a.name}"},{"line_number":227,"context_line":"                return_size \u003d self.driver.manage_existing_get_size("},{"line_number":228,"context_line":"                    self.volume_a,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_4f6ce207","line":225,"range":{"start_line":225,"start_character":16,"end_line":225,"end_character":66},"updated":"2016-05-23 13:47:33.000000000","message":"-1: As mentioned on patch 2, this should be an int, not a float","commit_id":"484cbb759e20980e70a70716bbb1d5710bf8c40f"}],"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fd048a545081d0749cbc04379ce75f8f272b07bf","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            finally:"},{"line_number":1054,"context_line":"                rbd_image.close()"},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"            # RBD image size is returned in bytes.  Attempt to parse"},{"line_number":1057,"context_line":"            # size as a float and round up to the next integer."},{"line_number":1058,"context_line":"            try:"},{"line_number":1059,"context_line":"                convert_size \u003d int(math.ceil(float(image_size) / units.Gi))"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_8a37ea4b","line":1056,"range":{"start_line":1056,"start_character":44,"end_line":1056,"end_character":49},"updated":"2016-05-23 09:36:51.000000000","message":"nit: It would be good to update the comment to match the actual code.","commit_id":"539a576dcda1d63d7e2e057174065cb792ed41c1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"82a8d59fa018fdf12af5354087167fc9170afcf8","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            finally:"},{"line_number":1054,"context_line":"                rbd_image.close()"},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"            # RBD image size is returned in megabytes.  Attempt to parse"},{"line_number":1057,"context_line":"            # size as a float and round up to the next integer."},{"line_number":1058,"context_line":"            try:"},{"line_number":1059,"context_line":"                convert_size \u003d int(math.ceil(float(image_size) / units.Gi))"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_636c6808","line":1056,"range":{"start_line":1056,"start_character":44,"end_line":1056,"end_character":53},"updated":"2016-05-23 12:02:18.000000000","message":"Ooops, I misread the original code comment, it was correct, it was in bytes, as it was referring to returned value from L1048.  So very sorry for the mistake, it should be changed back.","commit_id":"db044f1ac1d8f814569619a2f2c04c1affdcfb11"},{"author":{"_account_id":20146,"name":"yuyafei","email":"yu.yafei@foxmail.com","username":"yuyafei"},"change_message_id":"6c1b1f8086dca97b0e1d527f320b6a702723e414","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            finally:"},{"line_number":1054,"context_line":"                rbd_image.close()"},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"            # RBD image size is returned in megabytes.  Attempt to parse"},{"line_number":1057,"context_line":"            # size as a float and round up to the next integer."},{"line_number":1058,"context_line":"            try:"},{"line_number":1059,"context_line":"                convert_size \u003d int(math.ceil(float(image_size) / units.Gi))"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_4eb6abf9","line":1056,"range":{"start_line":1056,"start_character":44,"end_line":1056,"end_character":53},"in_reply_to":"bab6814e_636c6808","updated":"2016-05-23 12:11:19.000000000","message":"OK, I have changed back.","commit_id":"db044f1ac1d8f814569619a2f2c04c1affdcfb11"}]}
