)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bc666e3bf894aee46961629b6a5e2ef919c886f9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Michael Rowden \u003cmrrowden@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-02 13:55:15 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Correcting thin provisioning for LVM"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, if thin provisioning is enabled and max_over_subscription_ratio is"},{"line_number":10,"context_line":"set to 1, the space that is provisioned but not yet consumed will not be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a5ae5dd_89a03df6","line":7,"updated":"2016-02-03 13:32:13.000000000","message":"You are making changes in the scheduler.  This affects all drivers, not just the LVM driver.  This commit message needs to be fixed.","commit_id":"fcd5e156ba53ab483f7937994521e38095a43aa2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"295d879ea1b53d5509bab8211bfd4feb817c103e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Michael Rowden \u003cmrrowden@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-02 13:55:15 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Correcting thin provisioning for LVM"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, if thin provisioning is enabled and max_over_subscription_ratio is"},{"line_number":10,"context_line":"set to 1, the space that is provisioned but not yet consumed will not be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a5ae5dd_8fd34238","line":7,"in_reply_to":"5a5ae5dd_89a03df6","updated":"2016-02-03 23:12:46.000000000","message":"+1","commit_id":"fcd5e156ba53ab483f7937994521e38095a43aa2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"295d879ea1b53d5509bab8211bfd4feb817c103e","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-02-02 13:55:15 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Correcting thin provisioning for LVM"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, if thin provisioning is enabled and max_over_subscription_ratio is"},{"line_number":10,"context_line":"set to 1, the space that is provisioned but not yet consumed will not be"},{"line_number":11,"context_line":"considered, which is incorrect behavior. Changing the conditional statement to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a5ae5dd_abff1b00","line":8,"updated":"2016-02-03 23:12:46.000000000","message":"We typically keep git commit lines \u003c72 characters","commit_id":"fcd5e156ba53ab483f7937994521e38095a43aa2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"295d879ea1b53d5509bab8211bfd4feb817c103e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Correcting thin provisioning for LVM"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, if thin provisioning is enabled and max_over_subscription_ratio is"},{"line_number":10,"context_line":"set to 1, the space that is provisioned but not yet consumed will not be"},{"line_number":11,"context_line":"considered, which is incorrect behavior. Changing the conditional statement to"},{"line_number":12,"context_line":"now account for a subscription_ratio to be 1 will now execute"},{"line_number":13,"context_line":"thin-provisioning-aware code, as needed. Also provided a unit test case to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a5ae5dd_0ff99280","line":10,"updated":"2016-02-03 23:12:46.000000000","message":"Another (possibly clearer) way of saying this is:\n\nCurrently, if thin provisioning is enabled and max_over_subscription_ratio \u003d 1, the code will not go through the thin-provisioning aware code, thereby ignoring any limits from max_over_subscription_ratio.  The intended behavior of setting max_over_subscription_ratio \u003d 1 is to disable over-provisioning.","commit_id":"fcd5e156ba53ab483f7937994521e38095a43aa2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1e237967f1c02e3dd9a6678859c9ef2d722d9228","unresolved":false,"context_lines":[{"line_number":10,"context_line":"max_over_subscription_ratio \u003c\u003d 1, the code will not go through the"},{"line_number":11,"context_line":"thin-provisioning aware code, thereby ignoring any limits from"},{"line_number":12,"context_line":"max_over_subscription_ratio. The intended behavior of setting"},{"line_number":13,"context_line":"max_over_subscription_ratio \u003d 1 is to disable over-provisioning."},{"line_number":14,"context_line":"Moved max_over_subscription_ratio check to driver.py to not"},{"line_number":15,"context_line":"skip over thin provisioning aware code in capacity_filter.py."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a57f1b5_6e4fa36b","line":13,"updated":"2016-02-11 18:22:38.000000000","message":"More specifically, the validation of max_over_subscription_ratio, right?","commit_id":"e53229b27a8d599ee74968c334988d41ca0fff2a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e9973e02b97ce1bdf9e410f820259da3a45c7549","unresolved":false,"context_lines":[{"line_number":12,"context_line":"max_over_subscription_ratio. The intended behavior of setting"},{"line_number":13,"context_line":"max_over_subscription_ratio \u003d 1 is to disable over-provisioning."},{"line_number":14,"context_line":"Moved max_over_subscription_ratio validation to driver.py to not"},{"line_number":15,"context_line":"skip over thin provisioning aware code in capacity_filter.py."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I0ac265905e0613691238e7fcd60853c838118fcc"},{"line_number":18,"context_line":"Closes-Bug: #1537162"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a57f1b5_3371e4a8","line":15,"updated":"2016-02-12 14:18:05.000000000","message":"We still need the validation in capacity_filter.py.","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"}],"cinder/scheduler/filters/capacity_filter.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bc666e3bf894aee46961629b6a5e2ef919c886f9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # provisioned capacity over total capacity has exceeded over"},{"line_number":87,"context_line":"        # subscription ratio."},{"line_number":88,"context_line":"        if (host_state.thin_provisioning_support and"},{"line_number":89,"context_line":"                host_state.max_over_subscription_ratio \u003e\u003d 1):"},{"line_number":90,"context_line":"            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +"},{"line_number":91,"context_line":"                                  volume_size) / total)"},{"line_number":92,"context_line":"            if provisioned_ratio \u003e host_state.max_over_subscription_ratio:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_09944d89","line":89,"updated":"2016-02-03 13:32:13.000000000","message":"This equal sign was removed by me to address a review comment that asked me to remove it a while back.  We have to give some thorough thinking on making this change.  Otherwise, we\u0027ll have patches keep changing it back and forth.","commit_id":"fcd5e156ba53ab483f7937994521e38095a43aa2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3cbbd4c00cf1b22a5c7cf1635135c5387d8d254e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # provisioned capacity over total capacity has exceeded over"},{"line_number":87,"context_line":"        # subscription ratio."},{"line_number":88,"context_line":"        if (host_state.thin_provisioning_support and"},{"line_number":89,"context_line":"                host_state.max_over_subscription_ratio \u003e\u003d 1):"},{"line_number":90,"context_line":"            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +"},{"line_number":91,"context_line":"                                  volume_size) / total)"},{"line_number":92,"context_line":"            if provisioned_ratio \u003e host_state.max_over_subscription_ratio:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_23ccc288","line":89,"in_reply_to":"5a5ae5dd_09944d89","updated":"2016-02-03 15:19:58.000000000","message":"It would be good to understand the original comment and reasoning for that, because this change does seem to make sense.","commit_id":"fcd5e156ba53ab483f7937994521e38095a43aa2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"295d879ea1b53d5509bab8211bfd4feb817c103e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # provisioned capacity over total capacity has exceeded over"},{"line_number":87,"context_line":"        # subscription ratio."},{"line_number":88,"context_line":"        if (host_state.thin_provisioning_support and"},{"line_number":89,"context_line":"                host_state.max_over_subscription_ratio \u003e\u003d 1):"},{"line_number":90,"context_line":"            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +"},{"line_number":91,"context_line":"                                  volume_size) / total)"},{"line_number":92,"context_line":"            if provisioned_ratio \u003e host_state.max_over_subscription_ratio:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_4f5a2a85","line":89,"in_reply_to":"5a5ae5dd_23ccc288","updated":"2016-02-03 23:12:46.000000000","message":"I\u0027m not sure we should need this \"host_state.max_over_subscription_ratio \u003e\u003d 1\"  check.  It seems like we should validate the max_over_subscription_ratio \u003e\u003d 1 as part of the config setting.  Any time we\u0027re using thin_provisioning_support, we should go into the thin provisioning aware code.","commit_id":"fcd5e156ba53ab483f7937994521e38095a43aa2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e9973e02b97ce1bdf9e410f820259da3a45c7549","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # thin_provisioning_support is True. Check if the ratio of"},{"line_number":86,"context_line":"        # provisioned capacity over total capacity has exceeded over"},{"line_number":87,"context_line":"        # subscription ratio."},{"line_number":88,"context_line":"        if (host_state.thin_provisioning_support):"},{"line_number":89,"context_line":"            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +"},{"line_number":90,"context_line":"                                  volume_size) / total)"},{"line_number":91,"context_line":"            if provisioned_ratio \u003e host_state.max_over_subscription_ratio:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_93ef78e8","line":88,"updated":"2016-02-12 14:18:05.000000000","message":"I suggest to add \"host_state.max_over_subscription_ratio \u003e\u003d 1\" back here and return false if the ratio is \u003c 1 to ensure the valid ratio is \u003e\u003d1.\n\nif (host_state.thin_provisioning_support and\n        host_state.max_over_subscription_ratio \u003e\u003d 1):\n    provisioned_ratio \u003d ……\n    ………\n\nelif host_state.thin_provisioning_support:\n    # Log a message max_over_subscription_ratio should be \u003e\u003d 1.\n    return False","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4eb75206057ec8a2225f533d213dd9132fee84a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # thin_provisioning_support is True. Check if the ratio of"},{"line_number":86,"context_line":"        # provisioned capacity over total capacity has exceeded over"},{"line_number":87,"context_line":"        # subscription ratio."},{"line_number":88,"context_line":"        if (host_state.thin_provisioning_support):"},{"line_number":89,"context_line":"            provisioned_ratio \u003d ((host_state.provisioned_capacity_gb +"},{"line_number":90,"context_line":"                                  volume_size) / total)"},{"line_number":91,"context_line":"            if provisioned_ratio \u003e host_state.max_over_subscription_ratio:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_5f3a57e8","line":88,"in_reply_to":"3a57f1b5_93ef78e8","updated":"2016-02-12 18:06:38.000000000","message":"Actually this check is required in the scheduler to ensure this ratio\u003e\u003d1.  The check in driver.py on max_over_subscription_ratio is only for the config option in cinder.conf.  However, a driver can report some value other than conf.max_over_subscription_ratio.\n\nNote: host_state.max_over_subscription_ratio may not be equal to conf.max_over_subscription_ratio in cinder.conf.","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"ae28a86108f4f3a298c2a9fa0f2eb1a7562b53ba","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                adjusted_free_virtual \u003d ("},{"line_number":111,"context_line":"                    free * host_state.max_over_subscription_ratio)"},{"line_number":112,"context_line":"                return adjusted_free_virtual \u003e\u003d volume_size"},{"line_number":113,"context_line":"        elif host_state.thin_provisioning_support:"},{"line_number":114,"context_line":"            LOG.warning(_LW(\"The max over subscription ratio should be \""},{"line_number":115,"context_line":"                            \"greater than or equal to 1.\"))"},{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if free \u003c volume_size:"},{"line_number":119,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7af24918_59f5a4c9","line":116,"range":{"start_line":113,"start_character":7,"end_line":116,"end_character":24},"updated":"2016-03-04 21:14:17.000000000","message":"I would prefer to not return false here and default to the \u0027thick\u0027 calculation below, but if we are going to just return false IMO this message should be more clear that the scheduler is filtering out this backend *only* because the over subscription ratio is \u003c1.","commit_id":"40f37fda35c24e439d207906460fb92cd026326d"},{"author":{"_account_id":19670,"name":"Michael Rowden","email":"mrrowden@us.ibm.com","username":"mrrowden"},"change_message_id":"3f134c4dd4ec516e5c74c6e6ad8b26684376b41b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                adjusted_free_virtual \u003d ("},{"line_number":111,"context_line":"                    free * host_state.max_over_subscription_ratio)"},{"line_number":112,"context_line":"                return adjusted_free_virtual \u003e\u003d volume_size"},{"line_number":113,"context_line":"        elif host_state.thin_provisioning_support:"},{"line_number":114,"context_line":"            LOG.warning(_LW(\"The max over subscription ratio should be \""},{"line_number":115,"context_line":"                            \"greater than or equal to 1.\"))"},{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if free \u003c volume_size:"},{"line_number":119,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation \""}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_7dae4186","line":116,"range":{"start_line":113,"start_character":7,"end_line":116,"end_character":24},"in_reply_to":"5aef4532_47baab24","updated":"2016-03-08 15:47:28.000000000","message":"Going to submit another patch with warning message ratio being a float instead of a string, thanks for the catch.","commit_id":"40f37fda35c24e439d207906460fb92cd026326d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9cb0790b9ec0d2357db93995ad5904c458d0aedc","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                adjusted_free_virtual \u003d ("},{"line_number":111,"context_line":"                    free * host_state.max_over_subscription_ratio)"},{"line_number":112,"context_line":"                return adjusted_free_virtual \u003e\u003d volume_size"},{"line_number":113,"context_line":"        elif host_state.thin_provisioning_support:"},{"line_number":114,"context_line":"            LOG.warning(_LW(\"The max over subscription ratio should be \""},{"line_number":115,"context_line":"                            \"greater than or equal to 1.\"))"},{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if free \u003c volume_size:"},{"line_number":119,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation \""}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_692b2795","line":116,"range":{"start_line":113,"start_character":7,"end_line":116,"end_character":24},"in_reply_to":"5aef4532_47baab24","updated":"2016-03-08 14:24:07.000000000","message":"Just realized that you\u0027ve already posted another patch set with the updated message.  So just ignore this comment.","commit_id":"40f37fda35c24e439d207906460fb92cd026326d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d3052405bc5648980cf9bba517b84d38ca073df7","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                adjusted_free_virtual \u003d ("},{"line_number":111,"context_line":"                    free * host_state.max_over_subscription_ratio)"},{"line_number":112,"context_line":"                return adjusted_free_virtual \u003e\u003d volume_size"},{"line_number":113,"context_line":"        elif host_state.thin_provisioning_support:"},{"line_number":114,"context_line":"            LOG.warning(_LW(\"The max over subscription ratio should be \""},{"line_number":115,"context_line":"                            \"greater than or equal to 1.\"))"},{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if free \u003c volume_size:"},{"line_number":119,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation \""}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_47baab24","line":116,"range":{"start_line":113,"start_character":7,"end_line":116,"end_character":24},"in_reply_to":"5aef4532_5eb608dd","updated":"2016-03-08 05:08:43.000000000","message":"Your message was cut off.\n\nHow about this?\n\nFiltering out host %(host)s with an invalid max over subscription ratio of %(ratio).2f.  Valid ratio should be greater than or equal to 1.","commit_id":"40f37fda35c24e439d207906460fb92cd026326d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f8ad625a21b606a2681caa0a35f1c353d1872108","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                adjusted_free_virtual \u003d ("},{"line_number":111,"context_line":"                    free * host_state.max_over_subscription_ratio)"},{"line_number":112,"context_line":"                return adjusted_free_virtual \u003e\u003d volume_size"},{"line_number":113,"context_line":"        elif host_state.thin_provisioning_support:"},{"line_number":114,"context_line":"            LOG.warning(_LW(\"The max over subscription ratio should be \""},{"line_number":115,"context_line":"                            \"greater than or equal to 1.\"))"},{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if free \u003c volume_size:"},{"line_number":119,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7af24918_b4766d04","line":116,"range":{"start_line":113,"start_character":7,"end_line":116,"end_character":24},"in_reply_to":"7af24918_59f5a4c9","updated":"2016-03-04 22:03:41.000000000","message":"I agree the message should be more clear, but we should return False here.  If a backend reports thin_provisioning_support is True, we should look at whether this backend is fit for thin provisioning and report False if the ratio is not set properly.","commit_id":"40f37fda35c24e439d207906460fb92cd026326d"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"6d39d495c16aec5a72c3b897c41f75fa4af7e79f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                adjusted_free_virtual \u003d ("},{"line_number":111,"context_line":"                    free * host_state.max_over_subscription_ratio)"},{"line_number":112,"context_line":"                return adjusted_free_virtual \u003e\u003d volume_size"},{"line_number":113,"context_line":"        elif host_state.thin_provisioning_support:"},{"line_number":114,"context_line":"            LOG.warning(_LW(\"The max over subscription ratio should be \""},{"line_number":115,"context_line":"                            \"greater than or equal to 1.\"))"},{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if free \u003c volume_size:"},{"line_number":119,"context_line":"            LOG.warning(_LW(\"Insufficient free space for volume creation \""}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_5eb608dd","line":116,"range":{"start_line":113,"start_character":7,"end_line":116,"end_character":24},"in_reply_to":"7af24918_b4766d04","updated":"2016-03-07 20:45:58.000000000","message":"For the message, do you think something like the would be clearer?\n\n \u0027Filtering out host \"%(host)s\" with an invalid max over subscription ratio  of \"%(oversub_ratio)s\". The ratio should be greater than or equal to 1.\u0027  .....","commit_id":"40f37fda35c24e439d207906460fb92cd026326d"}],"cinder/volume/driver.py":[{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"b0c27b2cd121c2ab4b596d6d9051045a082ba36e","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        self._initialized \u003d False"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # Verify that max_over_sub_ratio is at least 1.0"},{"line_number":344,"context_line":"        max_over_sub_ratio \u003d ((self.configuration and"},{"line_number":345,"context_line":"                               self.configuration.safe_get"},{"line_number":346,"context_line":"                               (\u0027max_over_subscription_ratio\u0027)) or"},{"line_number":347,"context_line":"                              CONF.max_over_subscription_ratio)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_4dde8a40","line":344,"range":{"start_line":344,"start_character":31,"end_line":344,"end_character":53},"updated":"2016-02-11 11:00:53.000000000","message":"Is this necessary in any case?\nWhy not just the code below?\n\n(self.configuration.safe_get                               (\u0027max_over_subscription_ratio\u0027) or                          CONF.max_over_subscription_ratio)","commit_id":"4a359f68ce05020af69eab1acabc93f1e91556ab"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"b0c27b2cd121c2ab4b596d6d9051045a082ba36e","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        # type check needed since ratio is mocked out and has to be a float"},{"line_number":350,"context_line":"        # value whenever used because max_over ratio is a FloatOpt"},{"line_number":351,"context_line":"        if max_over_sub_ratio and type(max_over_sub_ratio) is float\\"},{"line_number":352,"context_line":"                and max_over_sub_ratio \u003c 1.0:"},{"line_number":353,"context_line":"            raise exception.InvalidConfigurationValue("},{"line_number":354,"context_line":"                value\u003dmax_over_sub_ratio,"},{"line_number":355,"context_line":"                option\u003d\"max_over_subscription_ratio\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_cdf35a9d","line":352,"range":{"start_line":351,"start_character":11,"end_line":352,"end_character":45},"updated":"2016-02-11 11:00:53.000000000","message":"It is preferred to wrap long lines in parentheses and not a backslash for line continuation","commit_id":"4a359f68ce05020af69eab1acabc93f1e91556ab"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1e237967f1c02e3dd9a6678859c9ef2d722d9228","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        # set True by manager after successful check_for_setup"},{"line_number":341,"context_line":"        self._initialized \u003d False"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # Verify that max_over_sub_ratio is at least 1.0"},{"line_number":344,"context_line":"        max_over_sub_ratio \u003d (self.configuration.safe_get"},{"line_number":345,"context_line":"                              (\u0027max_over_subscription_ratio\u0027))"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_cee2572f","line":343,"updated":"2016-02-11 18:22:38.000000000","message":"Would recommend doing the line wrap of this like:\n\nmax_over_sub_ratio \u003d self.configuration.safe_get(\n    \u0027max_over_subscription_ratio\u0027)\n\nThat way we don\u0027t need the outer parens","commit_id":"e53229b27a8d599ee74968c334988d41ca0fff2a"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1e237967f1c02e3dd9a6678859c9ef2d722d9228","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        max_over_sub_ratio \u003d (self.configuration.safe_get"},{"line_number":345,"context_line":"                              (\u0027max_over_subscription_ratio\u0027))"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        # type check needed since ratio is mocked out and has to be a float"},{"line_number":348,"context_line":"        # value whenever used because max_over ratio is a FloatOpt"},{"line_number":349,"context_line":"        if (max_over_sub_ratio and type(max_over_sub_ratio) is float"},{"line_number":350,"context_line":"                and max_over_sub_ratio \u003c 1.0):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_4e38a73d","line":347,"updated":"2016-02-11 18:22:38.000000000","message":"I may go for something closed to a....\n\n\"mocked out in test cases, and py34 will fail to do a mock.Mock() \u003c 1.0 check.  Whenever not mocked, the config must be a float since it\u0027s a FloatOpt\"","commit_id":"e53229b27a8d599ee74968c334988d41ca0fff2a"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1e237967f1c02e3dd9a6678859c9ef2d722d9228","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                              (\u0027max_over_subscription_ratio\u0027))"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        # type check needed since ratio is mocked out and has to be a float"},{"line_number":348,"context_line":"        # value whenever used because max_over ratio is a FloatOpt"},{"line_number":349,"context_line":"        if (max_over_sub_ratio and type(max_over_sub_ratio) is float"},{"line_number":350,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":351,"context_line":"            raise exception.InvalidConfigurationValue("}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_ee4153aa","line":348,"updated":"2016-02-11 18:22:38.000000000","message":"would use isinstance(value, float)","commit_id":"e53229b27a8d599ee74968c334988d41ca0fff2a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"91b57629a9bba547341084485d05d5be7782e3ec","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                      \u0027means provisioned capacity can be 10.5 times of the \u0027"},{"line_number":166,"context_line":"                      \u0027total physical capacity. A ratio of 1.0 means \u0027"},{"line_number":167,"context_line":"                      \u0027provisioned capacity cannot exceed the total physical \u0027"},{"line_number":168,"context_line":"                      \u0027capacity. The ratio has to be a minumum of 1.0.\u0027),"},{"line_number":169,"context_line":"    cfg.StrOpt(\u0027scst_target_iqn_name\u0027,"},{"line_number":170,"context_line":"               help\u003d\u0027Certain ISCSI targets have predefined target names, \u0027"},{"line_number":171,"context_line":"                    \u0027SCST target driver uses this name.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_17e1499a","line":168,"range":{"start_line":168,"start_character":52,"end_line":168,"end_character":69},"updated":"2016-02-12 07:21:11.000000000","message":"\u003e 0","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"9eb6c0e10967726963f10c6b3b728430102a9d9e","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        # set True by manager after successful check_for_setup"},{"line_number":341,"context_line":"        self._initialized \u003d False"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # Verify that max_over_sub_ratio is at least 1.0"},{"line_number":344,"context_line":"        max_over_sub_ratio \u003d None"},{"line_number":345,"context_line":"        if self.configuration:"},{"line_number":346,"context_line":"            self.configuration.safe_get(\u0027max_over_subscription_ratio\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_41e06329","line":343,"updated":"2016-02-12 05:59:01.000000000","message":"Just to play devils advocate for a minute... why do we even care if its at least 1.0? We allow for lower values in the scheduler (with this change) so whats the point of enforcing this on the config option?","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"91b57629a9bba547341084485d05d5be7782e3ec","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        # set True by manager after successful check_for_setup"},{"line_number":341,"context_line":"        self._initialized \u003d False"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # Verify that max_over_sub_ratio is at least 1.0"},{"line_number":344,"context_line":"        max_over_sub_ratio \u003d None"},{"line_number":345,"context_line":"        if self.configuration:"},{"line_number":346,"context_line":"            self.configuration.safe_get(\u0027max_over_subscription_ratio\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_f7fa6d42","line":343,"in_reply_to":"3a57f1b5_41e06329","updated":"2016-02-12 07:21:11.000000000","message":"Done correctly anything \u003e0 should work.","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"9eb6c0e10967726963f10c6b3b728430102a9d9e","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        # Verify that max_over_sub_ratio is at least 1.0"},{"line_number":344,"context_line":"        max_over_sub_ratio \u003d None"},{"line_number":345,"context_line":"        if self.configuration:"},{"line_number":346,"context_line":"            self.configuration.safe_get(\u0027max_over_subscription_ratio\u0027)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        # mocked out in test cases, and py34 will fail to do a"},{"line_number":349,"context_line":"        # mock.Mock() \u003c 1.0 check. Whenever not mocked, the config must"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_26545d1f","line":346,"updated":"2016-02-12 05:59:01.000000000","message":"need to assign to max_over_sub_ratio?","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"91b57629a9bba547341084485d05d5be7782e3ec","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        # Verify that max_over_sub_ratio is at least 1.0"},{"line_number":344,"context_line":"        max_over_sub_ratio \u003d None"},{"line_number":345,"context_line":"        if self.configuration:"},{"line_number":346,"context_line":"            self.configuration.safe_get(\u0027max_over_subscription_ratio\u0027)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        # mocked out in test cases, and py34 will fail to do a"},{"line_number":349,"context_line":"        # mock.Mock() \u003c 1.0 check. Whenever not mocked, the config must"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_178f09cd","line":346,"in_reply_to":"3a57f1b5_26545d1f","updated":"2016-02-12 07:21:11.000000000","message":"+1","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"9eb6c0e10967726963f10c6b3b728430102a9d9e","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        if self.configuration:"},{"line_number":346,"context_line":"            self.configuration.safe_get(\u0027max_over_subscription_ratio\u0027)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        # mocked out in test cases, and py34 will fail to do a"},{"line_number":349,"context_line":"        # mock.Mock() \u003c 1.0 check. Whenever not mocked, the config must"},{"line_number":350,"context_line":"        # be a float since it\u0027s a FloatOpt"},{"line_number":351,"context_line":"        if (max_over_sub_ratio and isinstance(max_over_sub_ratio, float)"},{"line_number":352,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":353,"context_line":"            raise exception.InvalidConfigurationValue("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_460f1937","line":350,"range":{"start_line":348,"start_character":8,"end_line":350,"end_character":42},"updated":"2016-02-12 05:59:01.000000000","message":"This comment is kind of confusing... but it sounds like there are some things here that need to be specially handled in the test case? Please move this comment to the test code.\n\nI think you can also skip the isinstance check... like you said it will always be a float, I think its safe to assume the config lib is doing the right thing. All we should check for is that it is \u003e\u003d 1.0.","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"91b57629a9bba547341084485d05d5be7782e3ec","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":353,"context_line":"            raise exception.InvalidConfigurationValue("},{"line_number":354,"context_line":"                value\u003dmax_over_sub_ratio,"},{"line_number":355,"context_line":"                option\u003d\"max_over_subscription_ratio\")"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def _is_non_recoverable(self, err, non_recoverable_list):"},{"line_number":358,"context_line":"        for item in non_recoverable_list:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_b765d51e","line":355,"updated":"2016-02-12 07:21:11.000000000","message":"This should be testable. Current code has max_over_sub_ratio\u003dNone (not reachable).  So when that is fixed this should be testable.","commit_id":"04f1b3ff54e89588a5042d6bbfae23900bd52001"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e50796a725db99fac4ec9f2e398ae98fba814fc5","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        # mocked out in test cases, and py34 will fail to do a"},{"line_number":350,"context_line":"        # mock.Mock() \u003c 1.0 check. Whenever not mocked, the config must"},{"line_number":351,"context_line":"        # be a float since it\u0027s a FloatOpt"},{"line_number":352,"context_line":"        if (max_over_sub_ratio and isinstance(max_over_sub_ratio, float)"},{"line_number":353,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":354,"context_line":"            raise exception.InvalidConfigurationValue("}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_11376ab1","line":351,"updated":"2016-02-25 21:27:44.000000000","message":"This is a FloatOpt so you should just initialize it to 1.0 here, and not test whether it is a float.  It will either be 1.0, or the value that comes from config.\n\nAdditionally, comments about mock etc should really be in the tests and not in driver.py.","commit_id":"b02b752ce4c9f27ee95ff7f01ea0ee618f284b10"},{"author":{"_account_id":19670,"name":"Michael Rowden","email":"mrrowden@us.ibm.com","username":"mrrowden"},"change_message_id":"3af77b0c83995ff25aa8e62f6b84a91d7432ad16","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        # mocked out in test cases, and py34 will fail to do a"},{"line_number":350,"context_line":"        # mock.Mock() \u003c 1.0 check. Whenever not mocked, the config must"},{"line_number":351,"context_line":"        # be a float since it\u0027s a FloatOpt"},{"line_number":352,"context_line":"        if (max_over_sub_ratio and isinstance(max_over_sub_ratio, float)"},{"line_number":353,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":354,"context_line":"            raise exception.InvalidConfigurationValue("}],"source_content_type":"text/x-python","patch_set":7,"id":"7af24918_d945c2b3","line":351,"in_reply_to":"9aed3d3a_11376ab1","updated":"2016-03-02 21:09:34.000000000","message":"Previously tried to set the default value in test.py via CONF.set_default but multiple driver test cases mock out the self.configuration object which leads to configuration.safe_get being mocked out and in turn, overriding the given value.\n\nFor example, in test_coho.py ( https://github.com/openstack/cinder/blob/93ab3907eb421699ec89c0b33e50e5ef3e4f7fe6/cinder/tests/unit/test_coho.py#L91 ) it is returning a mock instead of a float, which fails the comparison in py34.\n\nAnother alternative is putting the try except case like in the safe_get function has or changing the multiple driver test cases which leads to changing a lot of other people\u0027s code.","commit_id":"b02b752ce4c9f27ee95ff7f01ea0ee618f284b10"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"63a2a3ff19752e51a6b4d732bb86464ff217e3c9","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                      \u0027means provisioned capacity can be 10.5 times of the \u0027"},{"line_number":166,"context_line":"                      \u0027total physical capacity. A ratio of 1.0 means \u0027"},{"line_number":167,"context_line":"                      \u0027provisioned capacity cannot exceed the total physical \u0027"},{"line_number":168,"context_line":"                      \u0027capacity. The ratio has to be a minumum of 1.0.\u0027),"},{"line_number":169,"context_line":"    cfg.StrOpt(\u0027scst_target_iqn_name\u0027,"},{"line_number":170,"context_line":"               help\u003d\u0027Certain ISCSI targets have predefined target names, \u0027"},{"line_number":171,"context_line":"                    \u0027SCST target driver uses this name.\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_6d057e0f","line":168,"updated":"2016-03-03 19:47:03.000000000","message":"\"minimum\" *","commit_id":"d00b10350f7b5bbdceb1297deaa3d6876f38dc65"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e5f59aa3c420396b888bba5ca1be966a994cdfff","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":349,"context_line":"            raise exception.InvalidConfigurationValue("},{"line_number":350,"context_line":"                value\u003dmax_over_sub_ratio,"},{"line_number":351,"context_line":"                option\u003d\"max_over_subscription_ratio\")"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def _is_non_recoverable(self, err, non_recoverable_list):"},{"line_number":354,"context_line":"        for item in non_recoverable_list:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7af24918_6de1cf29","line":351,"updated":"2016-03-04 15:00:14.000000000","message":"So what happens for existing deployments that already had this set to \u003c 1.0?\n\nThis kind of change is supposed to come with a transition/deprecation period with a warning rather than just failing.","commit_id":"8927107de6a9f4bb8d1acd5c915974f746825810"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"fe81445c8c24e7e2189a593b8ff1e0cbc1466004","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":349,"context_line":"            raise exception.InvalidConfigurationValue("},{"line_number":350,"context_line":"                value\u003dmax_over_sub_ratio,"},{"line_number":351,"context_line":"                option\u003d\"max_over_subscription_ratio\")"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def _is_non_recoverable(self, err, non_recoverable_list):"},{"line_number":354,"context_line":"        for item in non_recoverable_list:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7af24918_9fcc4236","line":351,"in_reply_to":"7af24918_4d8cd3d9","updated":"2016-03-04 15:20:01.000000000","message":"Yes, this needs to give a warning so that people have a chance to update their configurations rather than having them fail to start.\n\nAlso, it is not correct to raise this exception in __init__, it should be done in check_for_setup_error() or somewhere after __init__.","commit_id":"8927107de6a9f4bb8d1acd5c915974f746825810"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"606d3762e1b8abd98c381b3298167d43be31fa94","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":349,"context_line":"            raise exception.InvalidConfigurationValue("},{"line_number":350,"context_line":"                value\u003dmax_over_sub_ratio,"},{"line_number":351,"context_line":"                option\u003d\"max_over_subscription_ratio\")"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def _is_non_recoverable(self, err, non_recoverable_list):"},{"line_number":354,"context_line":"        for item in non_recoverable_list:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7af24918_4d8cd3d9","line":351,"in_reply_to":"7af24918_6de1cf29","updated":"2016-03-04 15:08:46.000000000","message":"If it is \u003c 1.0, it will be ignored.  The scheduler will look at the real capacity as if it is thick provisioning.\n\nSo are you suggesting to give a warning in this patch instead of throwing an exception?  And in Newton, throw an exception?","commit_id":"8927107de6a9f4bb8d1acd5c915974f746825810"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3329acb273c5bdbd8f07aba7ecc8e931b3f3fde2","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        self.db \u003d kwargs.get(\u0027db\u0027)"},{"line_number":311,"context_line":"        self.host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":312,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)"},{"line_number":313,"context_line":"        max_over_sub_ratio \u003d None"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if self.configuration:"},{"line_number":316,"context_line":"            self.configuration.append_config_values(volume_opts)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_e5616513","line":313,"updated":"2016-03-04 19:54:05.000000000","message":"Remove this line.","commit_id":"29d82babfbfa25bbe5c1de1629b8845ddebe8fde"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3329acb273c5bdbd8f07aba7ecc8e931b3f3fde2","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            self.configuration.append_config_values(iser_opts)"},{"line_number":318,"context_line":"            utils.setup_tracing(self.configuration.safe_get(\u0027trace_flags\u0027))"},{"line_number":319,"context_line":"            max_over_sub_ratio \u003d self.configuration.safe_get("},{"line_number":320,"context_line":"                \u0027max_over_subscription_ratio\u0027)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        self._execute \u003d execute"},{"line_number":323,"context_line":"        self._stats \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_0571f1e0","line":320,"updated":"2016-03-04 19:54:05.000000000","message":"Remove this line.","commit_id":"29d82babfbfa25bbe5c1de1629b8845ddebe8fde"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3329acb273c5bdbd8f07aba7ecc8e931b3f3fde2","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                and max_over_sub_ratio \u003c 1.0):"},{"line_number":347,"context_line":"            raise exception.InvalidConfigurationValue("},{"line_number":348,"context_line":"                value\u003dmax_over_sub_ratio,"},{"line_number":349,"context_line":"                option\u003d\"max_over_subscription_ratio\")"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def _is_non_recoverable(self, err, non_recoverable_list):"},{"line_number":352,"context_line":"        for item in non_recoverable_list:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_a580fd8c","line":349,"updated":"2016-03-04 19:54:05.000000000","message":"Remove this line.","commit_id":"29d82babfbfa25bbe5c1de1629b8845ddebe8fde"}]}
