)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"3bd6495c50e27e3448ac7c610fb9e5df2f8d77a5","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This should be expanded to use rbd diff_iterate2() when"},{"line_number":12,"context_line":"Infernalis and newer deployments are widespread."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Ivan Kolodyazhny \u003ce0ne@e0ne.info\u003e"},{"line_number":15,"context_line":"Change-Id: Ida7654545ae46d106908b991c91bab989b998484"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_2618da74","line":13,"updated":"2016-08-01 11:37:51.000000000","message":"Is this related to any bug or feature in LP?","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59ef7fbb09cb8c68caa579db2796812cb76f159b","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This should be expanded to use rbd diff_iterate2() when"},{"line_number":12,"context_line":"Infernalis and newer deployments are widespread."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Ivan Kolodyazhny \u003ce0ne@e0ne.info\u003e"},{"line_number":15,"context_line":"Change-Id: Ida7654545ae46d106908b991c91bab989b998484"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_81087e29","line":13,"in_reply_to":"bacf61ea_2618da74","updated":"2016-08-01 16:55:40.000000000","message":"Please add a blueprint here as this is a new feature.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b8411e7d6f15e4d8013e601f4c17a42482e6b747","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This should be expanded to use rbd diff_iterate2() when"},{"line_number":12,"context_line":"Infernalis and newer deployments are widespread."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Ivan Kolodyazhny \u003ce0ne@e0ne.info\u003e"},{"line_number":15,"context_line":"Change-Id: Ida7654545ae46d106908b991c91bab989b998484"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_28aa4e19","line":13,"in_reply_to":"bacf61ea_28208ef6","updated":"2016-08-01 20:03:09.000000000","message":"I agree. No blueprint needed for something like this. It maybe used to have some value in tracking changes, but now that we capture release notes in the change itself, there really isn\u0027t any need to have a blueprint for a driver adding support for an existing feature.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f9d21d1a3d80e4a7fed84f11b5c894c7fcacd232","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This should be expanded to use rbd diff_iterate2() when"},{"line_number":12,"context_line":"Infernalis and newer deployments are widespread."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Ivan Kolodyazhny \u003ce0ne@e0ne.info\u003e"},{"line_number":15,"context_line":"Change-Id: Ida7654545ae46d106908b991c91bab989b998484"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_63b907cc","line":13,"in_reply_to":"bacf61ea_28aa4e19","updated":"2016-08-01 20:17:57.000000000","message":"I\u0027m ok without a bp.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e4d765e365880449d547cb1ec05b017fa3d643da","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This should be expanded to use rbd diff_iterate2() when"},{"line_number":12,"context_line":"Infernalis and newer deployments are widespread."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Ivan Kolodyazhny \u003ce0ne@e0ne.info\u003e"},{"line_number":15,"context_line":"Change-Id: Ida7654545ae46d106908b991c91bab989b998484"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_28208ef6","line":13,"in_reply_to":"bacf61ea_81087e29","updated":"2016-08-01 19:57:12.000000000","message":"This isn\u0027t a new feature, it\u0027s updating a driver to use an already existing feature, which we don\u0027t require blueprints for.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"}],"cinder/tests/unit/volume/drivers/test_rbd.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"3bd6495c50e27e3448ac7c610fb9e5df2f8d77a5","unresolved":false,"context_lines":[{"line_number":819,"context_line":"            reserved_percentage\u003d0,"},{"line_number":820,"context_line":"            thin_provisioning_support\u003dTrue,"},{"line_number":821,"context_line":"            provisioned_capacity_gb\u003d0.0,"},{"line_number":822,"context_line":"            max_over_subscription_ratio\u003d\u0027RBD\u0027,"},{"line_number":823,"context_line":"            multiattach\u003dFalse)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        actual \u003d self.driver.get_volume_stats(True)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_a6432a12","line":822,"range":{"start_line":822,"start_character":41,"end_line":822,"end_character":45},"updated":"2016-08-01 11:37:51.000000000","message":"This can be confusing. It would be better to use an expected numeric value to this.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59ef7fbb09cb8c68caa579db2796812cb76f159b","unresolved":false,"context_lines":[{"line_number":819,"context_line":"            reserved_percentage\u003d0,"},{"line_number":820,"context_line":"            thin_provisioning_support\u003dTrue,"},{"line_number":821,"context_line":"            provisioned_capacity_gb\u003d0.0,"},{"line_number":822,"context_line":"            max_over_subscription_ratio\u003d\u0027RBD\u0027,"},{"line_number":823,"context_line":"            multiattach\u003dFalse)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        actual \u003d self.driver.get_volume_stats(True)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_06582455","line":822,"range":{"start_line":822,"start_character":41,"end_line":822,"end_character":45},"in_reply_to":"bacf61ea_a6432a12","updated":"2016-08-01 16:55:40.000000000","message":"+1","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"}],"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"be9471606bf64908a0ede72ee0a0c20633725f1c","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        try:"},{"line_number":379,"context_line":"            for volume in self.rbd.RBD().list(client.ioctx):"},{"line_number":380,"context_line":"                image \u003d self.rbd.Image(client.ioctx, volume, read_only\u003dTrue)"},{"line_number":381,"context_line":"                total_usage +\u003d image.stat()[\u0027size\u0027]"},{"line_number":382,"context_line":"                image.close()"},{"line_number":383,"context_line":"        except IOError:"},{"line_number":384,"context_line":"            LOG.exception(_LE(\u0027I/O error retrieving volume sizes\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_a43f0586","line":381,"updated":"2015-05-20 01:51:56.000000000","message":"this reports the full size. The best way to get the actually used size in hammer and earlier is via rbd_diff_iterate() on the whole image, summing up the lengths.\n\nIn Infernalis, using rbd_diff_iterate2() (just using whole_object\u003dtrue in the python api) will give you this much faster usage information for images using rbd\u0027s object map and fast diff features. See https://github.com/ceph/ceph/commit/7ffafc56b11648438e1dd28fe1f32c0d43cc1144","commit_id":"028e7d01b14cd1e36ced0c536c462fae69e2e392"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"da464f1d00104851fac508451cd716b3c02c007d","unresolved":false,"context_lines":[{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def _iterate_cb(self, offset, length, exists):"},{"line_number":384,"context_line":"        if exists:"},{"line_number":385,"context_line":"            self._total_usage +\u003d length"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _get_usage_info(self):"},{"line_number":388,"context_line":"        self._total_usage \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_0abf1efc","line":385,"updated":"2016-03-07 19:23:39.000000000","message":"I might be totally missing something, but it doesn\u0027t look like this self._total_usage variable is actually used for anything? Is it supposed to be the provisioned_capacity_gb value in the stats update?","commit_id":"49dd9a46788a2c0e3b45981089b307181d48206b"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a829e29ac3845ac8c1e3d3bbb363b278444d455f","unresolved":false,"context_lines":[{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def _iterate_cb(self, offset, length, exists):"},{"line_number":384,"context_line":"        if exists:"},{"line_number":385,"context_line":"            self._total_usage +\u003d length"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _get_usage_info(self):"},{"line_number":388,"context_line":"        self._total_usage \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_bc492bd3","line":385,"range":{"start_line":385,"start_character":17,"end_line":385,"end_character":29},"updated":"2016-03-15 16:40:21.000000000","message":"Maybe you want to return the resultant total_usage?","commit_id":"49dd9a46788a2c0e3b45981089b307181d48206b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"aeba4ee81ddf6071487e6e705e05639e5734d9fa","unresolved":false,"context_lines":[{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def _iterate_cb(self, offset, length, exists):"},{"line_number":384,"context_line":"        if exists:"},{"line_number":385,"context_line":"            self._total_usage +\u003d length"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _get_usage_info(self):"},{"line_number":388,"context_line":"        self._total_usage \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_0a4a7ec5","line":385,"in_reply_to":"5aef4532_0abf1efc","updated":"2016-03-07 19:28:13.000000000","message":"Agreed, something is missing here.","commit_id":"49dd9a46788a2c0e3b45981089b307181d48206b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"dfe3e0d88cb5af2a24ae3baea8f358d020be99ce","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _update_volume_stats(self):"},{"line_number":399,"context_line":"        self._get_usage_info()"},{"line_number":400,"context_line":"        total_usage_gb \u003d int(self._total_usage / units.Gi)"},{"line_number":401,"context_line":"        stats \u003d {"},{"line_number":402,"context_line":"            \u0027vendor_name\u0027: \u0027Open Source\u0027,"},{"line_number":403,"context_line":"            \u0027driver_version\u0027: self.VERSION,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_8025c2ac","line":400,"updated":"2016-05-18 14:06:35.000000000","message":"This should probably round up rather than truncating.","commit_id":"a9cd3791e47ea1c2a1f6458780050649c3a8100a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"affb31753e8be6e3df476e0e392ece6b91b1faf6","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _update_volume_stats(self):"},{"line_number":399,"context_line":"        self._get_usage_info()"},{"line_number":400,"context_line":"        total_usage_gb \u003d int(self._total_usage / units.Gi)"},{"line_number":401,"context_line":"        stats \u003d {"},{"line_number":402,"context_line":"            \u0027vendor_name\u0027: \u0027Open Source\u0027,"},{"line_number":403,"context_line":"            \u0027driver_version\u0027: self.VERSION,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_e4ea02ac","line":400,"in_reply_to":"bab6814e_8025c2ac","updated":"2016-05-23 20:38:58.000000000","message":"Done","commit_id":"a9cd3791e47ea1c2a1f6458780050649c3a8100a"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"f4b16526da584cb11c0fd6d1c3e094363ca16d08","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _update_volume_stats(self):"},{"line_number":399,"context_line":"        self._get_usage_info()"},{"line_number":400,"context_line":"        total_usage_gb \u003d round(self._total_usage / units.Gi)"},{"line_number":401,"context_line":"        stats \u003d {"},{"line_number":402,"context_line":"            \u0027vendor_name\u0027: \u0027Open Source\u0027,"},{"line_number":403,"context_line":"            \u0027driver_version\u0027: self.VERSION,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_3eb9e3cc","line":400,"range":{"start_line":400,"start_character":56,"end_line":400,"end_character":57},"updated":"2016-06-01 14:53:37.000000000","message":"It should be round((float(self._total_usage)/units.Gi) otherwise we\u0027ll get the wrong value for python2.7","commit_id":"53225942f448b4a4529e2484361159491e0ab623"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"2ee0bba9ecf7c26e23bf1b5e61be48800eda73fb","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _update_volume_stats(self):"},{"line_number":399,"context_line":"        self._get_usage_info()"},{"line_number":400,"context_line":"        total_usage_gb \u003d round(self._total_usage / units.Gi)"},{"line_number":401,"context_line":"        stats \u003d {"},{"line_number":402,"context_line":"            \u0027vendor_name\u0027: \u0027Open Source\u0027,"},{"line_number":403,"context_line":"            \u0027driver_version\u0027: self.VERSION,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_55bc85ba","line":400,"range":{"start_line":400,"start_character":56,"end_line":400,"end_character":57},"in_reply_to":"9abb7d3a_12a5f345","updated":"2016-06-01 15:24:17.000000000","message":"Agree, to be precise int(math.ceil(float(self._total_usage) / units.Gi))","commit_id":"53225942f448b4a4529e2484361159491e0ab623"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"86aeb1465f1499f173534e2c148726b7024d751d","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _update_volume_stats(self):"},{"line_number":399,"context_line":"        self._get_usage_info()"},{"line_number":400,"context_line":"        total_usage_gb \u003d round(self._total_usage / units.Gi)"},{"line_number":401,"context_line":"        stats \u003d {"},{"line_number":402,"context_line":"            \u0027vendor_name\u0027: \u0027Open Source\u0027,"},{"line_number":403,"context_line":"            \u0027driver_version\u0027: self.VERSION,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_12a5f345","line":400,"range":{"start_line":400,"start_character":56,"end_line":400,"end_character":57},"in_reply_to":"9abb7d3a_3eb9e3cc","updated":"2016-06-01 15:10:43.000000000","message":"round() is wrong here anyway, this should be ceil() instead so we don\u0027t under-report usage.","commit_id":"53225942f448b4a4529e2484361159491e0ab623"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c2a30c6d82aebb122a8c90a53cea63a2b6dc7110","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            \u0027storage_protocol\u0027: \u0027ceph\u0027,"},{"line_number":405,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":406,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":407,"context_line":"            \u0027provisioned_capacity_gb\u0027: total_usage_gb,"},{"line_number":408,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":409,"context_line":"            \u0027multiattach\u0027: False,"},{"line_number":410,"context_line":"            \u0027thin_provisioning_support\u0027: True,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_d2266c67","line":407,"updated":"2016-05-28 21:46:30.000000000","message":"Theres a reasonable chance I\u0027m mis-understanding what diff_iterate gives, but isn\u0027t this total_usage_gb going to be more like the actual used and not allocated? \n\n\nFor example, if its thin provisioned for a volume 10G and we\u0027ve written 1G, going off the description here http://docs.ceph.com/docs/jewel/rbd/librbdpy/#rbd.Image.diff_iterate it looks like our check of \u0027 if exists:\u0027 means if data is written, then the length of that is what we are adding to _total_usage would be that 1G of data written... maybe.. ? \n\n\nAt a quick glance through that doc page I think we might actually just want v.size() for provisioned_capacity_gb, and then for free_capacity_gb it would be the thing we calculate as _total_usage subtracted from total_capacity_gb. So like the total amount of actual free space left on the backend. Im fairly sure that leaving free_capacity_gb and total_capacity_gb as unknown make all of this kind of moot anyway, the scheduler won\u0027t care about what numbers you give for the ratio or anything https://github.com/openstack/cinder/blob/master/cinder/scheduler/filters/capacity_filter.py#L50-L68\n\nWe could probably just report thin_provisioning_support: True and call it a day if we don\u0027t need to (or don\u0027t have a way to) report free/available space :D\n\n\nI looked through the scheduler log http://logs.openstack.org/62/178262/6/check/gate-tempest-dsvm-full-devstack-plugin-ceph/dae930f/logs/screen-c-sch.txt.gz and only ever see provisioned_capacity_gb as being 0.0, so nothing to indicate one way or the other what its doing.\n\n\nAgain, totally might be wrong, I know very little about ceph ;)","commit_id":"53225942f448b4a4529e2484361159491e0ab623"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"5e4dfc91d3e0d1815630d59d2ab81dbcb84f8de4","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _update_volume_stats(self):"},{"line_number":399,"context_line":"        self._get_usage_info()"},{"line_number":400,"context_line":"        total_usage_gb \u003d math.ceil(float(self._total_usage) / units.Gi)"},{"line_number":401,"context_line":"        stats \u003d {"},{"line_number":402,"context_line":"            \u0027vendor_name\u0027: \u0027Open Source\u0027,"},{"line_number":403,"context_line":"            \u0027driver_version\u0027: self.VERSION,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_d544f54a","line":400,"updated":"2016-06-08 18:15:55.000000000","message":"Do we need to cast to int? ceil returns a float in python 2 and returns an int in python 3.","commit_id":"fe96e4449d6ebcbf5dc5b028700d5cd8de52d3f7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59ef7fbb09cb8c68caa579db2796812cb76f159b","unresolved":false,"context_lines":[{"line_number":405,"context_line":"            \u0027driver_version\u0027: self.VERSION,"},{"line_number":406,"context_line":"            \u0027storage_protocol\u0027: \u0027ceph\u0027,"},{"line_number":407,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":408,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":409,"context_line":"            \u0027provisioned_capacity_gb\u0027: total_usage_gb,"},{"line_number":410,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":411,"context_line":"            \u0027multiattach\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_01900e94","line":408,"updated":"2016-08-01 16:55:40.000000000","message":"Can you report total_capacity_gb and free_capacity_gb?  If they are unknown, the scheduler will always assume the backend can provision the volume and return True.  So capabilities reported for provisioned_capacity_gb, thin_provisioning_support, and max_over_subscription_ratio won\u0027t be used.  The reason is that max_over_subscription_ratio is a ratio of provisioned capacity over total capacity.  If total capacity is unknown, we can\u0027t figure out if the user has provisioned more volumes than allowed by the max_over_subscription_ratio.\n\nHere is an example.  Assume max_ratio \u003d 2, total_capacity_gb\u003d100GB, provisioned_capacity_gb\u003d200GB (user has provisioned 2x100GB thin luns), and user wants to create a 50GB new volume.  We need to calculate current_ratio\u003d(provisioned_capacity_gb+new_volume_size)/total_capacity\u003d(200+50)/100\u003d2.5.  2.5 is greater than 2.0, the max_ratio.  So we cannot provision the volume.  If total_capacity is unknown, we don\u0027t know how to calculate it.\n\nLet me know if I missed anything here.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"e7569c95103082d9051a13e3a2a884d808da24e8","unresolved":false,"context_lines":[{"line_number":405,"context_line":"            \u0027driver_version\u0027: self.VERSION,"},{"line_number":406,"context_line":"            \u0027storage_protocol\u0027: \u0027ceph\u0027,"},{"line_number":407,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":408,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":409,"context_line":"            \u0027provisioned_capacity_gb\u0027: total_usage_gb,"},{"line_number":410,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":411,"context_line":"            \u0027multiattach\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_c83d722c","line":408,"in_reply_to":"bacf61ea_01900e94","updated":"2016-08-01 19:56:06.000000000","message":"IIRC there isn\u0027t a way to report the total capacity for ceph backends which is why this is like this.\n\nI think that\u0027s fine, but it does make determining the usage info and doing the virtual size calculations kind of a waste since it will always pass the size check with \u0027unknown\u0027.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f9d21d1a3d80e4a7fed84f11b5c894c7fcacd232","unresolved":false,"context_lines":[{"line_number":405,"context_line":"            \u0027driver_version\u0027: self.VERSION,"},{"line_number":406,"context_line":"            \u0027storage_protocol\u0027: \u0027ceph\u0027,"},{"line_number":407,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":408,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":409,"context_line":"            \u0027provisioned_capacity_gb\u0027: total_usage_gb,"},{"line_number":410,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":411,"context_line":"            \u0027multiattach\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_c33f13b2","line":408,"in_reply_to":"bacf61ea_c83d722c","updated":"2016-08-01 20:17:57.000000000","message":"Ok.  Maybe admin can benefit by checking pools info now there\u0027s additional info on provisioned capacity.  The scheduler will always return True anyway.  I don\u0027t see a need to report \"max_oversubscription_ratio\" though.  It maybe confusing for a customer if we tell them to change max_oversubscription_ratio to control how much can be provisioned but it won\u0027t have any impact.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"66fc9a8922da3d3b0adc8b74552368cce3fddf24","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            \u0027storage_protocol\u0027: \u0027ceph\u0027,"},{"line_number":414,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":415,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":416,"context_line":"            \u0027provisioned_capacity_gb\u0027: total_usage_gb,"},{"line_number":417,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":418,"context_line":"            \u0027multiattach\u0027: False,"},{"line_number":419,"context_line":"            \u0027thin_provisioning_support\u0027: True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_fe2c364c","line":416,"updated":"2016-09-29 14:10:45.000000000","message":"Since both \u0027total_capacity_gb\u0027 and \u0027free_capacity_gb\u0027 are initialized here and updated on lines 435-440, I think it is better to set \u0027provisioned_capacity_gb\u0027 to 0 here and then update it together with total and free after line 440.","commit_id":"d94b34b0f561450c42410d5a2166a56d9cead81b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5547b651c0a8292a62da2ae606257f7f4897da33","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            \u0027storage_protocol\u0027: \u0027ceph\u0027,"},{"line_number":414,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":415,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":416,"context_line":"            \u0027provisioned_capacity_gb\u0027: total_usage_gb,"},{"line_number":417,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":418,"context_line":"            \u0027multiattach\u0027: False,"},{"line_number":419,"context_line":"            \u0027thin_provisioning_support\u0027: True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_0f9c4ebf","line":416,"in_reply_to":"3a98d1f4_fe2c364c","updated":"2016-09-29 15:34:18.000000000","message":"Done","commit_id":"d94b34b0f561450c42410d5a2166a56d9cead81b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"66fc9a8922da3d3b0adc8b74552368cce3fddf24","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":415,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":416,"context_line":"            \u0027provisioned_capacity_gb\u0027: total_usage_gb,"},{"line_number":417,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":418,"context_line":"            \u0027multiattach\u0027: False,"},{"line_number":419,"context_line":"            \u0027thin_provisioning_support\u0027: True"},{"line_number":420,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_91c0837e","line":417,"updated":"2016-09-29 14:10:45.000000000","message":"Can you use reserved_percentage from cinder.conf instead of always set it to 0?\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L264","commit_id":"d94b34b0f561450c42410d5a2166a56d9cead81b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5547b651c0a8292a62da2ae606257f7f4897da33","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":415,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":416,"context_line":"            \u0027provisioned_capacity_gb\u0027: total_usage_gb,"},{"line_number":417,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":418,"context_line":"            \u0027multiattach\u0027: False,"},{"line_number":419,"context_line":"            \u0027thin_provisioning_support\u0027: True"},{"line_number":420,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_0a5fdce5","line":417,"in_reply_to":"3a98d1f4_91c0837e","updated":"2016-09-29 15:34:18.000000000","message":"Done","commit_id":"d94b34b0f561450c42410d5a2166a56d9cead81b"},{"author":{"_account_id":20599,"name":"Jason Dillaman","email":"dillaman@redhat.com","username":"dillaman"},"change_message_id":"2fa28bc619277ebb1af89a240872095ae6f15f2b","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                    # non-default volume_name_template settings.  Template"},{"line_number":402,"context_line":"                    # must start with \"volume\"."},{"line_number":403,"context_line":"                    with RBDVolumeProxy(self, t, read_only\u003dTrue) as v:"},{"line_number":404,"context_line":"                        v.diff_iterate(0, v.size(), None, self._iterate_cb)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def _update_volume_stats(self):"},{"line_number":407,"context_line":"        stats \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_51ac1234","line":404,"updated":"2016-10-31 15:29:43.000000000","message":"Newer version of the RBD python binding support \"include_parent\" and \"whole_object\" named parameters. If these exist, it will be much faster to set \"include_parent \u003d false\" and \"whole_object \u003d true\".","commit_id":"d4fd5660736a1363a4e78480b116532c71b5ce49"}],"releasenotes/notes/rbd-thin-provisioning-c98522d6fe7b71ff.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f9d21d1a3d80e4a7fed84f11b5c894c7fcacd232","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Allow the RBD driver to work with max_over_subscription_ratio."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bacf61ea_c3c27384","line":3,"updated":"2016-08-01 20:17:57.000000000","message":"If we can\u0027t calculate whether the current provisioned ratio has exceeded the max_over_subscription_ratio due to the unknown total capacity, this release note is probably not needed because the scheduler won\u0027t use it and it won\u0027t place any limit on how many volumes can be provisioned.","commit_id":"fd27afe33dfd241fc2fc404dcd8803bb47d4b0d9"}]}
