)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d308a1b2ad284460e62d71b953fb0cb4e6de0fe8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a80dd14_467aba24","line":20,"updated":"2015-03-09 19:16:20.000000000","message":"Please create a new blueprint that depends on my blueprint.\n\nSee example blueprint used in Pure\u0027s implementation.\n\nhttps://review.openstack.org/#/c/157681/\n\nAlso it needs the \"blueprint\" keyword for the link to work properly.\n\nImplements: blueprint \u003cblueprint name\u003e","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58089255c62d8a1b35cc534e081ee5f62ed73863","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a80dd14_86df52d5","line":20,"in_reply_to":"9a80dd14_467aba24","updated":"2015-03-09 19:24:14.000000000","message":"I thought we typically didn\u0027t do this... that\u0027s going to be a lot of blueprints...","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"12aa5b911049de1eea5a149ddc7a6372f2e78781","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a80dd14_820e3ee3","line":20,"in_reply_to":"9a80dd14_86df52d5","updated":"2015-03-10 11:09:12.000000000","message":"I agree with @Eric, having driver specific BPs will be too much.\n@Bharat, fix the Implements keyword, it doesn\u0027t make the BP text a hyperlink","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4d649e44bef530a7e24568ef9bf1986cdf0ce1c9","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: blueprint over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a80dd14_c53cbb31","line":20,"updated":"2015-03-10 13:21:38.000000000","message":"Appears actual blueprint should be: glusterfs-over-subscription-thin-provisioning","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2bf82f3d3fca54668e41e487d8813ca6f119078e","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: blueprint over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a80dd14_70802647","line":20,"in_reply_to":"9a80dd14_6d9db159","updated":"2015-03-10 14:52:55.000000000","message":"Yes, the PTL has asked for a blueprint to keep track of new features. Please create a new blueprint for glusterfs.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"436daf6da4d7624a38967322c438bc4047e4250f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: blueprint over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a80dd14_6d9db159","line":20,"in_reply_to":"9a80dd14_6db851e6","updated":"2015-03-10 14:42:18.000000000","message":"Okay will do it. Thanks.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cc4f0dcdc2501d31903188f037f9e95ca5aeb391","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: blueprint over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a80dd14_dbc65368","line":20,"in_reply_to":"9a80dd14_70802647","updated":"2015-03-10 15:11:28.000000000","message":"Okay xing-yang, will do that in the next patch set.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0bc5b69603e62aff557f3a5c9ee4f8aa83fab037","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: blueprint over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a80dd14_6db851e6","line":20,"in_reply_to":"9a80dd14_7bb2cce5","updated":"2015-03-10 14:40:11.000000000","message":"Then either you should remove the blueprint reference or correct it. There is no point referring to an invalid blueprint.\n\nI can see Eric\u0027s argument for not having a blueprint, but at least for Kilo thingee has required a blueprint for all feature support to be able to track everything.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"e9756def8128c47cf9e4c25696265a959f69f69e","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * thick_provisioning_support (True or False)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Co-Authored-By: Deepak C Shetty \u003cdeepakcs@redhat.com\u003e"},{"line_number":20,"context_line":"Implements: blueprint over-subscription-in-thin-provisioning"},{"line_number":21,"context_line":"Change-Id: I7fbbe989c865dce42102b63f7d52a8edb63e7a9e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a80dd14_7bb2cce5","line":20,"in_reply_to":"9a80dd14_c53cbb31","updated":"2015-03-10 14:09:59.000000000","message":"As per Eric\u0027s comment, creating separate blueprints for each and every driver to implement the same feature going to be a lot of blueprints.\n\nhttps://review.openstack.org/#/c/162718/1//COMMIT_MSG","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"}],"cinder/tests/test_glusterfs.py":[{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"835025dc2a4c3f8705638437e7c1a127e6f834d0","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            self.assertEqual((df_avail, df_total_size), result)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def test_get_provisioned_capacity(self):"},{"line_number":260,"context_line":"        \"\"\"_get_thin_provisioned_size should calculate correct value.\"\"\""},{"line_number":261,"context_line":"        drv \u003d self._driver"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        self._driver.shares \u003d {\u0027127.7.7.7:/gluster1\u0027: None}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_ec8e0c78","line":260,"updated":"2015-03-10 12:07:41.000000000","message":"s/_get_thin_provisioned_size/_get_provisioned_size","commit_id":"9496fcb7baaa711faee38e2e441032e8cbe50267"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"4d3896453ddb7c3ac70700e498a03570cd9bbc26","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            self.assertEqual(6.0, provisioned_capacity)"},{"line_number":276,"context_line":"            mock_mock_listdir.assert_called_once_with(self.TEST_MNT_POINT)"},{"line_number":277,"context_line":"            self.assertEqual(len(files), mock_getsize.call_count)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def test_load_shares_config(self):"},{"line_number":280,"context_line":"        drv \u003d self._driver"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_85cc83bc","line":278,"updated":"2015-03-10 13:20:50.000000000","message":"Add a comment that provisioned_capacity is not impacted by thin_provisioning or thick_provisioning or over_subscribed_ratio settings.\n\nBy this is strange, as I expected different reporting of provisioned capacity with  self.configuration.glusterfs_sparsed_volumes or\t                        self.configuration.glusterfs_qcow2_volumes\nset for thin_provisioning vs other settings.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"e9756def8128c47cf9e4c25696265a959f69f69e","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            self.assertEqual(6.0, provisioned_capacity)"},{"line_number":276,"context_line":"            mock_mock_listdir.assert_called_once_with(self.TEST_MNT_POINT)"},{"line_number":277,"context_line":"            self.assertEqual(len(files), mock_getsize.call_count)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def test_load_shares_config(self):"},{"line_number":280,"context_line":"        drv \u003d self._driver"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_c7603ed2","line":278,"in_reply_to":"9a80dd14_85cc83bc","updated":"2015-03-10 14:09:59.000000000","message":"Yes there an impact of all these perameters, but in the scheduler side. We will call \"_get_provisioned_capacity\" method to calculate \"provisioned_capacity\" only when we are using thin provisioning. (i.e. either glusterfs_sparsed_volumes is true or glusterfs_qcow2_volumes is true or both).\n\nPlease have a look at: Line numbers - 225 to 228\nhttps://review.openstack.org/#/c/162718/4/cinder/volume/drivers/glusterfs.py","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"97e73216486b0bb66eff2ac026f23638d1da8e47","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            self.assertEqual(6.0, provisioned_capacity)"},{"line_number":276,"context_line":"            mock_mock_listdir.assert_called_once_with(self.TEST_MNT_POINT)"},{"line_number":277,"context_line":"            self.assertEqual(len(files), mock_getsize.call_count)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def test_load_shares_config(self):"},{"line_number":280,"context_line":"        drv \u003d self._driver"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_c7a83e23","line":278,"in_reply_to":"9a80dd14_c7603ed2","updated":"2015-03-10 14:17:50.000000000","message":"Then you need to beef up the test to handle thin_provisioned case with different glusterfs parameters (sparse, or qcow2 and without them) to ensure calculations are different for these 2 cases vs. others.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"5c8c5e4b4297698efd038acfc42a133fa491a8f7","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            self.assertEqual(6.0, provisioned_capacity)"},{"line_number":276,"context_line":"            mock_mock_listdir.assert_called_once_with(self.TEST_MNT_POINT)"},{"line_number":277,"context_line":"            self.assertEqual(len(files), mock_getsize.call_count)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def test_load_shares_config(self):"},{"line_number":280,"context_line":"        drv \u003d self._driver"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_eab98716","line":278,"in_reply_to":"9a80dd14_c7a83e23","updated":"2015-03-10 14:35:57.000000000","message":"Okay I will more test cases to ensure the above.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2e182487ace531f524ce95a833f653eab6ef657a","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            self.assertEqual(3.0, provisioned_capacity)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def test_update_volume_stats_sparse(self):"},{"line_number":276,"context_line":"        \"\"\"_update_volume_stats_sparse with sparce files.\"\"\""},{"line_number":277,"context_line":"        drv \u003d self._driver"},{"line_number":278,"context_line":"        rfclient \u003d remotefs_drv.RemoteFSSnapDriver"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_31ce4284","line":276,"updated":"2015-03-12 15:02:50.000000000","message":"\"sparce\" typo","commit_id":"96886d1f432834fae3ef73a724e0c52ea7b78e26"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2e182487ace531f524ce95a833f653eab6ef657a","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    def test_update_volume_stats_sparse(self):"},{"line_number":276,"context_line":"        \"\"\"_update_volume_stats_sparse with sparce files.\"\"\""},{"line_number":277,"context_line":"        drv \u003d self._driver"},{"line_number":278,"context_line":"        rfclient \u003d remotefs_drv.RemoteFSSnapDriver"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        with mock.patch.object(rfclient, \u0027_update_volume_stats\u0027) as \\"},{"line_number":281,"context_line":"                mock_update_volume_stats,\\"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_119dbe59","line":278,"updated":"2015-03-12 15:02:50.000000000","message":"\"rfclient\" sounds like \"RemoteFsClient\" (brick) which is confusing since it points to the driver, please name these vars something else.","commit_id":"96886d1f432834fae3ef73a724e0c52ea7b78e26"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2e182487ace531f524ce95a833f653eab6ef657a","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def test_update_volume_stats_qcow2(self):"},{"line_number":301,"context_line":"        \"\"\"_update_volume_stats_sparse with qcow2 files.\"\"\""},{"line_number":302,"context_line":"        \"\"\" \"\"\""},{"line_number":303,"context_line":"        drv \u003d self._driver"},{"line_number":304,"context_line":"        rfclient \u003d remotefs_drv.RemoteFSSnapDriver"},{"line_number":305,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_51c9f677","line":302,"updated":"2015-03-12 15:02:50.000000000","message":"Extra comment string","commit_id":"96886d1f432834fae3ef73a724e0c52ea7b78e26"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2e182487ace531f524ce95a833f653eab6ef657a","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        \"\"\"_update_volume_stats_sparse with qcow2 files.\"\"\""},{"line_number":302,"context_line":"        \"\"\" \"\"\""},{"line_number":303,"context_line":"        drv \u003d self._driver"},{"line_number":304,"context_line":"        rfclient \u003d remotefs_drv.RemoteFSSnapDriver"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        with mock.patch.object(rfclient, \u0027_update_volume_stats\u0027) as \\"},{"line_number":307,"context_line":"                mock_update_volume_stats,\\"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_31a3a29f","line":304,"updated":"2015-03-12 15:02:50.000000000","message":"Ditto","commit_id":"96886d1f432834fae3ef73a724e0c52ea7b78e26"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2e182487ace531f524ce95a833f653eab6ef657a","unresolved":false,"context_lines":[{"line_number":326,"context_line":"    def test_update_volume_stats_thick(self):"},{"line_number":327,"context_line":"        \"\"\"_update_volume_stats_sparse with raw files.\"\"\""},{"line_number":328,"context_line":"        drv \u003d self._driver"},{"line_number":329,"context_line":"        rfclient \u003d remotefs_drv.RemoteFSSnapDriver"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        with mock.patch.object(rfclient, \u0027_update_volume_stats\u0027) as \\"},{"line_number":332,"context_line":"                mock_update_volume_stats:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_d1b966cc","line":329,"updated":"2015-03-12 15:02:50.000000000","message":"Ditto","commit_id":"96886d1f432834fae3ef73a724e0c52ea7b78e26"}],"cinder/tests/unit/test_glusterfs.py":[{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"d3443129ac2c96c80424ad066dbd1d72a4330101","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"            self.assertEqual(data, drv._stats)"},{"line_number":345,"context_line":"            self.assertTrue(mock_update_volume_stats.called)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def test_load_shares_config(self):"},{"line_number":348,"context_line":"        drv \u003d self._driver"},{"line_number":349,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7ad32947_c2b84fe8","line":346,"updated":"2015-04-28 14:32:31.000000000","message":"Please, comment why sparse and qcow2 TRUE not covered by tests.\n\nWhich combination of thin and thick provisioning this driver supports, and what are the tests for it?","commit_id":"f119a62e60f5689b013203d4900aaeead6bff555"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cd558dae18f2e783b9ae90c57fbd8349dba7dcc0","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"            self.assertEqual(data, drv._stats)"},{"line_number":345,"context_line":"            self.assertTrue(mock_update_volume_stats.called)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def test_load_shares_config(self):"},{"line_number":348,"context_line":"        drv \u003d self._driver"},{"line_number":349,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9af37de9_ee6fa390","line":346,"in_reply_to":"7ad32947_c2b84fe8","updated":"2015-05-11 15:59:01.000000000","message":"We are fixing this combination conflict in the below patch:\n\nhttps://review.openstack.org/#/c/162718/","commit_id":"f119a62e60f5689b013203d4900aaeead6bff555"}],"cinder/volume/drivers/glusterfs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58089255c62d8a1b35cc534e081ee5f62ed73863","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                          hashed)"},{"line_number":203,"context_line":"        return path"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _get_thin_provisioned_capacity(self):"},{"line_number":206,"context_line":"        \"\"\"Get the sum of all volumes sizes.\"\"\""},{"line_number":207,"context_line":"        provisioned_size \u003d 0.0"},{"line_number":208,"context_line":"        for share in self.shares.keys():"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_46c8fa54","line":205,"updated":"2015-03-09 19:24:14.000000000","message":"Probably not a good method name since this doesn\u0027t return a capacity, but a usage value.","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58089255c62d8a1b35cc534e081ee5f62ed73863","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        return path"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _get_thin_provisioned_capacity(self):"},{"line_number":206,"context_line":"        \"\"\"Get the sum of all volumes sizes.\"\"\""},{"line_number":207,"context_line":"        provisioned_size \u003d 0.0"},{"line_number":208,"context_line":"        for share in self.shares.keys():"},{"line_number":209,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_a62e16f9","line":206,"updated":"2015-03-09 19:24:14.000000000","message":"(and snapshots and any other files on the mount point, with this implementation)","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58089255c62d8a1b35cc534e081ee5f62ed73863","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        \"\"\"Get the sum of all volumes sizes.\"\"\""},{"line_number":207,"context_line":"        provisioned_size \u003d 0.0"},{"line_number":208,"context_line":"        for share in self.shares.keys():"},{"line_number":209,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"},{"line_number":210,"context_line":"            for volume in os.listdir(mount_path):"},{"line_number":211,"context_line":"                volume_path \u003d os.path.join(mount_path, volume)"},{"line_number":212,"context_line":"                provisioned_size +\u003d os.path.getsize(volume_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_c6186ad5","line":209,"updated":"2015-03-09 19:24:14.000000000","message":"This isn\u0027t calculating what\u0027s provisioned, but what is currently used (unless the file is sparse).  I don\u0027t think this is the right approach since it would only handle raw volumes and not qcow2-formatted volumes.\n\nFor example, if you have an unused 2GB volume allocated as a qcow2 file, it may only take up a few KB of space, but you have provisioned 2GB.","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"12aa5b911049de1eea5a149ddc7a6372f2e78781","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        \"\"\"Get the sum of all volumes sizes.\"\"\""},{"line_number":207,"context_line":"        provisioned_size \u003d 0.0"},{"line_number":208,"context_line":"        for share in self.shares.keys():"},{"line_number":209,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"},{"line_number":210,"context_line":"            for volume in os.listdir(mount_path):"},{"line_number":211,"context_line":"                volume_path \u003d os.path.join(mount_path, volume)"},{"line_number":212,"context_line":"                provisioned_size +\u003d os.path.getsize(volume_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_6264eab8","line":209,"in_reply_to":"9a80dd14_c6186ad5","updated":"2015-03-10 11:09:12.000000000","message":"os.path.getsize gives the virtual size (not used size) so what we get from this function is the total virtual size (aka apparent size) and actually called as \u0027provisioned capacity\u0027 in the spec and in the etherpad @ https://etherpad.openstack.org/p/cinder-over-subscription-white-board\n\nSo get_provisioned_capacity seems to be a good name","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d308a1b2ad284460e62d71b953fb0cb4e6de0fe8","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            provisioned_capacity \u003d round(global_capacity - global_free, 2)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        data[\u0027provisioned_capacity_gb\u0027] \u003d provisioned_capacity"},{"line_number":230,"context_line":"        data[\u0027max_over_subscription_ratio\u0027] \u003d \\"},{"line_number":231,"context_line":"            self.configuration.max_over_subscription_ratio"},{"line_number":232,"context_line":"        data[\u0027thin_provisioning_support\u0027] \u003d thin_enabled"},{"line_number":233,"context_line":"        data[\u0027thick_provisioning_support\u0027] \u003d not thin_enabled"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_a6ec562b","line":230,"updated":"2015-03-09 19:16:20.000000000","message":"Suggest to use () rather than \\.","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"04307d00ba7c277ccd5fbfbae70c718085489b19","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            provisioned_capacity \u003d round(global_capacity - global_free, 2)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        data[\u0027provisioned_capacity_gb\u0027] \u003d provisioned_capacity"},{"line_number":230,"context_line":"        data[\u0027max_over_subscription_ratio\u0027] \u003d \\"},{"line_number":231,"context_line":"            self.configuration.max_over_subscription_ratio"},{"line_number":232,"context_line":"        data[\u0027thin_provisioning_support\u0027] \u003d thin_enabled"},{"line_number":233,"context_line":"        data[\u0027thick_provisioning_support\u0027] \u003d not thin_enabled"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_c6cdca32","line":230,"in_reply_to":"9a80dd14_a6ec562b","updated":"2015-03-09 19:31:36.000000000","message":"Thank you. Will address in the next patch set.","commit_id":"08f3ac1346b14f2425528f005387dcb1153279df"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"835025dc2a4c3f8705638437e7c1a127e6f834d0","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _get_provisioned_capacity(self):"},{"line_number":206,"context_line":"        \"\"\"Get the sum of sizes of volumes, snapshots and any other"},{"line_number":207,"context_line":"           files on the moundpoint."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        provisioned_size \u003d 0.0"},{"line_number":210,"context_line":"        for share in self.shares.keys():"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_8ca7500a","line":207,"updated":"2015-03-10 12:07:41.000000000","message":"s/mound/mount","commit_id":"9496fcb7baaa711faee38e2e441032e8cbe50267"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"4d3896453ddb7c3ac70700e498a03570cd9bbc26","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"},{"line_number":212,"context_line":"            for volume in os.listdir(mount_path):"},{"line_number":213,"context_line":"                volume_path \u003d os.path.join(mount_path, volume)"},{"line_number":214,"context_line":"                provisioned_size +\u003d os.path.getsize(volume_path)"},{"line_number":215,"context_line":"        return round(provisioned_size / units.Gi, 2)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_2515979b","line":214,"updated":"2015-03-10 13:20:50.000000000","message":"0 overhead for directory entries?","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"e9756def8128c47cf9e4c25696265a959f69f69e","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"},{"line_number":212,"context_line":"            for volume in os.listdir(mount_path):"},{"line_number":213,"context_line":"                volume_path \u003d os.path.join(mount_path, volume)"},{"line_number":214,"context_line":"                provisioned_size +\u003d os.path.getsize(volume_path)"},{"line_number":215,"context_line":"        return round(provisioned_size / units.Gi, 2)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_2762faad","line":214,"in_reply_to":"9a80dd14_2515979b","updated":"2015-03-10 14:09:59.000000000","message":"Yes you are right... we are ignoring directory entries for now.\n\nWe assume that only Cinder is using this backend drive to create volumes, snapshots, no other drirect access to drive. So we are ignoring directory entries.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"97e73216486b0bb66eff2ac026f23638d1da8e47","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"},{"line_number":212,"context_line":"            for volume in os.listdir(mount_path):"},{"line_number":213,"context_line":"                volume_path \u003d os.path.join(mount_path, volume)"},{"line_number":214,"context_line":"                provisioned_size +\u003d os.path.getsize(volume_path)"},{"line_number":215,"context_line":"        return round(provisioned_size / units.Gi, 2)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_2a51df0e","line":214,"in_reply_to":"9a80dd14_2762faad","updated":"2015-03-10 14:17:50.000000000","message":"do not think that will scale.when you have a lot of small volumes.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"5c8c5e4b4297698efd038acfc42a133fa491a8f7","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"},{"line_number":212,"context_line":"            for volume in os.listdir(mount_path):"},{"line_number":213,"context_line":"                volume_path \u003d os.path.join(mount_path, volume)"},{"line_number":214,"context_line":"                provisioned_size +\u003d os.path.getsize(volume_path)"},{"line_number":215,"context_line":"        return round(provisioned_size / units.Gi, 2)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_6d7211af","line":214,"in_reply_to":"9a80dd14_2a51df0e","updated":"2015-03-10 14:35:57.000000000","message":"ahh.. I got your point, do I need to use any tools like \"du --apparent-size \u003cFolder\u003e\".\n\nIs there any other way to get it.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"4d3896453ddb7c3ac70700e498a03570cd9bbc26","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        data[\u0027thin_provisioning_support\u0027] \u003d thin_enabled"},{"line_number":236,"context_line":"        data[\u0027thick_provisioning_support\u0027] \u003d not thin_enabled"},{"line_number":237,"context_line":"        self._stats \u003d data"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @locked_volume_id_operation"},{"line_number":240,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":241,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_c5f59b83","line":238,"updated":"2015-03-10 13:20:50.000000000","message":"No impact of max_over_subscription_ratio?","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"e9756def8128c47cf9e4c25696265a959f69f69e","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        data[\u0027thin_provisioning_support\u0027] \u003d thin_enabled"},{"line_number":236,"context_line":"        data[\u0027thick_provisioning_support\u0027] \u003d not thin_enabled"},{"line_number":237,"context_line":"        self._stats \u003d data"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @locked_volume_id_operation"},{"line_number":240,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":241,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_c774be38","line":238,"in_reply_to":"9a80dd14_c5f59b83","updated":"2015-03-10 14:09:59.000000000","message":"Scheduler will use max_over_subscription_ratio value while scheduling.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/scheduler/filters/capacity_filter.py#L92","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"97e73216486b0bb66eff2ac026f23638d1da8e47","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        data[\u0027thin_provisioning_support\u0027] \u003d thin_enabled"},{"line_number":236,"context_line":"        data[\u0027thick_provisioning_support\u0027] \u003d not thin_enabled"},{"line_number":237,"context_line":"        self._stats \u003d data"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @locked_volume_id_operation"},{"line_number":240,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":241,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_ca6043d2","line":238,"in_reply_to":"9a80dd14_c774be38","updated":"2015-03-10 14:17:50.000000000","message":"OK.","commit_id":"f7d29e71763a0101a5c307e2515a1adc31a50c8c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2e182487ace531f524ce95a833f653eab6ef657a","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                          hashed)"},{"line_number":203,"context_line":"        return path"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _get_provisioned_capacity(self):"},{"line_number":206,"context_line":"        \"\"\"Get the sum of sizes of volumes, snapshots and any other"},{"line_number":207,"context_line":"           files on the mountpoint."},{"line_number":208,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_f1266a67","line":205,"updated":"2015-03-12 15:02:50.000000000","message":"This needs to be in the RemoteFSDriver class so we can use it elsewhere.","commit_id":"96886d1f432834fae3ef73a724e0c52ea7b78e26"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2e182487ace531f524ce95a833f653eab6ef657a","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        return path"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _get_provisioned_capacity(self):"},{"line_number":206,"context_line":"        \"\"\"Get the sum of sizes of volumes, snapshots and any other"},{"line_number":207,"context_line":"           files on the mountpoint."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        provisioned_size \u003d 0.0"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_71e7da40","line":206,"updated":"2015-03-12 15:02:50.000000000","message":"Shouldn\u0027t wrap lines on a short method description:\n\nhttps://www.python.org/dev/peps/pep-0257/#one-line-docstrings\n\nhttps://www.python.org/dev/peps/pep-0257/#multi-line-docstrings","commit_id":"96886d1f432834fae3ef73a724e0c52ea7b78e26"}],"cinder/volume/drivers/remotefs.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"374176e4c8e5f562852cf63fc4f6afed038444c5","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def _get_provisioned_capacity(self):"},{"line_number":185,"context_line":"        \"\"\"Get the sum of sizes of volumes, snapshots and any other"},{"line_number":186,"context_line":"        files on the mountpoint."},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":"        provisioned_size \u003d 0.0"},{"line_number":189,"context_line":"        for share in self.shares.keys():"},{"line_number":190,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab921fb_5aa823db","line":187,"updated":"2015-04-25 03:43:00.000000000","message":"http://docs.openstack.org/developer/hacking/#docstrings\n\nA multi line docstring has a one-line summary, less than 80 characters.","commit_id":"ef6c805e73984065887294e7c4bcd3a1cfcbdb57"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"67047c4c3293907b08ee58ad665d1d1194c2c0cd","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def _get_provisioned_capacity(self):"},{"line_number":185,"context_line":"        \"\"\"Get the sum of sizes of volumes, snapshots and any other"},{"line_number":186,"context_line":"        files on the mountpoint."},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":"        provisioned_size \u003d 0.0"},{"line_number":189,"context_line":"        for share in self.shares.keys():"},{"line_number":190,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab921fb_873997d9","line":187,"in_reply_to":"bab921fb_5aa823db","updated":"2015-04-27 06:09:28.000000000","message":"Done","commit_id":"ef6c805e73984065887294e7c4bcd3a1cfcbdb57"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"d3443129ac2c96c80424ad066dbd1d72a4330101","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"},{"line_number":193,"context_line":"            out, _ \u003d self._execute(\u0027du\u0027, \u0027--bytes\u0027, mount_path,"},{"line_number":194,"context_line":"                                   run_as_root\u003dTrue)"},{"line_number":195,"context_line":"            provisioned_size +\u003d int(out.split()[0])"},{"line_number":196,"context_line":"        return round(provisioned_size / units.Gi, 2)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _get_mount_point_base(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7ad32947_c804d116","line":195,"updated":"2015-04-28 14:32:31.000000000","message":"Does that cover capacity used for metadata and directory structure?","commit_id":"f119a62e60f5689b013203d4900aaeead6bff555"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cd558dae18f2e783b9ae90c57fbd8349dba7dcc0","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            mount_path \u003d self._get_mount_point_for_share(share)"},{"line_number":193,"context_line":"            out, _ \u003d self._execute(\u0027du\u0027, \u0027--bytes\u0027, mount_path,"},{"line_number":194,"context_line":"                                   run_as_root\u003dTrue)"},{"line_number":195,"context_line":"            provisioned_size +\u003d int(out.split()[0])"},{"line_number":196,"context_line":"        return round(provisioned_size / units.Gi, 2)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _get_mount_point_base(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9af37de9_cebe1fff","line":195,"in_reply_to":"7ad32947_c804d116","updated":"2015-05-11 15:59:01.000000000","message":"Yes it covers, here we should calculate actual size used on the share.","commit_id":"f119a62e60f5689b013203d4900aaeead6bff555"}]}
