)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"71aa590d52c59e55a7ee04f5577f90a2ee06412c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"* Driver reports the following capacities and ratios:"},{"line_number":15,"context_line":"  * provisioned_capacity"},{"line_number":16,"context_line":"  * max_over_subscription_ratio"},{"line_number":17,"context_line":"  * max_used_ratio"},{"line_number":18,"context_line":"* Driver also reports the following capabilities:"},{"line_number":19,"context_line":"  * thin_provisioning_support (True or False)"},{"line_number":20,"context_line":"  * thick_provisioning_support (True or False)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_ab1cb714","line":17,"updated":"2014-12-16 22:37:59.000000000","message":"do we allow max_used_ratio and max_over_subscription_ratio to be changed?\nIf not, as I expect, then these become configuration parameters as thick and thin provisioning.\nThese are different from provisioning_capacity as it can change at any time  and is not a constant from discovery time.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48769467a935ca1b8bdca36f3b5dfcec6015fb75","unresolved":false,"context_lines":[{"line_number":14,"context_line":"* Driver reports the following capacities and ratios:"},{"line_number":15,"context_line":"  * provisioned_capacity"},{"line_number":16,"context_line":"  * max_over_subscription_ratio"},{"line_number":17,"context_line":"  * max_used_ratio"},{"line_number":18,"context_line":"* Driver also reports the following capabilities:"},{"line_number":19,"context_line":"  * thin_provisioning_support (True or False)"},{"line_number":20,"context_line":"  * thick_provisioning_support (True or False)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_6eabb2d6","line":17,"in_reply_to":"3a961159_ab1cb714","updated":"2014-12-17 06:57:45.000000000","message":"I think Winston has answered this question. I\u0027ll add more description here.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"}],"cinder/brick/local_dev/lvm.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"01026545019ee4bb5d71b884f8c775c5991f7fc6","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    if not lv[\u0027size\u0027][-1].isdigit():"},{"line_number":419,"context_line":"                        lvsize \u003d lvsize[:-1]"},{"line_number":420,"context_line":"                    total_vols_size \u003d total_vols_size + float(lvsize)"},{"line_number":421,"context_line":"            total_vols_size \u003d round(total_vols_size, 2)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.vg_provisioned_capacity \u003d total_vols_size"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_7196a795","line":421,"updated":"2015-01-16 04:52:10.000000000","message":"bookmark, think there are some ways to clean this up, but not a big deal right now by any means.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f36e9dce7d30ae0f53d98d59dbfd8fa9ef5d47d4","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    if not lv[\u0027size\u0027][-1].isdigit():"},{"line_number":419,"context_line":"                        lvsize \u003d lvsize[:-1]"},{"line_number":420,"context_line":"                    total_vols_size \u003d total_vols_size + float(lvsize)"},{"line_number":421,"context_line":"            total_vols_size \u003d round(total_vols_size, 2)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.vg_provisioned_capacity \u003d total_vols_size"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_748935c9","line":421,"in_reply_to":"3a961159_7196a795","updated":"2015-01-16 06:15:46.000000000","message":"Let me know what I need to do to clean this up if you come up with something.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"}],"cinder/scheduler/filters/capacity_filter.py":[{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"71aa590d52c59e55a7ee04f5577f90a2ee06412c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        total \u003d float(host_state.total_capacity_gb)"},{"line_number":72,"context_line":"        used \u003d (total - host_state.free_capacity_gb - volume_size) / total"},{"line_number":73,"context_line":"        if used \u003e host_state.max_used_ratio:"},{"line_number":74,"context_line":"            LOG.warning(_LW(\"Capacity usage has exceeded the used ratio \""},{"line_number":75,"context_line":"                            \"%(used_ratio)%.2ff on host %(host)s.\"),"},{"line_number":76,"context_line":"                        {\"host\": host_state.host,"},{"line_number":77,"context_line":"                         \"used_ratio\": host_state.max_used_ratio})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ab3677e5","line":74,"updated":"2014-12-16 22:37:59.000000000","message":"suggest adding \"Insufficient free space for volume creation\" at the start of the message,","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48769467a935ca1b8bdca36f3b5dfcec6015fb75","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        total \u003d float(host_state.total_capacity_gb)"},{"line_number":72,"context_line":"        used \u003d (total - host_state.free_capacity_gb - volume_size) / total"},{"line_number":73,"context_line":"        if used \u003e host_state.max_used_ratio:"},{"line_number":74,"context_line":"            LOG.warning(_LW(\"Capacity usage has exceeded the used ratio \""},{"line_number":75,"context_line":"                            \"%(used_ratio)%.2ff on host %(host)s.\"),"},{"line_number":76,"context_line":"                        {\"host\": host_state.host,"},{"line_number":77,"context_line":"                         \"used_ratio\": host_state.max_used_ratio})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ce81064f","line":74,"in_reply_to":"3a961159_ab3677e5","updated":"2014-12-17 06:57:45.000000000","message":"Sure, will add it.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"71aa590d52c59e55a7ee04f5577f90a2ee06412c","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        if host_state.max_over_subscription_ratio \u003e\u003d 1:"},{"line_number":81,"context_line":"            if (free * host_state.max_over_subscription_ratio) \u003c volume_size:"},{"line_number":82,"context_line":"                LOG.warning(_LW(\"Provisioned capacity has exceeded the over \""},{"line_number":83,"context_line":"                                \"subscription ratio %(oversub_ratio)%.2f on \""},{"line_number":84,"context_line":"                                \"host %(host)s.\"),"},{"line_number":85,"context_line":"                            {\"host\": host_state.host,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2b528713","line":82,"updated":"2014-12-16 22:37:59.000000000","message":"the same prefix addition","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"71aa590d52c59e55a7ee04f5577f90a2ee06412c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if ((host_state.provisioned_capacity_gb + volume_size) / total"},{"line_number":92,"context_line":"                \u003e\u003d host_state.max_over_subscription_ratio):"},{"line_number":93,"context_line":"            LOG.warning(_LW("},{"line_number":94,"context_line":"                \"Provisioned capacity has exceeded the over subscription \""},{"line_number":95,"context_line":"                \"ratio %(oversub_ratio)%.2f on host %(host)s.\"),"},{"line_number":96,"context_line":"                {\"host\": host_state.host,"},{"line_number":97,"context_line":"                 \"oversub_ratio\": host_state.max_over_subscription_ratio})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_cb6103d5","line":94,"updated":"2014-12-16 22:37:59.000000000","message":"need message change to separate this case from above host_state.max_over_subscription_ratio","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48769467a935ca1b8bdca36f3b5dfcec6015fb75","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if ((host_state.provisioned_capacity_gb + volume_size) / total"},{"line_number":92,"context_line":"                \u003e\u003d host_state.max_over_subscription_ratio):"},{"line_number":93,"context_line":"            LOG.warning(_LW("},{"line_number":94,"context_line":"                \"Provisioned capacity has exceeded the over subscription \""},{"line_number":95,"context_line":"                \"ratio %(oversub_ratio)%.2f on host %(host)s.\"),"},{"line_number":96,"context_line":"                {\"host\": host_state.host,"},{"line_number":97,"context_line":"                 \"oversub_ratio\": host_state.max_over_subscription_ratio})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2e81aa4a","line":94,"in_reply_to":"3a961159_cb6103d5","updated":"2014-12-17 06:57:45.000000000","message":"Will change wording of the message.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        {\"host\": host_state.host,"},{"line_number":78,"context_line":"                         \"total\": total})"},{"line_number":79,"context_line":"            return False"},{"line_number":80,"context_line":"        used \u003d (total - host_state.free_capacity_gb + volume_size) / total"},{"line_number":81,"context_line":"        if used \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage has exceeded the used ratio \""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_68502ed5","line":80,"updated":"2014-12-27 01:41:42.000000000","message":"suggest renaming used to used_ratio or current_used_ratio","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        {\"host\": host_state.host,"},{"line_number":78,"context_line":"                         \"total\": total})"},{"line_number":79,"context_line":"            return False"},{"line_number":80,"context_line":"        used \u003d (total - host_state.free_capacity_gb + volume_size) / total"},{"line_number":81,"context_line":"        if used \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage has exceeded the used ratio \""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_94856f5b","line":80,"in_reply_to":"3a961159_68502ed5","updated":"2014-12-28 06:26:40.000000000","message":"Done","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                         \"total\": total})"},{"line_number":79,"context_line":"            return False"},{"line_number":80,"context_line":"        used \u003d (total - host_state.free_capacity_gb + volume_size) / total"},{"line_number":81,"context_line":"        if used \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage has exceeded the used ratio \""},{"line_number":84,"context_line":"                            \"%(used_ratio)%.2ff on host %(host)s.\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_885c7af2","line":81,"updated":"2014-12-27 01:41:42.000000000","message":"Is max_used_ratio on;y applicable for thin_provisioning?\nIf yes, then host_state.thin_provisioning_support need to be added.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                         \"total\": total})"},{"line_number":79,"context_line":"            return False"},{"line_number":80,"context_line":"        used \u003d (total - host_state.free_capacity_gb + volume_size) / total"},{"line_number":81,"context_line":"        if used \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage has exceeded the used ratio \""},{"line_number":84,"context_line":"                            \"%(used_ratio)%.2ff on host %(host)s.\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_54b4e734","line":81,"in_reply_to":"3a961159_885c7af2","updated":"2014-12-28 06:26:40.000000000","message":"max_used_ratio is applicable for both thin and thick provisioning.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                            \"Capacity usage has exceeded the used ratio \""},{"line_number":84,"context_line":"                            \"%(used_ratio)%.2ff on host %(host)s.\"),"},{"line_number":85,"context_line":"                        {\"used_ratio\": host_state.max_used_ratio,"},{"line_number":86,"context_line":"                         \"host\": host_state.host})"},{"line_number":87,"context_line":"            return False"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # Only evaluate using max_over_subscription_ratio if"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_08708a72","line":86,"updated":"2014-12-27 01:41:42.000000000","message":"suggest adding \"used\" to warning.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                            \"Capacity usage has exceeded the used ratio \""},{"line_number":84,"context_line":"                            \"%(used_ratio)%.2ff on host %(host)s.\"),"},{"line_number":85,"context_line":"                        {\"used_ratio\": host_state.max_used_ratio,"},{"line_number":86,"context_line":"                         \"host\": host_state.host})"},{"line_number":87,"context_line":"            return False"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # Only evaluate using max_over_subscription_ratio if"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_b47a6b75","line":86,"in_reply_to":"3a961159_08708a72","updated":"2014-12-28 06:26:40.000000000","message":"Done","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if (host_state.thin_provisioning_support and"},{"line_number":92,"context_line":"                host_state.max_over_subscription_ratio \u003e\u003d 1):"},{"line_number":93,"context_line":"            free_virtual \u003d free * host_state.max_over_subscription_ratio"},{"line_number":94,"context_line":"            if (free * host_state.max_over_subscription_ratio) \u003c volume_size:"},{"line_number":95,"context_line":"                LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":96,"context_line":"                                \"Free virtual capacity %(virtual).2f is less \""},{"line_number":97,"context_line":"                                \"than the new volume size %(size).2f on host \""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_286d469a","line":94,"updated":"2014-12-27 01:41:42.000000000","message":"Why calculating free_virtual if you are not using it in \"if\" statement?\nsuggest replacing \"free * host_state.max_over_subscription_ratio\" with \"free_virtual\"","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if (host_state.thin_provisioning_support and"},{"line_number":92,"context_line":"                host_state.max_over_subscription_ratio \u003e\u003d 1):"},{"line_number":93,"context_line":"            free_virtual \u003d free * host_state.max_over_subscription_ratio"},{"line_number":94,"context_line":"            if (free * host_state.max_over_subscription_ratio) \u003c volume_size:"},{"line_number":95,"context_line":"                LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":96,"context_line":"                                \"Free virtual capacity %(virtual).2f is less \""},{"line_number":97,"context_line":"                                \"than the new volume size %(size).2f on host \""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_7480034a","line":94,"in_reply_to":"3a961159_286d469a","updated":"2014-12-28 06:26:40.000000000","message":"Good catch. I meant to use free_virtual here. Done.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                \"Provisioned capacity has exceeded the over subscription \""},{"line_number":111,"context_line":"                \"ratio %(oversub_ratio)%.2f on host %(host)s.\"),"},{"line_number":112,"context_line":"                {\"oversub_ratio\": host_state.max_over_subscription_ratio,"},{"line_number":113,"context_line":"                 \"host\": host_state.host})"},{"line_number":114,"context_line":"            return False"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        return free \u003e\u003d volume_size"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_486a9282","line":113,"updated":"2014-12-27 01:41:42.000000000","message":"suggest also reporting\n(host_state.provisioned_capacity_gb + volume_size) / total","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                \"Provisioned capacity has exceeded the over subscription \""},{"line_number":111,"context_line":"                \"ratio %(oversub_ratio)%.2f on host %(host)s.\"),"},{"line_number":112,"context_line":"                {\"oversub_ratio\": host_state.max_over_subscription_ratio,"},{"line_number":113,"context_line":"                 \"host\": host_state.host})"},{"line_number":114,"context_line":"            return False"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        return free \u003e\u003d volume_size"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_d47ff764","line":113,"in_reply_to":"3a961159_486a9282","updated":"2014-12-28 06:26:40.000000000","message":"Done","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":11903,"name":"Anthony Lee","email":"anthony.mic.lee@hpe.com","username":"leeantho"},"change_message_id":"9974b020cd57f279bb93b296af4a3da91e7644b3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Intel"},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright (c) 2014 EMC Corporation"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_7e8cc035","line":3,"updated":"2015-01-15 21:28:14.000000000","message":"2015?","commit_id":"4e2e1ac212b865ae8dc75b911bf287189f9e3cf6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48b27e9246ee018e9e2c38cb2889d852e842089b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Intel"},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright (c) 2014 EMC Corporation"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_5402843e","line":3,"in_reply_to":"3a961159_7e8cc035","updated":"2015-01-15 23:44:10.000000000","message":"Done","commit_id":"4e2e1ac212b865ae8dc75b911bf287189f9e3cf6"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"c155c1656fe1f5cb30d16e1915ee00f929d3fe8e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            return False"},{"line_number":79,"context_line":"        used_ratio \u003d ((total - host_state.free_capacity_gb + volume_size) /"},{"line_number":80,"context_line":"                      total)"},{"line_number":81,"context_line":"        if used_ratio \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage %(used_ratio).2f has exceeded the \""},{"line_number":84,"context_line":"                            \"maximum used ratio %(max_used_ratio).2f on host \""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_0f4d6e9a","line":81,"updated":"2015-01-26 04:05:09.000000000","message":"I think about it and realize that we have been using reserved capacity in a wrong way.  It\u0027d actually be used the exact same way as your \u0027max_used_ratio\u0027.  Reserved capacity being partial of free capacity is useless and I guess since more drivers set reserved_percentage to \u00270\u0027, deployments don\u0027t actually exercise this parameter much, thus this error has been there since day one.  I\u0027d suggest we fix it (thus we don\u0027t need max_used_ratio anymore) either here or in a separate patch.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"c208d0d16e02b4c1579fcf706352af7ac00bd1bb","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            return False"},{"line_number":79,"context_line":"        used_ratio \u003d ((total - host_state.free_capacity_gb + volume_size) /"},{"line_number":80,"context_line":"                      total)"},{"line_number":81,"context_line":"        if used_ratio \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage %(used_ratio).2f has exceeded the \""},{"line_number":84,"context_line":"                            \"maximum used ratio %(max_used_ratio).2f on host \""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_bbab051d","line":81,"updated":"2015-01-22 18:39:27.000000000","message":"Sorry that I forgot to bring up in spec review, but isn\u0027t max_used_ratio the opposite of \u0027reserved_percentage\u0027 (1-reserved)?  If not, how used_ratio/max_used_ratio should play along with reserved_percentage?","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"92eeb8dd9995182e48bfb90457c7af449d6a8d0d","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            return False"},{"line_number":79,"context_line":"        used_ratio \u003d ((total - host_state.free_capacity_gb + volume_size) /"},{"line_number":80,"context_line":"                      total)"},{"line_number":81,"context_line":"        if used_ratio \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage %(used_ratio).2f has exceeded the \""},{"line_number":84,"context_line":"                            \"maximum used ratio %(max_used_ratio).2f on host \""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_ea72d00f","line":81,"in_reply_to":"1a930d6b_0f4d6e9a","updated":"2015-01-26 05:39:27.000000000","message":"Winston,\n\nIt is true that many drivers don\u0027t use it.  However, the VNX driver just started to use the reserved_percentage (measured against free capacity) to save some space for the meta data.  It uses free capacity because the space for meta data is dependent upon the size of the next volume to be created.  See the code here:\nhttps://review.openstack.org/#/c/141629/12/cinder/volume/drivers/emc/emc_vnx_cli.py\nLine 2372-2376.\n\nCan you take a look of the above code?  Does it make sense to keep both reserved_percentage and used_ratio?","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bc07268738d811862c11c20469b29ea3f825417","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            return False"},{"line_number":79,"context_line":"        used_ratio \u003d ((total - host_state.free_capacity_gb + volume_size) /"},{"line_number":80,"context_line":"                      total)"},{"line_number":81,"context_line":"        if used_ratio \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage %(used_ratio).2f has exceeded the \""},{"line_number":84,"context_line":"                            \"maximum used ratio %(max_used_ratio).2f on host \""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_9ed552bb","line":81,"in_reply_to":"1a930d6b_bbab051d","updated":"2015-01-22 21:37:43.000000000","message":"Good question. Initially I thought they are the same, but realized they are different when I saw the following line in scheduler/weights/capacity.py:\n\nfree \u003d math.floor(host_state.free_capacity_gb * (1 - reserved))\n\nSo reserved_percentage is measured against free_capacity. So the denominator is dynamic.\n\nused_ratio is measured against total_capacity. So the denominator is fixed.\n\nused_ratio/max_used_ratio and reserved_percentage can work side by side.  Let me know if you see any issues.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7f057f75ecc58b9ab7c2ffd2bc0f7f99af2b8f0e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            return False"},{"line_number":79,"context_line":"        used_ratio \u003d ((total - host_state.free_capacity_gb + volume_size) /"},{"line_number":80,"context_line":"                      total)"},{"line_number":81,"context_line":"        if used_ratio \u003e host_state.max_used_ratio:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":83,"context_line":"                            \"Capacity usage %(used_ratio).2f has exceeded the \""},{"line_number":84,"context_line":"                            \"maximum used ratio %(max_used_ratio).2f on host \""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_d65ff770","line":81,"in_reply_to":"1a930d6b_ea72d00f","updated":"2015-02-01 20:00:00.000000000","message":"Used reserved_percentage to calculate used_ratio as we discussed.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"c208d0d16e02b4c1579fcf706352af7ac00bd1bb","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        # Check if the ratio of provisioned capacity over total capacity"},{"line_number":107,"context_line":"        # has exceeded over subscription ratio."},{"line_number":108,"context_line":"        if (host_state.thin_provisioning_support and"},{"line_number":109,"context_line":"                host_state.max_over_subscription_ratio \u003e\u003d 1):"},{"line_number":110,"context_line":"            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +"},{"line_number":111,"context_line":"                                  volume_size) / total)"},{"line_number":112,"context_line":"            if provisioned_ratio \u003e\u003d host_state.max_over_subscription_ratio:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_dbaa9118","line":109,"updated":"2015-01-22 18:39:27.000000000","message":"No need to do this again, below code can be under the \u0027else\u0027 branch of \u0027if free_virtual \u003c volume_size\u0027.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7f057f75ecc58b9ab7c2ffd2bc0f7f99af2b8f0e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        # Check if the ratio of provisioned capacity over total capacity"},{"line_number":107,"context_line":"        # has exceeded over subscription ratio."},{"line_number":108,"context_line":"        if (host_state.thin_provisioning_support and"},{"line_number":109,"context_line":"                host_state.max_over_subscription_ratio \u003e\u003d 1):"},{"line_number":110,"context_line":"            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +"},{"line_number":111,"context_line":"                                  volume_size) / total)"},{"line_number":112,"context_line":"            if provisioned_ratio \u003e\u003d host_state.max_over_subscription_ratio:"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_362053f7","line":109,"in_reply_to":"1a930d6b_3e961ef1","updated":"2015-02-01 20:00:00.000000000","message":"Done","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bc07268738d811862c11c20469b29ea3f825417","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        # Check if the ratio of provisioned capacity over total capacity"},{"line_number":107,"context_line":"        # has exceeded over subscription ratio."},{"line_number":108,"context_line":"        if (host_state.thin_provisioning_support and"},{"line_number":109,"context_line":"                host_state.max_over_subscription_ratio \u003e\u003d 1):"},{"line_number":110,"context_line":"            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +"},{"line_number":111,"context_line":"                                  volume_size) / total)"},{"line_number":112,"context_line":"            if provisioned_ratio \u003e\u003d host_state.max_over_subscription_ratio:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_3e961ef1","line":109,"in_reply_to":"1a930d6b_dbaa9118","updated":"2015-01-22 21:37:43.000000000","message":"Sure. Will move it in the next patch.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"c208d0d16e02b4c1579fcf706352af7ac00bd1bb","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                    {\"provisioned_ratio\": provisioned_ratio,"},{"line_number":120,"context_line":"                     \"oversub_ratio\": host_state.max_over_subscription_ratio,"},{"line_number":121,"context_line":"                     \"host\": host_state.host})"},{"line_number":122,"context_line":"                return False"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        return free \u003e\u003d volume_size"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_fba58d47","line":122,"updated":"2015-01-22 18:39:27.000000000","message":"An \u0027else\u0027 branch to if provisioned_ration \u003e\u003d max_over_subs... is needed here:\n\n            else:\n                return free_virtual \u003e\u003d volume_size\n\nAnd then, an \u0027else\u0027 branch to \u0027if host supports thin provision\u0027 is needed here, so we fall back to free capacity not free_virtual.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"7aa4bf8d837defda375cb9ae4ef3f0e6c2fecf1d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                    {\"provisioned_ratio\": provisioned_ratio,"},{"line_number":120,"context_line":"                     \"oversub_ratio\": host_state.max_over_subscription_ratio,"},{"line_number":121,"context_line":"                     \"host\": host_state.host})"},{"line_number":122,"context_line":"                return False"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        return free \u003e\u003d volume_size"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_fb057b7a","line":122,"updated":"2015-01-23 07:00:40.000000000","message":"Yes, but still need an \u0027else\u0027 branch in case backend doesn\u0027t support thin provisioning.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7f057f75ecc58b9ab7c2ffd2bc0f7f99af2b8f0e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                    {\"provisioned_ratio\": provisioned_ratio,"},{"line_number":120,"context_line":"                     \"oversub_ratio\": host_state.max_over_subscription_ratio,"},{"line_number":121,"context_line":"                     \"host\": host_state.host})"},{"line_number":122,"context_line":"                return False"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        return free \u003e\u003d volume_size"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_561dc7bc","line":122,"in_reply_to":"1a930d6b_fb057b7a","updated":"2015-02-01 20:00:00.000000000","message":"Done","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bc07268738d811862c11c20469b29ea3f825417","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                    {\"provisioned_ratio\": provisioned_ratio,"},{"line_number":120,"context_line":"                     \"oversub_ratio\": host_state.max_over_subscription_ratio,"},{"line_number":121,"context_line":"                     \"host\": host_state.host})"},{"line_number":122,"context_line":"                return False"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        return free \u003e\u003d volume_size"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_de20bab2","line":122,"in_reply_to":"1a930d6b_fba58d47","updated":"2015-01-22 21:37:43.000000000","message":"I want to make sure I understand your comments here.  So line 91-104 can be removed if I add \"return free_virtual\u003e\u003dvolume_size\" in an else block?\n\nLine 91-122 will be replaced with the following:\n\n        # Check if the ratio of provisioned capacity over total capacity\n        # has exceeded over subscription ratio.\n        if (host_state.thin_provisioning_support and\n                host_state.max_over_subscription_ratio \u003e\u003d 1):\n            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +\n                                  volume_size) / total)\n            if provisioned_ratio \u003e\u003d host_state.max_over_subscription_ratio:\n                LOG.warning(_LW(\n                    \"Insufficient free space for volume creation. \"\n                    \"The ratio of provisioned capacity over total capacity \"\n                    \"%(provisioned_ratio).2f has exceeded the maximum over \"\n                    \"subscription ratio %(oversub_ratio).2f on host \"\n                    \"%(host)s.\"),\n                    {\"provisioned_ratio\": provisioned_ratio,\n                     \"oversub_ratio\": host_state.max_over_subscription_ratio,\n                     \"host\": host_state.host})\n                return False\n            else:\n                return free_virtual \u003e\u003d volume_size\n\nSounds right?","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"8b53fdbf904b3c7405f38e4f4556afc0afac83db","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            # request.  Even if it was not, the retry mechanism is"},{"line_number":54,"context_line":"            # able to handle the failure by rescheduling"},{"line_number":55,"context_line":"            return True"},{"line_number":56,"context_line":"        total \u003d float(host_state.total_capacity_gb)"},{"line_number":57,"context_line":"        if total \u003c\u003d 0:"},{"line_number":58,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":59,"context_line":"                            \"Total capacity is %(total).2f on host %(host)s.\"),"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_99f92750","line":56,"updated":"2015-02-02 08:25:12.000000000","message":"if total was \u0027infinite\u0027 or \u0027unknown\u0027, casting it to float will raise ValueError.","commit_id":"372be939e119632e898f91b70976eadbeda84a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4cea94499ff70febff5ee5b8d342aac5947c8832","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            # request.  Even if it was not, the retry mechanism is"},{"line_number":54,"context_line":"            # able to handle the failure by rescheduling"},{"line_number":55,"context_line":"            return True"},{"line_number":56,"context_line":"        total \u003d float(host_state.total_capacity_gb)"},{"line_number":57,"context_line":"        if total \u003c\u003d 0:"},{"line_number":58,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":59,"context_line":"                            \"Total capacity is %(total).2f on host %(host)s.\"),"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_6d957b3f","line":56,"in_reply_to":"da86d52c_99f92750","updated":"2015-02-02 15:49:41.000000000","message":"Do you suggest that I return True if total is \u0027infinite\u0027 or \u0027unknown\u0027?","commit_id":"372be939e119632e898f91b70976eadbeda84a51"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"e68761573e16b32ab5207aec69aa65f16b2dbd34","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        total_space \u003d host_state.total_capacity_gb"},{"line_number":51,"context_line":"        if (free_space !\u003d \u0027infinite\u0027 and free_space !\u003d \u0027unknown\u0027 and"},{"line_number":52,"context_line":"                (total_space \u003d\u003d \u0027infinite\u0027 or total_space \u003d\u003d \u0027unknown\u0027) and"},{"line_number":53,"context_line":"                float(host_state.reserved_percentage) \u003e 0):"},{"line_number":54,"context_line":"            return False"},{"line_number":55,"context_line":"        if (free_space \u003d\u003d \u0027infinite\u0027 or free_space \u003d\u003d \u0027unknown\u0027 or"},{"line_number":56,"context_line":"                total_space \u003d\u003d \u0027infinite\u0027 or total_space \u003d\u003d \u0027unknown\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_142cec01","line":53,"updated":"2015-02-03 06:31:16.000000000","message":"\"(total_space \u003d\u003d \u0027infinite\u0027 or total_space \u003d\u003d \u0027unknown\u0027) and\t52\n                float(host_state.reserved_percentage) \u003e 0):\"\ndoes not make sense.\nIf total space does not have a known limit why is reserve percentage make any difference unless it is 100%","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd3ec975ddc7e6013ded8ef32b89cd719b135b6a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        total_space \u003d host_state.total_capacity_gb"},{"line_number":51,"context_line":"        if (free_space !\u003d \u0027infinite\u0027 and free_space !\u003d \u0027unknown\u0027 and"},{"line_number":52,"context_line":"                (total_space \u003d\u003d \u0027infinite\u0027 or total_space \u003d\u003d \u0027unknown\u0027) and"},{"line_number":53,"context_line":"                float(host_state.reserved_percentage) \u003e 0):"},{"line_number":54,"context_line":"            return False"},{"line_number":55,"context_line":"        if (free_space \u003d\u003d \u0027infinite\u0027 or free_space \u003d\u003d \u0027unknown\u0027 or"},{"line_number":56,"context_line":"                total_space \u003d\u003d \u0027infinite\u0027 or total_space \u003d\u003d \u0027unknown\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_7bfdfd39","line":53,"in_reply_to":"da86d52c_142cec01","updated":"2015-02-03 16:25:52.000000000","message":"Yes, it doesn\u0027t make sense. This check is to prevent user error. It is suggested by Winston. Note that we return False so this backend will not be selected.","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"e68761573e16b32ab5207aec69aa65f16b2dbd34","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            # able to handle the failure by rescheduling"},{"line_number":61,"context_line":"            return True"},{"line_number":62,"context_line":"        total \u003d float(total_space)"},{"line_number":63,"context_line":"        if total \u003c\u003d 0:"},{"line_number":64,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":65,"context_line":"                            \"Total capacity is %(total).2f on host %(host)s.\"),"},{"line_number":66,"context_line":"                        {\"total\": total,"}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_54d2e4d2","line":63,"updated":"2015-02-03 06:31:16.000000000","message":"How can total be less than 0 unless backend storage capacity is taken by non-cinder?\nThis check does not hurt but not clear how it is useful.","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd3ec975ddc7e6013ded8ef32b89cd719b135b6a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            # able to handle the failure by rescheduling"},{"line_number":61,"context_line":"            return True"},{"line_number":62,"context_line":"        total \u003d float(total_space)"},{"line_number":63,"context_line":"        if total \u003c\u003d 0:"},{"line_number":64,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":65,"context_line":"                            \"Total capacity is %(total).2f on host %(host)s.\"),"},{"line_number":66,"context_line":"                        {\"total\": total,"}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_fe58fb33","line":63,"in_reply_to":"da86d52c_54d2e4d2","updated":"2015-02-03 16:25:52.000000000","message":"I added this check because I actually ran into a problem in the unit test. This is to prevent user error and errors in the unit test.","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"e68761573e16b32ab5207aec69aa65f16b2dbd34","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    \"The ratio of provisioned capacity over total capacity \""},{"line_number":99,"context_line":"                    \"%(provisioned_ratio).2f has exceeded the maximum over \""},{"line_number":100,"context_line":"                    \"subscription ratio %(oversub_ratio).2f on host \""},{"line_number":101,"context_line":"                    \"%(host)s.\"),"},{"line_number":102,"context_line":"                    {\"provisioned_ratio\": provisioned_ratio,"},{"line_number":103,"context_line":"                     \"oversub_ratio\": host_state.max_over_subscription_ratio,"},{"line_number":104,"context_line":"                     \"host\": host_state.host})"}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_144b0c88","line":101,"updated":"2015-02-03 06:31:16.000000000","message":"suggest explicitly state that this is for thin provisioning","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd3ec975ddc7e6013ded8ef32b89cd719b135b6a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    \"The ratio of provisioned capacity over total capacity \""},{"line_number":99,"context_line":"                    \"%(provisioned_ratio).2f has exceeded the maximum over \""},{"line_number":100,"context_line":"                    \"subscription ratio %(oversub_ratio).2f on host \""},{"line_number":101,"context_line":"                    \"%(host)s.\"),"},{"line_number":102,"context_line":"                    {\"provisioned_ratio\": provisioned_ratio,"},{"line_number":103,"context_line":"                     \"oversub_ratio\": host_state.max_over_subscription_ratio,"},{"line_number":104,"context_line":"                     \"host\": host_state.host})"}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_7e4c0b71","line":101,"in_reply_to":"da86d52c_144b0c88","updated":"2015-02-03 16:25:52.000000000","message":"Done","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"6df37831b8075976f80a9de1d062042cb8c682ff","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        free_space \u003d host_state.free_capacity_gb"},{"line_number":50,"context_line":"        total_space \u003d host_state.total_capacity_gb"},{"line_number":51,"context_line":"        if (free_space !\u003d \u0027infinite\u0027 and free_space !\u003d \u0027unknown\u0027 and"},{"line_number":52,"context_line":"                (total_space \u003d\u003d \u0027infinite\u0027 or total_space \u003d\u003d \u0027unknown\u0027) and"},{"line_number":53,"context_line":"                float(host_state.reserved_percentage) \u003e 0):"},{"line_number":54,"context_line":"            return False"},{"line_number":55,"context_line":"        if (free_space \u003d\u003d \u0027infinite\u0027 or free_space \u003d\u003d \u0027unknown\u0027 or"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_6a6fc52b","line":52,"updated":"2015-02-04 09:51:25.000000000","message":"I\u0027d suggest doing it like this:\n\n    if free_space in [\u0027infinite\u0027, \u0027unknown\u0027]:\n        return True\n    elif total in [\u0027infinite\u0027, \u0027unknown\u0027] and reserved \u003e 0:\n        return False\n\n    ...","commit_id":"2c1beb61903fb2811afbe546ef7fe0f87478c393"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c0a32d0f469dcf9882eb555ac368f40a6835bd5e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        free_space \u003d host_state.free_capacity_gb"},{"line_number":50,"context_line":"        total_space \u003d host_state.total_capacity_gb"},{"line_number":51,"context_line":"        if (free_space !\u003d \u0027infinite\u0027 and free_space !\u003d \u0027unknown\u0027 and"},{"line_number":52,"context_line":"                (total_space \u003d\u003d \u0027infinite\u0027 or total_space \u003d\u003d \u0027unknown\u0027) and"},{"line_number":53,"context_line":"                float(host_state.reserved_percentage) \u003e 0):"},{"line_number":54,"context_line":"            return False"},{"line_number":55,"context_line":"        if (free_space \u003d\u003d \u0027infinite\u0027 or free_space \u003d\u003d \u0027unknown\u0027 or"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_469e7508","line":52,"in_reply_to":"da86d52c_6a6fc52b","updated":"2015-02-04 14:19:29.000000000","message":"Good suggestion. Done.","commit_id":"2c1beb61903fb2811afbe546ef7fe0f87478c393"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"625dc48670cc7e835a3535a30b1c334e56d578c8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            # request.  Even if it was not, the retry mechanism is"},{"line_number":56,"context_line":"            # able to handle the failure by rescheduling"},{"line_number":57,"context_line":"            return True"},{"line_number":58,"context_line":"        elif total_space in [\u0027infinite\u0027, \u0027unknown\u0027] and reserved \u003e 0:"},{"line_number":59,"context_line":"            return False"},{"line_number":60,"context_line":"        total \u003d float(total_space)"},{"line_number":61,"context_line":"        if total \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_44d2e45c","line":58,"updated":"2015-02-04 17:31:48.000000000","message":"Why is reserved matter? \nYou are here only if free capacity is known and total capacity is unknown/infinite. So which percentage of infinite is reserved, as long it is below 1, should not matter.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd8d92713ec53410983860cdbc646ad65c71fad7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            # request.  Even if it was not, the retry mechanism is"},{"line_number":56,"context_line":"            # able to handle the failure by rescheduling"},{"line_number":57,"context_line":"            return True"},{"line_number":58,"context_line":"        elif total_space in [\u0027infinite\u0027, \u0027unknown\u0027] and reserved \u003e 0:"},{"line_number":59,"context_line":"            return False"},{"line_number":60,"context_line":"        total \u003d float(total_space)"},{"line_number":61,"context_line":"        if total \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_9ea428a7","line":58,"in_reply_to":"da86d52c_44d2e45c","updated":"2015-02-04 19:54:18.000000000","message":"If we don\u0027t return False here, it will throw exception on line 69 when we calculate reserved space.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"625dc48670cc7e835a3535a30b1c334e56d578c8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            return True"},{"line_number":58,"context_line":"        elif total_space in [\u0027infinite\u0027, \u0027unknown\u0027] and reserved \u003e 0:"},{"line_number":59,"context_line":"            return False"},{"line_number":60,"context_line":"        total \u003d float(total_space)"},{"line_number":61,"context_line":"        if total \u003c\u003d 0:"},{"line_number":62,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":63,"context_line":"                            \"Total capacity is %(total).2f on host %(host)s.\"),"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_046aac80","line":60,"updated":"2015-02-04 17:31:48.000000000","message":"You will have a problem here if total_space is infinite or unknown and you drop here if reserved is 0. float will not work on them.\n\nMake sure we have a test with reserve \u003d 0.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd8d92713ec53410983860cdbc646ad65c71fad7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            return True"},{"line_number":58,"context_line":"        elif total_space in [\u0027infinite\u0027, \u0027unknown\u0027] and reserved \u003e 0:"},{"line_number":59,"context_line":"            return False"},{"line_number":60,"context_line":"        total \u003d float(total_space)"},{"line_number":61,"context_line":"        if total \u003c\u003d 0:"},{"line_number":62,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""},{"line_number":63,"context_line":"                            \"Total capacity is %(total).2f on host %(host)s.\"),"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_de74e0ff","line":60,"in_reply_to":"da86d52c_046aac80","updated":"2015-02-04 19:54:18.000000000","message":"I think you right. If total_space is infinite or unknown, we should always return False whether reserved is \u003e0 or \u003d0.  Because float(total_space) will throw an exception if it is inifinite, and total * reserved will also throw exception.\n\nYes, there\u0027s a test with reserved \u003d 0.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"86e1f4669af1d5ab86f4e0c76d9cd0365d468162","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            # If total_space is \u0027infinite\u0027 or \u0027unknown\u0027, we cannot"},{"line_number":60,"context_line":"            # calculate the reserved space. float(total_space) will"},{"line_number":61,"context_line":"            # throw an exception. total*reserved also won\u0027t work."},{"line_number":62,"context_line":"            return False"},{"line_number":63,"context_line":"        total \u003d float(total_space)"},{"line_number":64,"context_line":"        if total \u003c\u003d 0:"},{"line_number":65,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""}],"source_content_type":"text/x-python","patch_set":26,"id":"da86d52c_6fa32eb2","line":62,"updated":"2015-02-05 03:36:16.000000000","message":"Winston,\n\nHow about this?\n\nelif total_space in [\u0027infinite\u0027, \u0027unknown\u0027]:\n    if reserved \u003d\u003d 0:\n        return True\n    return False","commit_id":"22c66857a5195822e986f6401a5a047ac5263fee"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"37cc7e5f6bc471235aa264687931ff087d9918e0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            # If total_space is \u0027infinite\u0027 or \u0027unknown\u0027, we cannot"},{"line_number":60,"context_line":"            # calculate the reserved space. float(total_space) will"},{"line_number":61,"context_line":"            # throw an exception. total*reserved also won\u0027t work."},{"line_number":62,"context_line":"            return False"},{"line_number":63,"context_line":"        total \u003d float(total_space)"},{"line_number":64,"context_line":"        if total \u003c\u003d 0:"},{"line_number":65,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation. \""}],"source_content_type":"text/x-python","patch_set":26,"id":"da86d52c_429ac16e","line":62,"in_reply_to":"da86d52c_6fa32eb2","updated":"2015-02-05 04:27:51.000000000","message":"Changed to the above.","commit_id":"22c66857a5195822e986f6401a5a047ac5263fee"}],"cinder/scheduler/host_manager.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ebdb9d891b81018e420f8f5afbef37ac0e0775a3","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.allocated_capacity_gb \u003d 0"},{"line_number":110,"context_line":"        self.free_capacity_gb \u003d None"},{"line_number":111,"context_line":"        self.reserved_percentage \u003d 0"},{"line_number":112,"context_line":"        self.provisioned_capacity_gb \u003d 0"},{"line_number":113,"context_line":"        self.max_over_subscription_ratio \u003d 1.0"},{"line_number":114,"context_line":"        self.max_used_ratio \u003d 0.95"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_5894fc43","line":112,"updated":"2014-12-17 05:14:13.000000000","message":"It\u0027d be nice if we can have some comment here to explaint the difference between allocated_capacity and provisioned_capacity.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48769467a935ca1b8bdca36f3b5dfcec6015fb75","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.allocated_capacity_gb \u003d 0"},{"line_number":110,"context_line":"        self.free_capacity_gb \u003d None"},{"line_number":111,"context_line":"        self.reserved_percentage \u003d 0"},{"line_number":112,"context_line":"        self.provisioned_capacity_gb \u003d 0"},{"line_number":113,"context_line":"        self.max_over_subscription_ratio \u003d 1.0"},{"line_number":114,"context_line":"        self.max_used_ratio \u003d 0.95"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_8e8ffe74","line":112,"in_reply_to":"3a961159_5894fc43","updated":"2014-12-17 06:57:45.000000000","message":"Sure, will add comments.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ebdb9d891b81018e420f8f5afbef37ac0e0775a3","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            self.QoS_support \u003d capability.get(\u0027QoS_support\u0027, False)"},{"line_number":311,"context_line":"            self.reserved_percentage \u003d capability.get(\u0027reserved_percentage\u0027, 0)"},{"line_number":312,"context_line":"            self.provisioned_capacity_gb \u003d capability.get("},{"line_number":313,"context_line":"                \u0027provisioned_capacity_gb\u0027, 0)"},{"line_number":314,"context_line":"            self.max_over_subscription_ratio \u003d capability.get("},{"line_number":315,"context_line":"                \u0027max_over_subscription_ratio\u0027, 1.0)"},{"line_number":316,"context_line":"            self.used_ratio \u003d capability.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_7891b851","line":313,"updated":"2014-12-17 05:14:13.000000000","message":"IIUC, provisioned_capacity is the actual used capacity, right?  So in case driver doesn\u0027t report this value, we should default it to \u0027allocated_capacity\u0027 instead of 0, so that the new weigher can have more accurate data to weigh backends.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48769467a935ca1b8bdca36f3b5dfcec6015fb75","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            self.QoS_support \u003d capability.get(\u0027QoS_support\u0027, False)"},{"line_number":311,"context_line":"            self.reserved_percentage \u003d capability.get(\u0027reserved_percentage\u0027, 0)"},{"line_number":312,"context_line":"            self.provisioned_capacity_gb \u003d capability.get("},{"line_number":313,"context_line":"                \u0027provisioned_capacity_gb\u0027, 0)"},{"line_number":314,"context_line":"            self.max_over_subscription_ratio \u003d capability.get("},{"line_number":315,"context_line":"                \u0027max_over_subscription_ratio\u0027, 1.0)"},{"line_number":316,"context_line":"            self.used_ratio \u003d capability.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_aebafa07","line":313,"in_reply_to":"3a961159_7891b851","updated":"2014-12-17 06:57:45.000000000","message":"provisioned_capacity is the apparent capacity. So it could be the apparent total capacity of all the volumes created. \u0027allocated_capacity\u0027 is probably more accurate than 0.  Will change it.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ebdb9d891b81018e420f8f5afbef37ac0e0775a3","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            self.max_over_subscription_ratio \u003d capability.get("},{"line_number":315,"context_line":"                \u0027max_over_subscription_ratio\u0027, 1.0)"},{"line_number":316,"context_line":"            self.used_ratio \u003d capability.get("},{"line_number":317,"context_line":"                \u0027max_used_ratio\u0027, 0.95)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def update_pools(self, capability):"},{"line_number":320,"context_line":"        # Do nothing, since we don\u0027t have pools within pool, yet"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_989e6462","line":317,"updated":"2014-12-17 05:14:13.000000000","message":"How about use the default value for max_used_ratio option defined in volume/driver.py instead of hardcoding the default value here?  Same applies to max_over_subscription_ratio.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48769467a935ca1b8bdca36f3b5dfcec6015fb75","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            self.max_over_subscription_ratio \u003d capability.get("},{"line_number":315,"context_line":"                \u0027max_over_subscription_ratio\u0027, 1.0)"},{"line_number":316,"context_line":"            self.used_ratio \u003d capability.get("},{"line_number":317,"context_line":"                \u0027max_used_ratio\u0027, 0.95)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def update_pools(self, capability):"},{"line_number":320,"context_line":"        # Do nothing, since we don\u0027t have pools within pool, yet"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_6e6e5298","line":317,"in_reply_to":"3a961159_989e6462","updated":"2014-12-17 06:57:45.000000000","message":"Good idea.  Will do.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                \u0027thin_provisioning_support\u0027, False)"},{"line_number":336,"context_line":"            self.thick_provisioning_support \u003d capability.get("},{"line_number":337,"context_line":"                \u0027thick_provisioning_support\u0027, False)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def update_pools(self, capability):"},{"line_number":340,"context_line":"        # Do nothing, since we don\u0027t have pools within pool, yet"},{"line_number":341,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_4801b2ae","line":338,"updated":"2014-12-27 01:41:42.000000000","message":"Need a check to make sure that both thin and thick provisioning is not set to TRUE.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                \u0027thin_provisioning_support\u0027, False)"},{"line_number":336,"context_line":"            self.thick_provisioning_support \u003d capability.get("},{"line_number":337,"context_line":"                \u0027thick_provisioning_support\u0027, False)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def update_pools(self, capability):"},{"line_number":340,"context_line":"        # Do nothing, since we don\u0027t have pools within pool, yet"},{"line_number":341,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_f49313a2","line":338,"in_reply_to":"3a961159_4801b2ae","updated":"2014-12-28 06:26:40.000000000","message":"It is actually possible for a backend to support both thin and thick provisioning. This depends on driver implementation. Our driver supports it.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"c208d0d16e02b4c1579fcf706352af7ac00bd1bb","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.ListOpt(\u0027scheduler_default_weighers\u0027,"},{"line_number":45,"context_line":"                default\u003d["},{"line_number":46,"context_line":"                    \u0027CapacityWeigher\u0027,"},{"line_number":47,"context_line":"                    \u0027ProvisionedCapacityWeigher\u0027"},{"line_number":48,"context_line":"                ],"},{"line_number":49,"context_line":"                help\u003d\u0027Which weigher class names to use for weighing hosts.\u0027)"},{"line_number":50,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_9bb0098d","line":47,"updated":"2015-01-22 18:39:27.000000000","message":"Not sure having both CapacityWeigher and ProvisionedCapacityWeigher as default weigher is a good idea, depends on how much capacity were used outside of Cinder, the combination of these two may generate very differnt results using default weight multiplier.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"c155c1656fe1f5cb30d16e1915ee00f929d3fe8e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.ListOpt(\u0027scheduler_default_weighers\u0027,"},{"line_number":45,"context_line":"                default\u003d["},{"line_number":46,"context_line":"                    \u0027CapacityWeigher\u0027,"},{"line_number":47,"context_line":"                    \u0027ProvisionedCapacityWeigher\u0027"},{"line_number":48,"context_line":"                ],"},{"line_number":49,"context_line":"                help\u003d\u0027Which weigher class names to use for weighing hosts.\u0027)"},{"line_number":50,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_ef7ca2b7","line":47,"updated":"2015-01-26 04:05:09.000000000","message":"Yes, please.  Since \u0027ProvsionedCapacityWeigher\u0027 should be renamed to \u0027VirtualCapacityWeigher\u0027, I think in most cases, \u0027VirtualCapacityWeigher\u0027 should be the default weigher instead of CapacityWeigher because it can do what CapacityWeigher is capable of.  What do you think?","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8a70e9b8c3a818bc6512c72339333c2f5910287b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.ListOpt(\u0027scheduler_default_weighers\u0027,"},{"line_number":45,"context_line":"                default\u003d["},{"line_number":46,"context_line":"                    \u0027CapacityWeigher\u0027,"},{"line_number":47,"context_line":"                    \u0027ProvisionedCapacityWeigher\u0027"},{"line_number":48,"context_line":"                ],"},{"line_number":49,"context_line":"                help\u003d\u0027Which weigher class names to use for weighing hosts.\u0027)"},{"line_number":50,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_45221b02","line":47,"in_reply_to":"1a930d6b_9bb0098d","updated":"2015-01-23 16:20:24.000000000","message":"I missed this comment. Do you suggest that I remove ProvisionedCapacityWeigher from default?","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7f057f75ecc58b9ab7c2ffd2bc0f7f99af2b8f0e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.ListOpt(\u0027scheduler_default_weighers\u0027,"},{"line_number":45,"context_line":"                default\u003d["},{"line_number":46,"context_line":"                    \u0027CapacityWeigher\u0027,"},{"line_number":47,"context_line":"                    \u0027ProvisionedCapacityWeigher\u0027"},{"line_number":48,"context_line":"                ],"},{"line_number":49,"context_line":"                help\u003d\u0027Which weigher class names to use for weighing hosts.\u0027)"},{"line_number":50,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_b60c4396","line":47,"in_reply_to":"1a930d6b_eae01098","updated":"2015-02-01 20:00:00.000000000","message":"Changed VirtualCapacityWeigher to be the only default.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"92eeb8dd9995182e48bfb90457c7af449d6a8d0d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.ListOpt(\u0027scheduler_default_weighers\u0027,"},{"line_number":45,"context_line":"                default\u003d["},{"line_number":46,"context_line":"                    \u0027CapacityWeigher\u0027,"},{"line_number":47,"context_line":"                    \u0027ProvisionedCapacityWeigher\u0027"},{"line_number":48,"context_line":"                ],"},{"line_number":49,"context_line":"                help\u003d\u0027Which weigher class names to use for weighing hosts.\u0027)"},{"line_number":50,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_eae01098","line":47,"in_reply_to":"1a930d6b_ef7ca2b7","updated":"2015-01-26 05:39:27.000000000","message":"Should we keep \u0027CapacityWeigher\u0027 as the default for now because LVM doesn\u0027t use thin by default yet? Once LVM uses thin by default, \u0027ProvisionedCapacityWeigher\u0027 can be changed to the default?","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"8b53fdbf904b3c7405f38e4f4556afc0afac83db","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\"Incrementally update host state from an volume.\"\"\""},{"line_number":272,"context_line":"        volume_gb \u003d volume[\u0027size\u0027]"},{"line_number":273,"context_line":"        self.allocated_capacity_gb +\u003d volume_gb"},{"line_number":274,"context_line":"        self.provisioned_capacity_gb +\u003d volume_gb"},{"line_number":275,"context_line":"        if self.free_capacity_gb \u003d\u003d \u0027infinite\u0027:"},{"line_number":276,"context_line":"            # There\u0027s virtually infinite space on back-end"},{"line_number":277,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_79fc733f","side":"PARENT","line":274,"updated":"2015-02-02 08:25:12.000000000","message":"Why removing this line?","commit_id":"a87d306b5e6c47f22ed83d5722148f8a6f8d4966"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4cea94499ff70febff5ee5b8d342aac5947c8832","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\"Incrementally update host state from an volume.\"\"\""},{"line_number":272,"context_line":"        volume_gb \u003d volume[\u0027size\u0027]"},{"line_number":273,"context_line":"        self.allocated_capacity_gb +\u003d volume_gb"},{"line_number":274,"context_line":"        self.provisioned_capacity_gb +\u003d volume_gb"},{"line_number":275,"context_line":"        if self.free_capacity_gb \u003d\u003d \u0027infinite\u0027:"},{"line_number":276,"context_line":"            # There\u0027s virtually infinite space on back-end"},{"line_number":277,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_0dc23fe9","side":"PARENT","line":274,"in_reply_to":"da86d52c_79fc733f","updated":"2015-02-02 15:49:41.000000000","message":"provisioned_capacity_gb is not calculated by the scheduler as the allocated capacity. I already have volume size added to provisioned_capacity in the filter scheduer below:\n\nhttps://review.openstack.org/#/c/142171/21/cinder/scheduler/filters/capacity_filter.py line 88\n\nSo I removed it here.","commit_id":"a87d306b5e6c47f22ed83d5722148f8a6f8d4966"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"2c7903e60cb3885f60538c5a4ca2b05ce9f63097","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\"Incrementally update host state from an volume.\"\"\""},{"line_number":272,"context_line":"        volume_gb \u003d volume[\u0027size\u0027]"},{"line_number":273,"context_line":"        self.allocated_capacity_gb +\u003d volume_gb"},{"line_number":274,"context_line":"        self.provisioned_capacity_gb +\u003d volume_gb"},{"line_number":275,"context_line":"        if self.free_capacity_gb \u003d\u003d \u0027infinite\u0027:"},{"line_number":276,"context_line":"            # There\u0027s virtually infinite space on back-end"},{"line_number":277,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_33358af7","side":"PARENT","line":274,"updated":"2015-02-03 03:31:24.000000000","message":"Why remvoing this?","commit_id":"a87d306b5e6c47f22ed83d5722148f8a6f8d4966"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d8c1de2a2e0a20d47130e53ada2a85105fdefeec","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\"Incrementally update host state from an volume.\"\"\""},{"line_number":272,"context_line":"        volume_gb \u003d volume[\u0027size\u0027]"},{"line_number":273,"context_line":"        self.allocated_capacity_gb +\u003d volume_gb"},{"line_number":274,"context_line":"        self.provisioned_capacity_gb +\u003d volume_gb"},{"line_number":275,"context_line":"        if self.free_capacity_gb \u003d\u003d \u0027infinite\u0027:"},{"line_number":276,"context_line":"            # There\u0027s virtually infinite space on back-end"},{"line_number":277,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_59277d64","side":"PARENT","line":274,"in_reply_to":"da86d52c_33358af7","updated":"2015-02-03 05:25:47.000000000","message":"Added back.","commit_id":"a87d306b5e6c47f22ed83d5722148f8a6f8d4966"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"e68761573e16b32ab5207aec69aa65f16b2dbd34","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        # all volumes on a backend, which could be greater than or"},{"line_number":116,"context_line":"        # equal to the allocated_capacity_gb."},{"line_number":117,"context_line":"        self.provisioned_capacity_gb \u003d 0"},{"line_number":118,"context_line":"        self.max_over_subscription_ratio \u003d 1.0"},{"line_number":119,"context_line":"        self.thin_provisioning_support \u003d False"},{"line_number":120,"context_line":"        self.thick_provisioning_support \u003d False"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_940c5c44","line":118,"updated":"2015-02-03 06:31:16.000000000","message":"good choice","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"}],"cinder/scheduler/weights/capacity.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ebdb9d891b81018e420f8f5afbef37ac0e0775a3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"class ProvisionedCapacityWeigher(weights.BaseHostWeigher):"},{"line_number":92,"context_line":"    def _weight_multiplier(self):"},{"line_number":93,"context_line":"        \"\"\"Override the weight multiplier.\"\"\""},{"line_number":94,"context_line":"        return CONF.provisioned_capacity_weight_multiplier"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _weigh_object(self, host_state, weight_properties):"},{"line_number":97,"context_line":"        \"\"\"Higher weights win.  We want spreading to be the default.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_38b010f4","line":94,"updated":"2014-12-17 05:14:13.000000000","message":"This config option needs to be defined before using it.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48769467a935ca1b8bdca36f3b5dfcec6015fb75","unresolved":false,"context_lines":[{"line_number":91,"context_line":"class ProvisionedCapacityWeigher(weights.BaseHostWeigher):"},{"line_number":92,"context_line":"    def _weight_multiplier(self):"},{"line_number":93,"context_line":"        \"\"\"Override the weight multiplier.\"\"\""},{"line_number":94,"context_line":"        return CONF.provisioned_capacity_weight_multiplier"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _weigh_object(self, host_state, weight_properties):"},{"line_number":97,"context_line":"        \"\"\"Higher weights win.  We want spreading to be the default.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2e144af4","line":94,"in_reply_to":"3a961159_38b010f4","updated":"2014-12-17 06:57:45.000000000","message":"Good catch!  Will add it.","commit_id":"589f308d637b140c28a679207d9545428e6d5e4b"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"3e48c302d60c810134d0855e54ac6a5caab0a0a5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"set the \u0027allocated_capacity_weight_multiplier\u0027 option to a positive number"},{"line_number":34,"context_line":"and the weighing has the opposite effect of the default."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"3. Provisioned Capacity Weigher.  Weigh hosts by their provisioned capacity."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"The default is to spread volumes across all hosts evenly.  If you prefer"},{"line_number":39,"context_line":"stacking, you can set the \u0027provisioned_capacity_weight_multiplier\u0027 option"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_9ce0f1f9","line":36,"updated":"2015-01-13 20:03:01.000000000","message":"Weigh -\u003e Weight (typo)","commit_id":"3d337dbfbebaf269df61d2143832cc01c2b9f8a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1e81c7e0c157a18f2a0073db757ad8f1ea094d7a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"set the \u0027allocated_capacity_weight_multiplier\u0027 option to a positive number"},{"line_number":34,"context_line":"and the weighing has the opposite effect of the default."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"3. Provisioned Capacity Weigher.  Weigh hosts by their provisioned capacity."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"The default is to spread volumes across all hosts evenly.  If you prefer"},{"line_number":39,"context_line":"stacking, you can set the \u0027provisioned_capacity_weight_multiplier\u0027 option"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_bce3eda2","line":36,"in_reply_to":"3a961159_9ce0f1f9","updated":"2015-01-13 20:11:30.000000000","message":"\"Weigh\" is a verb while \"Weight\" is a noun.  So I think \"Weigh\" is correct here.  Also I\u0027m following the convention of #1 and #2 above, both use \"Weigh hosts\".","commit_id":"3d337dbfbebaf269df61d2143832cc01c2b9f8a2"},{"author":{"_account_id":11903,"name":"Anthony Lee","email":"anthony.mic.lee@hpe.com","username":"leeantho"},"change_message_id":"9974b020cd57f279bb93b296af4a3da91e7644b3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 eBay Inc."},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright (c) 2014 EMC Corporation"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_3ed31802","line":3,"updated":"2015-01-15 21:28:14.000000000","message":"2015?","commit_id":"4e2e1ac212b865ae8dc75b911bf287189f9e3cf6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48b27e9246ee018e9e2c38cb2889d852e842089b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 eBay Inc."},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright (c) 2014 EMC Corporation"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_d4ee748a","line":3,"in_reply_to":"3a961159_3ed31802","updated":"2015-01-15 23:44:10.000000000","message":"Done","commit_id":"4e2e1ac212b865ae8dc75b911bf287189f9e3cf6"},{"author":{"_account_id":11903,"name":"Anthony Lee","email":"anthony.mic.lee@hpe.com","username":"leeantho"},"change_message_id":"9974b020cd57f279bb93b296af4a3da91e7644b3","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            # As a partial fix for bug #1350638, \u0027infinite\u0027 and \u0027unknown\u0027 are"},{"line_number":123,"context_line":"            # given the lowest weight to discourage driver from report such"},{"line_number":124,"context_line":"            # capacity anymore."},{"line_number":125,"context_line":"            free \u003d -1 if CONF.provisioned_capacity_weight_multiplier \u003e 0 \\"},{"line_number":126,"context_line":"                else float(\u0027inf\u0027)"},{"line_number":127,"context_line":"        else:"},{"line_number":128,"context_line":"            volume_size \u003d weight_properties.get(\u0027size\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_9e3facde","line":125,"updated":"2015-01-15 21:28:14.000000000","message":"could wrap in parentheses instead of using backslash for line continuation.","commit_id":"4e2e1ac212b865ae8dc75b911bf287189f9e3cf6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48b27e9246ee018e9e2c38cb2889d852e842089b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            # As a partial fix for bug #1350638, \u0027infinite\u0027 and \u0027unknown\u0027 are"},{"line_number":123,"context_line":"            # given the lowest weight to discourage driver from report such"},{"line_number":124,"context_line":"            # capacity anymore."},{"line_number":125,"context_line":"            free \u003d -1 if CONF.provisioned_capacity_weight_multiplier \u003e 0 \\"},{"line_number":126,"context_line":"                else float(\u0027inf\u0027)"},{"line_number":127,"context_line":"        else:"},{"line_number":128,"context_line":"            volume_size \u003d weight_properties.get(\u0027size\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_b4dc88e2","line":125,"in_reply_to":"3a961159_9e3facde","updated":"2015-01-15 23:44:10.000000000","message":"Done","commit_id":"4e2e1ac212b865ae8dc75b911bf287189f9e3cf6"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"c208d0d16e02b4c1579fcf706352af7ac00bd1bb","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                    else float(\u0027inf\u0027))"},{"line_number":127,"context_line":"        else:"},{"line_number":128,"context_line":"            volume_size \u003d weight_properties.get(\u0027size\u0027)"},{"line_number":129,"context_line":"            free \u003d (float(host_state.total_capacity_gb) * max_over_ratio"},{"line_number":130,"context_line":"                    - host_state.provisioned_capacity_gb - volume_size)"},{"line_number":131,"context_line":"        return free"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_7bba7d6f","line":129,"updated":"2015-01-22 18:39:27.000000000","message":"reserved_percentage and max_used_ratio are both ignored here.  And this formula is the free_virtual capacity, we better change the weigher name to relfect this or should this weigher simply returns host_state.provsioned_capacity_gb directly?","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8a70e9b8c3a818bc6512c72339333c2f5910287b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                    else float(\u0027inf\u0027))"},{"line_number":127,"context_line":"        else:"},{"line_number":128,"context_line":"            volume_size \u003d weight_properties.get(\u0027size\u0027)"},{"line_number":129,"context_line":"            free \u003d (float(host_state.total_capacity_gb) * max_over_ratio"},{"line_number":130,"context_line":"                    - host_state.provisioned_capacity_gb - volume_size)"},{"line_number":131,"context_line":"        return free"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_a5965fee","line":129,"in_reply_to":"1a930d6b_7bba7d6f","updated":"2015-01-23 16:20:24.000000000","message":"Good point.  It\u0027s better to rename this to VirtualCapacityWeigher.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7f057f75ecc58b9ab7c2ffd2bc0f7f99af2b8f0e","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                    else float(\u0027inf\u0027))"},{"line_number":127,"context_line":"        else:"},{"line_number":128,"context_line":"            volume_size \u003d weight_properties.get(\u0027size\u0027)"},{"line_number":129,"context_line":"            free \u003d (float(host_state.total_capacity_gb) * max_over_ratio"},{"line_number":130,"context_line":"                    - host_state.provisioned_capacity_gb - volume_size)"},{"line_number":131,"context_line":"        return free"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_7612cbb5","line":129,"in_reply_to":"1a930d6b_a5965fee","updated":"2015-02-01 20:00:00.000000000","message":"Renamed to VirtualCapacityWeigher.","commit_id":"d22275ffae1aaa9ba257cd3346f8d150a49545ba"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"8b53fdbf904b3c7405f38e4f4556afc0afac83db","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        max_over_ratio \u003d (host_state.max_over_subscription_ratio if"},{"line_number":116,"context_line":"                          host_state.thin_provisioning_support else 1.0)"},{"line_number":117,"context_line":"        total \u003d host_state.total_capacity_gb"},{"line_number":118,"context_line":"        if total \u003d\u003d \u0027infinite\u0027 or total \u003d\u003d \u0027unknown\u0027:"},{"line_number":119,"context_line":"            #(zhiteng) \u0027infinite\u0027 and \u0027unknown\u0027 are treated the same"},{"line_number":120,"context_line":"            # here, for sorting purpose."},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_3902fb3e","line":118,"updated":"2015-02-02 08:25:12.000000000","message":"why sorting by total instead of free?","commit_id":"372be939e119632e898f91b70976eadbeda84a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4cea94499ff70febff5ee5b8d342aac5947c8832","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        max_over_ratio \u003d (host_state.max_over_subscription_ratio if"},{"line_number":116,"context_line":"                          host_state.thin_provisioning_support else 1.0)"},{"line_number":117,"context_line":"        total \u003d host_state.total_capacity_gb"},{"line_number":118,"context_line":"        if total \u003d\u003d \u0027infinite\u0027 or total \u003d\u003d \u0027unknown\u0027:"},{"line_number":119,"context_line":"            #(zhiteng) \u0027infinite\u0027 and \u0027unknown\u0027 are treated the same"},{"line_number":120,"context_line":"            # here, for sorting purpose."},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_2858d131","line":118,"in_reply_to":"da86d52c_3902fb3e","updated":"2015-02-02 15:49:41.000000000","message":"hmm, should be free.","commit_id":"372be939e119632e898f91b70976eadbeda84a51"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"2c7903e60cb3885f60538c5a4ca2b05ce9f63097","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"Weighers that weigh hosts by their capacity, including following three"},{"line_number":20,"context_line":"weighers:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"1. Capacity Weigher.  Weigh hosts by their available capacity."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_d358ae58","line":19,"updated":"2015-02-03 03:31:24.000000000","message":"two weighers, since we only enhance the CapacityWeigher, not introducing new one.","commit_id":"679422057f8a2cabce58caebf74fa08703d8e462"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d8c1de2a2e0a20d47130e53ada2a85105fdefeec","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"Weighers that weigh hosts by their capacity, including following three"},{"line_number":20,"context_line":"weighers:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"1. Capacity Weigher.  Weigh hosts by their available capacity."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_8ed1a9fd","line":19,"in_reply_to":"da86d52c_d358ae58","updated":"2015-02-03 05:25:47.000000000","message":"Done","commit_id":"679422057f8a2cabce58caebf74fa08703d8e462"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"2c7903e60cb3885f60538c5a4ca2b05ce9f63097","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Weighers that weigh hosts by their capacity, including following three"},{"line_number":20,"context_line":"weighers:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"1. Capacity Weigher.  Weigh hosts by their available capacity."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The default is to spread volumes across all hosts evenly.  If you prefer"},{"line_number":25,"context_line":"stacking, you can set the \u0027capacity_weight_multiplier\u0027 option to a negative"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_f353f236","line":22,"updated":"2015-02-03 03:31:24.000000000","message":"Need to update the description of this weigher.","commit_id":"679422057f8a2cabce58caebf74fa08703d8e462"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d8c1de2a2e0a20d47130e53ada2a85105fdefeec","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Weighers that weigh hosts by their capacity, including following three"},{"line_number":20,"context_line":"weighers:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"1. Capacity Weigher.  Weigh hosts by their available capacity."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The default is to spread volumes across all hosts evenly.  If you prefer"},{"line_number":25,"context_line":"stacking, you can set the \u0027capacity_weight_multiplier\u0027 option to a negative"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_aeccad62","line":22,"in_reply_to":"da86d52c_f353f236","updated":"2015-02-03 05:25:47.000000000","message":"Done","commit_id":"679422057f8a2cabce58caebf74fa08703d8e462"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"2c7903e60cb3885f60538c5a4ca2b05ce9f63097","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            # capacity anymore."},{"line_number":76,"context_line":"            free \u003d -1 if CONF.capacity_weight_multiplier \u003e 0 else float(\u0027inf\u0027)"},{"line_number":77,"context_line":"        else:"},{"line_number":78,"context_line":"            total \u003d float(host_state.total_capacity_gb)"},{"line_number":79,"context_line":"            if host_state.thin_provisioning_support:"},{"line_number":80,"context_line":"                volume_size \u003d weight_properties.get(\u0027size\u0027)"},{"line_number":81,"context_line":"                # Calculate virtual free capacity for thin provisioning."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_13324610","line":78,"updated":"2015-02-03 03:31:24.000000000","message":"Need to handle the case where total is \u0027infinite\u0027 or \u0027unknown\u0027, when total is \u0027infinite\u0027/\u0027unknown\u0027, even when free cap is actual, we should still give them lowest weight to discourage the use of \u0027infinite\u0027/\u0027unknown\u0027.","commit_id":"679422057f8a2cabce58caebf74fa08703d8e462"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d8c1de2a2e0a20d47130e53ada2a85105fdefeec","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            # capacity anymore."},{"line_number":76,"context_line":"            free \u003d -1 if CONF.capacity_weight_multiplier \u003e 0 else float(\u0027inf\u0027)"},{"line_number":77,"context_line":"        else:"},{"line_number":78,"context_line":"            total \u003d float(host_state.total_capacity_gb)"},{"line_number":79,"context_line":"            if host_state.thin_provisioning_support:"},{"line_number":80,"context_line":"                volume_size \u003d weight_properties.get(\u0027size\u0027)"},{"line_number":81,"context_line":"                # Calculate virtual free capacity for thin provisioning."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_1938a59f","line":78,"in_reply_to":"da86d52c_13324610","updated":"2015-02-03 05:25:47.000000000","message":"Done","commit_id":"679422057f8a2cabce58caebf74fa08703d8e462"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"e68761573e16b32ab5207aec69aa65f16b2dbd34","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                # Calculate how much free space is left after taking into"},{"line_number":93,"context_line":"                # account the reserved space."},{"line_number":94,"context_line":"                free \u003d free_space - math.floor(total * reserved)"},{"line_number":95,"context_line":"        return free"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_482de445","line":94,"updated":"2015-02-03 06:31:16.000000000","message":"should we also subtract full volume size?","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd3ec975ddc7e6013ded8ef32b89cd719b135b6a","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                # Calculate how much free space is left after taking into"},{"line_number":93,"context_line":"                # account the reserved space."},{"line_number":94,"context_line":"                free \u003d free_space - math.floor(total * reserved)"},{"line_number":95,"context_line":"        return free"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_7e1b2b1b","line":94,"in_reply_to":"da86d52c_482de445","updated":"2015-02-03 16:25:52.000000000","message":"volume size was not subtracted in the original code on the left (line 76 on the left). So I kept the original behavior.","commit_id":"bf220858b30fc778b9b7e2e96e78263a9523a21a"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"6df37831b8075976f80a9de1d062042cb8c682ff","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                volume_size \u003d weight_properties.get(\u0027size\u0027)"},{"line_number":88,"context_line":"                # Calculate virtual free capacity for thin provisioning."},{"line_number":89,"context_line":"                free \u003d (total * host_state.max_over_subscription_ratio"},{"line_number":90,"context_line":"                        - host_state.provisioned_capacity_gb - volume_size)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                # Calculate how much free space is left after taking into"},{"line_number":93,"context_line":"                # account the reserved space."}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_ed390fa5","line":90,"updated":"2015-02-04 09:51:25.000000000","message":"Here we should use free directly, no need to deduct volume_size because every backend will deduct the same among of space for this request, otherwise, you will have to deduct volume_size for the \u0027else\u0027 branch too.  We might need to deduct volume_size when one day we support calculating free capacity honoring dedup/compression feature of backend.","commit_id":"2c1beb61903fb2811afbe546ef7fe0f87478c393"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c0a32d0f469dcf9882eb555ac368f40a6835bd5e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                volume_size \u003d weight_properties.get(\u0027size\u0027)"},{"line_number":88,"context_line":"                # Calculate virtual free capacity for thin provisioning."},{"line_number":89,"context_line":"                free \u003d (total * host_state.max_over_subscription_ratio"},{"line_number":90,"context_line":"                        - host_state.provisioned_capacity_gb - volume_size)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                # Calculate how much free space is left after taking into"},{"line_number":93,"context_line":"                # account the reserved space."}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_466cb508","line":90,"in_reply_to":"da86d52c_ed390fa5","updated":"2015-02-04 14:19:29.000000000","message":"Sure. Done.","commit_id":"2c1beb61903fb2811afbe546ef7fe0f87478c393"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"63969bc34c81287d77138a9ea247a9d69e7e1b53","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if host_state.thin_provisioning_support:"},{"line_number":87,"context_line":"                # Calculate virtual free capacity for thin provisioning."},{"line_number":88,"context_line":"                free \u003d (total * host_state.max_over_subscription_ratio"},{"line_number":89,"context_line":"                        - host_state.provisioned_capacity_gb)"},{"line_number":90,"context_line":"            else:"},{"line_number":91,"context_line":"                # Calculate how much free space is left after taking into"},{"line_number":92,"context_line":"                # account the reserved space."}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_44bca4dc","line":89,"updated":"2015-02-04 17:46:53.000000000","message":"You still have to consider reserved when sorting with virtual free capacity.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd8d92713ec53410983860cdbc646ad65c71fad7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if host_state.thin_provisioning_support:"},{"line_number":87,"context_line":"                # Calculate virtual free capacity for thin provisioning."},{"line_number":88,"context_line":"                free \u003d (total * host_state.max_over_subscription_ratio"},{"line_number":89,"context_line":"                        - host_state.provisioned_capacity_gb)"},{"line_number":90,"context_line":"            else:"},{"line_number":91,"context_line":"                # Calculate how much free space is left after taking into"},{"line_number":92,"context_line":"                # account the reserved space."}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_a1cf0d7e","line":89,"in_reply_to":"da86d52c_44bca4dc","updated":"2015-02-04 19:54:18.000000000","message":"Done","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"}],"cinder/tests/scheduler/fakes.py":[{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                      \u0027thin_provisioning_support\u0027: True,"},{"line_number":84,"context_line":"                      \u0027reserved_percentage\u0027: 5,"},{"line_number":85,"context_line":"                      \u0027timestamp\u0027: None},"},{"line_number":86,"context_line":"        }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class FakeHostState(host_manager.HostState):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_a80856da","line":86,"updated":"2014-12-27 01:41:42.000000000","message":"since this patch also adds thick_provision need to have at least one host with it.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                      \u0027thin_provisioning_support\u0027: True,"},{"line_number":84,"context_line":"                      \u0027reserved_percentage\u0027: 5,"},{"line_number":85,"context_line":"                      \u0027timestamp\u0027: None},"},{"line_number":86,"context_line":"        }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class FakeHostState(host_manager.HostState):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_14917f9a","line":86,"in_reply_to":"3a961159_a80856da","updated":"2014-12-28 06:26:40.000000000","message":"Done","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"625dc48670cc7e835a3535a30b1c334e56d578c8","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                      \u0027max_over_subscription_ratio\u0027: 2.0,"},{"line_number":62,"context_line":"                      \u0027thin_provisioning_support\u0027: False,"},{"line_number":63,"context_line":"                      \u0027thick_provisioning_support\u0027: True,"},{"line_number":64,"context_line":"                      \u0027reserved_percentage\u0027: 0,"},{"line_number":65,"context_line":"                      \u0027volume_backend_name\u0027: \u0027lvm3\u0027,"},{"line_number":66,"context_line":"                      \u0027timestamp\u0027: None},"},{"line_number":67,"context_line":"            \u0027host4\u0027: {\u0027total_capacity_gb\u0027: 2048,"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_c427b410","line":64,"updated":"2015-02-04 17:31:48.000000000","message":"good. we cover reserved \u003d 0 case.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"}],"cinder/tests/scheduler/test_capacity_weigher.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"63969bc34c81287d77138a9ea247a9d69e7e1b53","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    # free \u003d free_space - math.floor(total * reserved)"},{"line_number":57,"context_line":"    # Otherwise, use the following formula:"},{"line_number":58,"context_line":"    # free \u003d (total * host_state.max_over_subscription_ratio"},{"line_number":59,"context_line":"    #         - host_state.provisioned_capacity_gb - volume_size)"},{"line_number":60,"context_line":"    def test_default_of_spreading_first(self):"},{"line_number":61,"context_line":"        hostinfo_list \u003d self._get_all_hosts()"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_e4c83857","line":59,"updated":"2015-02-04 17:46:53.000000000","message":"This must be changed to reflect what it is now in  weigher.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd8d92713ec53410983860cdbc646ad65c71fad7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    # free \u003d free_space - math.floor(total * reserved)"},{"line_number":57,"context_line":"    # Otherwise, use the following formula:"},{"line_number":58,"context_line":"    # free \u003d (total * host_state.max_over_subscription_ratio"},{"line_number":59,"context_line":"    #         - host_state.provisioned_capacity_gb - volume_size)"},{"line_number":60,"context_line":"    def test_default_of_spreading_first(self):"},{"line_number":61,"context_line":"        hostinfo_list \u003d self._get_all_hosts()"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_418f312a","line":59,"in_reply_to":"da86d52c_e4c83857","updated":"2015-02-04 19:54:18.000000000","message":"Done","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"}],"cinder/tests/scheduler/test_host_filters.py":[{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                                    \u0027thick_provisioning_support\u0027: True,"},{"line_number":420,"context_line":"                                    \u0027updated_at\u0027: None,"},{"line_number":421,"context_line":"                                    \u0027service\u0027: service})"},{"line_number":422,"context_line":"        self.assertFalse(filt_cls.host_passes(host, filter_properties))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_e8125e08","line":422,"updated":"2014-12-27 01:41:42.000000000","message":"need to add a test for thick_provisioning, especially of max_used_ratio is used for it also.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                                    \u0027thick_provisioning_support\u0027: True,"},{"line_number":420,"context_line":"                                    \u0027updated_at\u0027: None,"},{"line_number":421,"context_line":"                                    \u0027service\u0027: service})"},{"line_number":422,"context_line":"        self.assertFalse(filt_cls.host_passes(host, filter_properties))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_348e7b7a","line":422,"in_reply_to":"3a961159_e8125e08","updated":"2014-12-28 06:26:40.000000000","message":"Done","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"7d45f56d0d6ba08dadc986e03f85aa223dddb52a","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                                    \u0027thick_provisioning_support\u0027: True,"},{"line_number":454,"context_line":"                                    \u0027updated_at\u0027: None,"},{"line_number":455,"context_line":"                                    \u0027service\u0027: service})"},{"line_number":456,"context_line":"        self.assertFalse(filt_cls.host_passes(host, filter_properties))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_1c7e9a6a","line":456,"updated":"2015-01-05 23:58:01.000000000","message":"add\n\u0027thin_provisioning_support\u0027: True,\n \u0027thick_provisioning_support\u0027: True, \n\ncases with \n\u0027max_used_ratio\u0027: \u003c 1.0\nand  \u003d1.0","commit_id":"4887acbd87a73c88ef5209113aecfbf9b434cc17"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a443585b095b4d57c493f315fb02c8077e74e8c4","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                                    \u0027thick_provisioning_support\u0027: True,"},{"line_number":454,"context_line":"                                    \u0027updated_at\u0027: None,"},{"line_number":455,"context_line":"                                    \u0027service\u0027: service})"},{"line_number":456,"context_line":"        self.assertFalse(filt_cls.host_passes(host, filter_properties))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_77d170fa","line":456,"in_reply_to":"3a961159_1c7e9a6a","updated":"2015-01-06 05:48:10.000000000","message":"Added 4 test cases for \u0027thin_provisioning_support\u0027: True and \u0027thick_provisioning_support\u0027: True:\n\nmax_used_ratio \u003c 1.0 fails\n\nmax_used_ratio \u003c 1.0 passes\n\nmax_used_ratio \u003d 1.0 fails\n\nmax_used_ratio \u003d 1.0 passes","commit_id":"4887acbd87a73c88ef5209113aecfbf9b434cc17"}],"cinder/tests/scheduler/test_provisioned_capacity_weigher.py":[{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"60e4363f3a4793a87d694c26723e103f869f0381","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def _get_weighed_host(self, hosts, weight_properties\u003dNone):"},{"line_number":41,"context_line":"        if weight_properties is None:"},{"line_number":42,"context_line":"            weight_properties \u003d {\u0027size\u0027: 1,"},{"line_number":43,"context_line":"                                 \u0027thin_provisioning_support\u0027: True}"},{"line_number":44,"context_line":"        return self.weight_handler.get_weighed_objects([PCW], hosts,"},{"line_number":45,"context_line":"                                                       weight_properties)[0]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_08f7aad5","line":43,"updated":"2014-12-27 01:41:42.000000000","message":"add tick_provision to FALSE.","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d410649682e53594219326dcfa6a6899a96e7d7d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def _get_weighed_host(self, hosts, weight_properties\u003dNone):"},{"line_number":41,"context_line":"        if weight_properties is None:"},{"line_number":42,"context_line":"            weight_properties \u003d {\u0027size\u0027: 1,"},{"line_number":43,"context_line":"                                 \u0027thin_provisioning_support\u0027: True}"},{"line_number":44,"context_line":"        return self.weight_handler.get_weighed_objects([PCW], hosts,"},{"line_number":45,"context_line":"                                                       weight_properties)[0]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_548b0768","line":43,"in_reply_to":"3a961159_08f7aad5","updated":"2014-12-28 06:26:40.000000000","message":"Done","commit_id":"d92398a8654f0e26e95a0545ef889e96f89a0f9e"},{"author":{"_account_id":11903,"name":"Anthony Lee","email":"anthony.mic.lee@hpe.com","username":"leeantho"},"change_message_id":"9974b020cd57f279bb93b296af4a3da91e7644b3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 eBay Inc."},{"line_number":2,"context_line":"# Copyright (c) 2014 EMC Corporation"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_de6bf41c","line":2,"updated":"2015-01-15 21:28:14.000000000","message":"2015?","commit_id":"4e2e1ac212b865ae8dc75b911bf287189f9e3cf6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48b27e9246ee018e9e2c38cb2889d852e842089b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 eBay Inc."},{"line_number":2,"context_line":"# Copyright (c) 2014 EMC Corporation"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_b4f3a86b","line":2,"in_reply_to":"3a961159_de6bf41c","updated":"2015-01-15 23:44:10.000000000","message":"Done","commit_id":"4e2e1ac212b865ae8dc75b911bf287189f9e3cf6"}],"cinder/volume/driver.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"01026545019ee4bb5d71b884f8c775c5991f7fc6","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                help\u003d\u0027Tell driver to use SSL for connection to backend \u0027"},{"line_number":131,"context_line":"                     \u0027storage if the driver supports it.\u0027),"},{"line_number":132,"context_line":"    cfg.FloatOpt(\u0027max_over_subscription_ratio\u0027,"},{"line_number":133,"context_line":"                 default\u003d1.0,"},{"line_number":134,"context_line":"                 help\u003d\u0027Float representation of the over subscription ratio \u0027"},{"line_number":135,"context_line":"                      \u0027when thin provisioning is involved. Default ratio is \u0027"},{"line_number":136,"context_line":"                      \u00271.0 (meaning provisioned capacity cannot exceed the \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_f12617b9","line":133,"updated":"2015-01-16 04:52:10.000000000","message":"So this in essence disables thing provisioning by default no?  I\u0027d rather not do that as the default; not sure if there\u0027s a good reason to do so that I\u0027m not aware of?\n\nI\u0027d much rather see the default at least 2x, and of course it only matters if the device reports thin support.\n\nAlso, should probably put another example other than 1.0/trivial case in the help message.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"615298099c5508f7517dd6f3ff73075d935bf6c8","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                help\u003d\u0027Tell driver to use SSL for connection to backend \u0027"},{"line_number":131,"context_line":"                     \u0027storage if the driver supports it.\u0027),"},{"line_number":132,"context_line":"    cfg.FloatOpt(\u0027max_over_subscription_ratio\u0027,"},{"line_number":133,"context_line":"                 default\u003d1.0,"},{"line_number":134,"context_line":"                 help\u003d\u0027Float representation of the over subscription ratio \u0027"},{"line_number":135,"context_line":"                      \u0027when thin provisioning is involved. Default ratio is \u0027"},{"line_number":136,"context_line":"                      \u00271.0 (meaning provisioned capacity cannot exceed the \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_8c604336","line":133,"in_reply_to":"3a961159_b4547d22","updated":"2015-01-16 21:37:24.000000000","message":"Done","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f36e9dce7d30ae0f53d98d59dbfd8fa9ef5d47d4","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                help\u003d\u0027Tell driver to use SSL for connection to backend \u0027"},{"line_number":131,"context_line":"                     \u0027storage if the driver supports it.\u0027),"},{"line_number":132,"context_line":"    cfg.FloatOpt(\u0027max_over_subscription_ratio\u0027,"},{"line_number":133,"context_line":"                 default\u003d1.0,"},{"line_number":134,"context_line":"                 help\u003d\u0027Float representation of the over subscription ratio \u0027"},{"line_number":135,"context_line":"                      \u0027when thin provisioning is involved. Default ratio is \u0027"},{"line_number":136,"context_line":"                      \u00271.0 (meaning provisioned capacity cannot exceed the \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_b4547d22","line":133,"in_reply_to":"3a961159_f12617b9","updated":"2015-01-16 06:15:46.000000000","message":"\"1.0\" will disable thin provisioning. So I think it does make sense to set it to at least 2.0.  You are right, it will only take effect if a back end reports it supports thin provisioning.\n\nI\u0027ll add more to the help message.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"01026545019ee4bb5d71b884f8c775c5991f7fc6","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    cfg.FloatOpt(\u0027max_used_ratio\u0027,"},{"line_number":139,"context_line":"                 default\u003d0.95,"},{"line_number":140,"context_line":"                 help\u003d\u0027Float representation of the maximum allowed usage \u0027"},{"line_number":141,"context_line":"                      \u0027(calculated by available_capacity / total_capacity) \u0027"},{"line_number":142,"context_line":"                      \u0027before the backend is no longer considered a valid \u0027"},{"line_number":143,"context_line":"                      \u0027choice by the scheduler.\u0027),"},{"line_number":144,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_f14d3773","line":141,"updated":"2015-01-16 04:52:10.000000000","message":"So this is \"actual\" capacity, not reserved or effective?  Should be sure this is clear in the help as well.\n\nHonestly I don\u0027t think all vendors need to agree on terminology from their perspective, BUT we do need concrete definitions of what they mean in Cinder  and those must be adhered to across the board.  Make sense?","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"615298099c5508f7517dd6f3ff73075d935bf6c8","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    cfg.FloatOpt(\u0027max_used_ratio\u0027,"},{"line_number":139,"context_line":"                 default\u003d0.95,"},{"line_number":140,"context_line":"                 help\u003d\u0027Float representation of the maximum allowed usage \u0027"},{"line_number":141,"context_line":"                      \u0027(calculated by available_capacity / total_capacity) \u0027"},{"line_number":142,"context_line":"                      \u0027before the backend is no longer considered a valid \u0027"},{"line_number":143,"context_line":"                      \u0027choice by the scheduler.\u0027),"},{"line_number":144,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_ac633f3f","line":141,"in_reply_to":"3a961159_0f00deff","updated":"2015-01-16 21:37:24.000000000","message":"Done","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f36e9dce7d30ae0f53d98d59dbfd8fa9ef5d47d4","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    cfg.FloatOpt(\u0027max_used_ratio\u0027,"},{"line_number":139,"context_line":"                 default\u003d0.95,"},{"line_number":140,"context_line":"                 help\u003d\u0027Float representation of the maximum allowed usage \u0027"},{"line_number":141,"context_line":"                      \u0027(calculated by available_capacity / total_capacity) \u0027"},{"line_number":142,"context_line":"                      \u0027before the backend is no longer considered a valid \u0027"},{"line_number":143,"context_line":"                      \u0027choice by the scheduler.\u0027),"},{"line_number":144,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_0f00deff","line":141,"in_reply_to":"3a961159_f14d3773","updated":"2015-01-16 06:15:46.000000000","message":"Sure.  Agree this is not clear.  I\u0027ll clarify that this is \u0027actual\u0027.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"8b53fdbf904b3c7405f38e4f4556afc0afac83db","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                help\u003d\u0027Tell driver to use SSL for connection to backend \u0027"},{"line_number":131,"context_line":"                     \u0027storage if the driver supports it.\u0027),"},{"line_number":132,"context_line":"    cfg.FloatOpt(\u0027max_over_subscription_ratio\u0027,"},{"line_number":133,"context_line":"                 default\u003d2.0,"},{"line_number":134,"context_line":"                 help\u003d\u0027Float representation of the over subscription ratio \u0027"},{"line_number":135,"context_line":"                      \u0027when thin provisioning is involved. Default ratio is \u0027"},{"line_number":136,"context_line":"                      \u00272.0, meaning provisioned capacity can be twice of the \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_59ffaf34","line":133,"updated":"2015-02-02 08:25:12.000000000","message":"I\u0027d suggest setting default value to 1.0 and let driver to overwrite this value to make it safer for legacy driver.","commit_id":"372be939e119632e898f91b70976eadbeda84a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4cea94499ff70febff5ee5b8d342aac5947c8832","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                help\u003d\u0027Tell driver to use SSL for connection to backend \u0027"},{"line_number":131,"context_line":"                     \u0027storage if the driver supports it.\u0027),"},{"line_number":132,"context_line":"    cfg.FloatOpt(\u0027max_over_subscription_ratio\u0027,"},{"line_number":133,"context_line":"                 default\u003d2.0,"},{"line_number":134,"context_line":"                 help\u003d\u0027Float representation of the over subscription ratio \u0027"},{"line_number":135,"context_line":"                      \u0027when thin provisioning is involved. Default ratio is \u0027"},{"line_number":136,"context_line":"                      \u00272.0, meaning provisioned capacity can be twice of the \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_88937da2","line":133,"in_reply_to":"da86d52c_59ffaf34","updated":"2015-02-02 15:49:41.000000000","message":"I initially set it to 1.0, but jgriffith gave me comments to set default to 2.0 because it doesn\u0027t do anything if default is 1.0.  This only take effect if driver supports thin provisioning.\n\nSee his comments in patchset 15:\nhttps://review.openstack.org/#/c/142171/15/cinder/volume/driver.py","commit_id":"372be939e119632e898f91b70976eadbeda84a51"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"625dc48670cc7e835a3535a30b1c334e56d578c8","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"                    pool_name\u003dpool,"},{"line_number":1130,"context_line":"                    total_capacity_gb\u003d0,"},{"line_number":1131,"context_line":"                    free_capacity_gb\u003d0,"},{"line_number":1132,"context_line":"                    provisioned_capacity_gb\u003dNone,"},{"line_number":1133,"context_line":"                    reserved_percentage\u003d100,"},{"line_number":1134,"context_line":"                    QoS_support\u003dFalse"},{"line_number":1135,"context_line":"                ))"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_4f9d9dbb","line":1132,"updated":"2015-02-04 17:31:48.000000000","message":"Why did we changed it? We do math operations on that value.\n0 is a better choice.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd8d92713ec53410983860cdbc646ad65c71fad7","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"                    pool_name\u003dpool,"},{"line_number":1130,"context_line":"                    total_capacity_gb\u003d0,"},{"line_number":1131,"context_line":"                    free_capacity_gb\u003d0,"},{"line_number":1132,"context_line":"                    provisioned_capacity_gb\u003dNone,"},{"line_number":1133,"context_line":"                    reserved_percentage\u003d100,"},{"line_number":1134,"context_line":"                    QoS_support\u003dFalse"},{"line_number":1135,"context_line":"                ))"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_8101296c","line":1132,"in_reply_to":"da86d52c_4f9d9dbb","updated":"2015-02-04 19:54:18.000000000","message":"This was based on the discussion and agreement at the meetup. If provisioned_capacity_gb is None, it will be set to allocated_capacity_gb by default.  If it is default to 0, it remains as 0 and driver which hasn\u0027t started to report this parameter will just get 0.","commit_id":"2aebe4f98aedd6e3caf17812197e7f18ed5cbd08"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"3d7c84e14746e63c9688d59116f3689dc6a4d383","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"                    pool_name\u003dpool,"},{"line_number":1130,"context_line":"                    total_capacity_gb\u003d0,"},{"line_number":1131,"context_line":"                    free_capacity_gb\u003d0,"},{"line_number":1132,"context_line":"                    provisioned_capacity_gb\u003dNone,"},{"line_number":1133,"context_line":"                    reserved_percentage\u003d100,"},{"line_number":1134,"context_line":"                    QoS_support\u003dFalse"},{"line_number":1135,"context_line":"                ))"}],"source_content_type":"text/x-python","patch_set":26,"id":"da86d52c_86ebf611","line":1132,"updated":"2015-02-04 21:55:08.000000000","message":"Suggest to add a comment that this value will not be used in calculations.","commit_id":"22c66857a5195822e986f6401a5a047ac5263fee"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"37cc7e5f6bc471235aa264687931ff087d9918e0","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"                    pool_name\u003dpool,"},{"line_number":1130,"context_line":"                    total_capacity_gb\u003d0,"},{"line_number":1131,"context_line":"                    free_capacity_gb\u003d0,"},{"line_number":1132,"context_line":"                    provisioned_capacity_gb\u003dNone,"},{"line_number":1133,"context_line":"                    reserved_percentage\u003d100,"},{"line_number":1134,"context_line":"                    QoS_support\u003dFalse"},{"line_number":1135,"context_line":"                ))"}],"source_content_type":"text/x-python","patch_set":26,"id":"da86d52c_c2aeb197","line":1132,"in_reply_to":"da86d52c_86ebf611","updated":"2015-02-05 04:27:51.000000000","message":"Done","commit_id":"22c66857a5195822e986f6401a5a047ac5263fee"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"01026545019ee4bb5d71b884f8c775c5991f7fc6","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        total_capacity \u003d 0"},{"line_number":186,"context_line":"        free_capacity \u003d 0"},{"line_number":187,"context_line":"        thin_provision \u003d False"},{"line_number":188,"context_line":"        thick_provision \u003d False"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if self.configuration.lvm_mirrors \u003e 0:"},{"line_number":191,"context_line":"            total_capacity \u003d\\"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_516e0bc9","line":188,"updated":"2015-01-16 04:52:10.000000000","message":"do we need these two?  If \"yes\" then can\u0027t we accomplish this with just \"thin_enabled\", then there\u0027s no need for the thick variable (if not thin_enabled)\n?","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"615298099c5508f7517dd6f3ff73075d935bf6c8","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        total_capacity \u003d 0"},{"line_number":186,"context_line":"        free_capacity \u003d 0"},{"line_number":187,"context_line":"        thin_provision \u003d False"},{"line_number":188,"context_line":"        thick_provision \u003d False"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if self.configuration.lvm_mirrors \u003e 0:"},{"line_number":191,"context_line":"            total_capacity \u003d\\"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_0c02933d","line":188,"in_reply_to":"3a961159_0f27feb6","updated":"2015-01-16 21:37:24.000000000","message":"Done","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f36e9dce7d30ae0f53d98d59dbfd8fa9ef5d47d4","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        total_capacity \u003d 0"},{"line_number":186,"context_line":"        free_capacity \u003d 0"},{"line_number":187,"context_line":"        thin_provision \u003d False"},{"line_number":188,"context_line":"        thick_provision \u003d False"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if self.configuration.lvm_mirrors \u003e 0:"},{"line_number":191,"context_line":"            total_capacity \u003d\\"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_0f27feb6","line":188,"in_reply_to":"3a961159_516e0bc9","updated":"2015-01-16 06:15:46.000000000","message":"Sure, I\u0027ll change to thin_enabled. \n\nVNX supports both thin and thick from the same pool. That\u0027s why I have both here. LVM can only have thin or thick, so it makes sense to change it to thin_enabled and get rid of thick.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"01026545019ee4bb5d71b884f8c775c5991f7fc6","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            provisioned_capacity \u003d round("},{"line_number":207,"context_line":"                float(total_capacity) - float(free_capacity), 2)"},{"line_number":208,"context_line":"            thick_provision \u003d True"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        location_info \u003d \\"},{"line_number":211,"context_line":"            (\u0027LVMVolumeDriver:%(hostname)s:%(vg)s\u0027"},{"line_number":212,"context_line":"             \u0027:%(lvm_type)s:%(lvm_mirrors)s\u0027 %"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_d1fafbb8","line":209,"updated":"2015-01-16 04:52:10.000000000","message":"I wonder if we can agree on simplifying all of these.  IMO it all boils down to:\n  1. allocated\n  2. provisioned\n  3. available-actual\n  4. available-apparant\n\nArguably number 4 can be calculated, but some backends do more than just thin (compression, dedupe....) so it might be good to have an option to report it however the backend does it\u0027s calculations.\n\nallocated and provisioned are the important ones here IMO.\n\nThere\u0027s obviously a lot more info that can be pulled in but I think just agreeing on a foundation to start would be good.  It would also be good to introduce those in another patch (whether this work becomes a dep or it\u0027s just \"seperate\" doesn\u0027t matter to me).","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"615298099c5508f7517dd6f3ff73075d935bf6c8","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            provisioned_capacity \u003d round("},{"line_number":207,"context_line":"                float(total_capacity) - float(free_capacity), 2)"},{"line_number":208,"context_line":"            thick_provision \u003d True"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        location_info \u003d \\"},{"line_number":211,"context_line":"            (\u0027LVMVolumeDriver:%(hostname)s:%(vg)s\u0027"},{"line_number":212,"context_line":"             \u0027:%(lvm_type)s:%(lvm_mirrors)s\u0027 %"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_ecb5477d","line":209,"in_reply_to":"3a961159_4fc74698","updated":"2015-01-16 21:37:24.000000000","message":"Moved \"provisioned_capacity\" to a different patch.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f36e9dce7d30ae0f53d98d59dbfd8fa9ef5d47d4","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            provisioned_capacity \u003d round("},{"line_number":207,"context_line":"                float(total_capacity) - float(free_capacity), 2)"},{"line_number":208,"context_line":"            thick_provision \u003d True"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        location_info \u003d \\"},{"line_number":211,"context_line":"            (\u0027LVMVolumeDriver:%(hostname)s:%(vg)s\u0027"},{"line_number":212,"context_line":"             \u0027:%(lvm_type)s:%(lvm_mirrors)s\u0027 %"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_4fc74698","line":209,"in_reply_to":"3a961159_d1fafbb8","updated":"2015-01-16 06:15:46.000000000","message":"Is \"allocated\" the total capacity of volumes created by Cinder? I thought it will be retrieved from Cinder DB based on our discussion in the last meeting?\n\nI think \"available-actual\" and \"available-apparent\" are more clear than the terms we are using now. So I can certainly change them. Probably better to introduce them in another patch as we\u0027ll also be removing free_capacity. I think we still need total_capacity. I\u0027m using it for calculations in the scheduler.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"01026545019ee4bb5d71b884f8c775c5991f7fc6","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            reserved_percentage\u003dself.configuration.reserved_percentage,"},{"line_number":226,"context_line":"            location_info\u003dlocation_info,"},{"line_number":227,"context_line":"            QoS_support\u003dFalse,"},{"line_number":228,"context_line":"            provisioned_capacity_gb\u003dprovisioned_capacity,"},{"line_number":229,"context_line":"            max_over_subscription_ratio\u003dCONF.max_over_subscription_ratio,"},{"line_number":230,"context_line":"            max_used_ratio\u003dCONF.max_used_ratio,"},{"line_number":231,"context_line":"            thin_provisioning_support\u003dthin_provision,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_51a52b01","line":228,"updated":"2015-01-16 04:52:10.000000000","message":"Hooray for proper terminology :)\n\nDon\u0027t know if we need to keep dragging the gb name suffix around but not an issue.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f36e9dce7d30ae0f53d98d59dbfd8fa9ef5d47d4","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            reserved_percentage\u003dself.configuration.reserved_percentage,"},{"line_number":226,"context_line":"            location_info\u003dlocation_info,"},{"line_number":227,"context_line":"            QoS_support\u003dFalse,"},{"line_number":228,"context_line":"            provisioned_capacity_gb\u003dprovisioned_capacity,"},{"line_number":229,"context_line":"            max_over_subscription_ratio\u003dCONF.max_over_subscription_ratio,"},{"line_number":230,"context_line":"            max_used_ratio\u003dCONF.max_used_ratio,"},{"line_number":231,"context_line":"            thin_provisioning_support\u003dthin_provision,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_6f57a201","line":228,"in_reply_to":"3a961159_51a52b01","updated":"2015-01-16 06:15:46.000000000","message":"I\u0027m trying to follow the naming convention here:).  I\u0027m okay either way.","commit_id":"a16aa6e0108de0d16b44e8929176ca3f0b732339"}]}
