)]}'
{"cinder/volume/drivers/emc/scaleio.py":[{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"dfec162822c777a27424b88bf373b9b2a9dafcbb","unresolved":false,"context_lines":[{"line_number":81,"context_line":"QOS_IOPS_LIMIT_KEY \u003d \u0027maxIOPS\u0027"},{"line_number":82,"context_line":"QOS_BANDWIDTH_LIMIT \u003d \u0027maxBWS\u0027"},{"line_number":83,"context_line":"QOS_IOPS_PER_GB \u003d \u0027maxIOPSperGB\u0027"},{"line_number":84,"context_line":"QOS_BANDWIDTH_PER_GB \u003d \u0027maxBWperGB\u0027"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"BLOCK_SIZE \u003d 8"},{"line_number":87,"context_line":"OK_STATUS_CODE \u003d 200"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_65705edd","line":84,"updated":"2016-05-25 15:55:07.000000000","message":"maxBW_S_, but maxBWperGB (no S) - is it correct?","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"dfec162822c777a27424b88bf373b9b2a9dafcbb","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def _find_limit(self, storage_type, qos_key, extraspecs_key):"},{"line_number":238,"context_line":"        qos_limit \u003d storage_type.get(qos_key)"},{"line_number":239,"context_line":"        extraspecs_limit \u003d storage_type.get(extraspecs_key)"},{"line_number":240,"context_line":"        if extraspecs_limit is not None:"},{"line_number":241,"context_line":"            if qos_limit is not None:"},{"line_number":242,"context_line":"                LOG.warning(_LW(\"QoS specs are overriding extra_specs.\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_8af3d109","line":239,"updated":"2016-05-25 15:55:07.000000000","message":"[1]","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"1d4a2e232ed0e36c6640565323576e40f4c3c5be","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def _find_limit(self, storage_type, qos_key, extraspecs_key):"},{"line_number":238,"context_line":"        qos_limit \u003d storage_type.get(qos_key)"},{"line_number":239,"context_line":"        extraspecs_limit \u003d storage_type.get(extraspecs_key)"},{"line_number":240,"context_line":"        if extraspecs_limit is not None:"},{"line_number":241,"context_line":"            if qos_limit is not None:"},{"line_number":242,"context_line":"                LOG.warning(_LW(\"QoS specs are overriding extra_specs.\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_39793ec9","line":239,"in_reply_to":"bab6814e_0704d647","updated":"2016-05-26 09:05:35.000000000","message":"Ok I got it, it\u0027s indeed quite unrealistic, but I will handle this case anyway in my next patch.","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"ffc703da2d684f8acf9c0208b99608325f84482a","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def _find_limit(self, storage_type, qos_key, extraspecs_key):"},{"line_number":238,"context_line":"        qos_limit \u003d storage_type.get(qos_key)"},{"line_number":239,"context_line":"        extraspecs_limit \u003d storage_type.get(extraspecs_key)"},{"line_number":240,"context_line":"        if extraspecs_limit is not None:"},{"line_number":241,"context_line":"            if qos_limit is not None:"},{"line_number":242,"context_line":"                LOG.warning(_LW(\"QoS specs are overriding extra_specs.\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_0704d647","line":239,"in_reply_to":"bab6814e_8af3d109","updated":"2016-05-26 08:47:12.000000000","message":"Feodor means that if storage_type would have a key that equal None, the behavior here will be strange.\n(this is a unrealistic case but...)\nAnd common practice is to check input parameter and if it None then do something else. Here all next \u0027if\u0027 block can be skipped.","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"dfec162822c777a27424b88bf373b9b2a9dafcbb","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        LOG.info(_LI(\"bandwidth per gb has been set to %s\"), bw_per_gb)"},{"line_number":714,"context_line":"        if bw_per_gb is None:"},{"line_number":715,"context_line":"            return max_bandwidth"},{"line_number":716,"context_line":"        scaled_bw_limit \u003d size * self._round_to_num_gran(int(bw_per_gb), 128)"},{"line_number":717,"context_line":"        if max_bandwidth is None or scaled_bw_limit \u003c int(max_bandwidth):"},{"line_number":718,"context_line":"            return six.text_type(scaled_bw_limit)"},{"line_number":719,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_c55e6a44","line":716,"range":{"start_line":716,"start_character":73,"end_line":716,"end_character":76},"updated":"2016-05-25 15:55:07.000000000","message":"Could you explain in a comment this magic number?","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"fa80e12a3bb0d3fdbb1dd138a61160839a5cbfef","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        LOG.info(_LI(\"bandwidth per gb has been set to %s\"), bw_per_gb)"},{"line_number":714,"context_line":"        if bw_per_gb is None:"},{"line_number":715,"context_line":"            return max_bandwidth"},{"line_number":716,"context_line":"        scaled_bw_limit \u003d size * self._round_to_num_gran(int(bw_per_gb), 128)"},{"line_number":717,"context_line":"        if max_bandwidth is None or scaled_bw_limit \u003c int(max_bandwidth):"},{"line_number":718,"context_line":"            return six.text_type(scaled_bw_limit)"},{"line_number":719,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_c632d45d","line":716,"range":{"start_line":716,"start_character":73,"end_line":716,"end_character":76},"in_reply_to":"bab6814e_c55e6a44","updated":"2016-05-26 07:36:02.000000000","message":"In our driver documentation its written that we allow bandwidth limitation in 1024 granularity. Since our volumes are in 8GB granularity, we need that this number will be in 128 granularity. But we don\u0027t want to fail the operation if a user specified a number that don\u0027t follow those rules, so we round it up for him.","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":10234,"name":"Andrey Pavlov","email":"andrey.mp@gmail.com","username":"andrey-mp"},"change_message_id":"ffc703da2d684f8acf9c0208b99608325f84482a","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        LOG.info(_LI(\"bandwidth per gb has been set to %s\"), bw_per_gb)"},{"line_number":714,"context_line":"        if bw_per_gb is None:"},{"line_number":715,"context_line":"            return max_bandwidth"},{"line_number":716,"context_line":"        scaled_bw_limit \u003d size * self._round_to_num_gran(int(bw_per_gb), 128)"},{"line_number":717,"context_line":"        if max_bandwidth is None or scaled_bw_limit \u003c int(max_bandwidth):"},{"line_number":718,"context_line":"            return six.text_type(scaled_bw_limit)"},{"line_number":719,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_670a028c","line":716,"range":{"start_line":716,"start_character":73,"end_line":716,"end_character":76},"in_reply_to":"bab6814e_c632d45d","updated":"2016-05-26 08:47:12.000000000","message":"Could you write a comment in the code with this explanation?","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"dfec162822c777a27424b88bf373b9b2a9dafcbb","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    def _get_iops_limit(self, size, storage_type):"},{"line_number":723,"context_line":"        max_iops \u003d self._find_limit(storage_type, QOS_IOPS_LIMIT_KEY,"},{"line_number":724,"context_line":"                                    IOPS_LIMIT_KEY)"},{"line_number":725,"context_line":"        LOG.info(_LI(\"max iops is: %s.\"), max_iops)"},{"line_number":726,"context_line":"        iops_per_gb \u003d self._find_limit(storage_type, QOS_IOPS_PER_GB, None)"},{"line_number":727,"context_line":"        LOG.info(_LI(\"iops per gb has been set to %s\"), iops_per_gb)"},{"line_number":728,"context_line":"        if iops_per_gb is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_45127ab5","line":725,"updated":"2016-05-25 15:55:07.000000000","message":"does the dot at the end mean something special?","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"fa80e12a3bb0d3fdbb1dd138a61160839a5cbfef","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    def _get_iops_limit(self, size, storage_type):"},{"line_number":723,"context_line":"        max_iops \u003d self._find_limit(storage_type, QOS_IOPS_LIMIT_KEY,"},{"line_number":724,"context_line":"                                    IOPS_LIMIT_KEY)"},{"line_number":725,"context_line":"        LOG.info(_LI(\"max iops is: %s.\"), max_iops)"},{"line_number":726,"context_line":"        iops_per_gb \u003d self._find_limit(storage_type, QOS_IOPS_PER_GB, None)"},{"line_number":727,"context_line":"        LOG.info(_LI(\"iops per gb has been set to %s\"), iops_per_gb)"},{"line_number":728,"context_line":"        if iops_per_gb is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_06417ca9","line":725,"in_reply_to":"bab6814e_45127ab5","updated":"2016-05-26 07:36:02.000000000","message":"Just a dot, I can take it off.","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"dfec162822c777a27424b88bf373b9b2a9dafcbb","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        max_iops \u003d self._find_limit(storage_type, QOS_IOPS_LIMIT_KEY,"},{"line_number":724,"context_line":"                                    IOPS_LIMIT_KEY)"},{"line_number":725,"context_line":"        LOG.info(_LI(\"max iops is: %s.\"), max_iops)"},{"line_number":726,"context_line":"        iops_per_gb \u003d self._find_limit(storage_type, QOS_IOPS_PER_GB, None)"},{"line_number":727,"context_line":"        LOG.info(_LI(\"iops per gb has been set to %s\"), iops_per_gb)"},{"line_number":728,"context_line":"        if iops_per_gb is None:"},{"line_number":729,"context_line":"            return max_iops"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_65a85edc","line":726,"updated":"2016-05-25 15:55:07.000000000","message":"it can lead to unexpected behavior if storage_type has None key [1] by some reason. Perhaps it is better to make _find_limit consider None values in parameters.","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"fa80e12a3bb0d3fdbb1dd138a61160839a5cbfef","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        max_iops \u003d self._find_limit(storage_type, QOS_IOPS_LIMIT_KEY,"},{"line_number":724,"context_line":"                                    IOPS_LIMIT_KEY)"},{"line_number":725,"context_line":"        LOG.info(_LI(\"max iops is: %s.\"), max_iops)"},{"line_number":726,"context_line":"        iops_per_gb \u003d self._find_limit(storage_type, QOS_IOPS_PER_GB, None)"},{"line_number":727,"context_line":"        LOG.info(_LI(\"iops per gb has been set to %s\"), iops_per_gb)"},{"line_number":728,"context_line":"        if iops_per_gb is None:"},{"line_number":729,"context_line":"            return max_iops"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_06ddfcdf","line":726,"in_reply_to":"bab6814e_65a85edc","updated":"2016-05-26 07:36:02.000000000","message":"I don\u0027t see how it can lead to unexpected behavior.\nIt will return None in the worst case and that\u0027s what I expect.","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"dfec162822c777a27424b88bf373b9b2a9dafcbb","unresolved":false,"context_lines":[{"line_number":724,"context_line":"                                    IOPS_LIMIT_KEY)"},{"line_number":725,"context_line":"        LOG.info(_LI(\"max iops is: %s.\"), max_iops)"},{"line_number":726,"context_line":"        iops_per_gb \u003d self._find_limit(storage_type, QOS_IOPS_PER_GB, None)"},{"line_number":727,"context_line":"        LOG.info(_LI(\"iops per gb has been set to %s\"), iops_per_gb)"},{"line_number":728,"context_line":"        if iops_per_gb is None:"},{"line_number":729,"context_line":"            return max_iops"},{"line_number":730,"context_line":"        scaled_iops_limit \u003d size * int(iops_per_gb)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_a5cc0662","line":727,"updated":"2016-05-25 15:55:07.000000000","message":"why not \u0027iops per gb is:\u0027 which is similar to the message above?","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"fa80e12a3bb0d3fdbb1dd138a61160839a5cbfef","unresolved":false,"context_lines":[{"line_number":724,"context_line":"                                    IOPS_LIMIT_KEY)"},{"line_number":725,"context_line":"        LOG.info(_LI(\"max iops is: %s.\"), max_iops)"},{"line_number":726,"context_line":"        iops_per_gb \u003d self._find_limit(storage_type, QOS_IOPS_PER_GB, None)"},{"line_number":727,"context_line":"        LOG.info(_LI(\"iops per gb has been set to %s\"), iops_per_gb)"},{"line_number":728,"context_line":"        if iops_per_gb is None:"},{"line_number":729,"context_line":"            return max_iops"},{"line_number":730,"context_line":"        scaled_iops_limit \u003d size * int(iops_per_gb)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_e63d582c","line":727,"in_reply_to":"bab6814e_a5cc0662","updated":"2016-05-26 07:36:02.000000000","message":"Done","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"dfec162822c777a27424b88bf373b9b2a9dafcbb","unresolved":false,"context_lines":[{"line_number":727,"context_line":"        LOG.info(_LI(\"iops per gb has been set to %s\"), iops_per_gb)"},{"line_number":728,"context_line":"        if iops_per_gb is None:"},{"line_number":729,"context_line":"            return max_iops"},{"line_number":730,"context_line":"        scaled_iops_limit \u003d size * int(iops_per_gb)"},{"line_number":731,"context_line":"        if max_iops is None or scaled_iops_limit \u003c int(max_iops):"},{"line_number":732,"context_line":"            return six.text_type(scaled_iops_limit)"},{"line_number":733,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_c5c4aa93","line":730,"range":{"start_line":730,"start_character":35,"end_line":730,"end_character":51},"updated":"2016-05-25 15:55:07.000000000","message":"Should we handle ValueError exception (which is thrown in case of invalid user input)?","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"fa80e12a3bb0d3fdbb1dd138a61160839a5cbfef","unresolved":false,"context_lines":[{"line_number":727,"context_line":"        LOG.info(_LI(\"iops per gb has been set to %s\"), iops_per_gb)"},{"line_number":728,"context_line":"        if iops_per_gb is None:"},{"line_number":729,"context_line":"            return max_iops"},{"line_number":730,"context_line":"        scaled_iops_limit \u003d size * int(iops_per_gb)"},{"line_number":731,"context_line":"        if max_iops is None or scaled_iops_limit \u003c int(max_iops):"},{"line_number":732,"context_line":"            return six.text_type(scaled_iops_limit)"},{"line_number":733,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_e624380e","line":730,"range":{"start_line":730,"start_character":35,"end_line":730,"end_character":51},"in_reply_to":"bab6814e_c5c4aa93","updated":"2016-05-26 07:36:02.000000000","message":"You got a point, but I think the better option is still to fail the operation, I can catch it and throw a clearer error.","commit_id":"1d721a9e568f843ba1235456ac62a1ff444100e0"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"4381376bf850c48de89b7c265aa29246ef309df1","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                LOG.warning(_LW(\"QoS specs are overriding extra_specs.\"))"},{"line_number":245,"context_line":"            else:"},{"line_number":246,"context_line":"                LOG.info(_LI(\"Using extra_specs for defining QoS specs \""},{"line_number":247,"context_line":"                             \"will be deprecated in the N release \""},{"line_number":248,"context_line":"                             \"of OpenStack. Please use QoS specs.\"))"},{"line_number":249,"context_line":"        return qos_limit if qos_limit is not None else extraspecs_limit"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_023ddadc","line":247,"range":{"start_line":247,"start_character":30,"end_line":247,"end_character":65},"updated":"2016-05-26 12:16:42.000000000","message":"This is the N release.  I know, not part of your change, but maybe worth pointing out.","commit_id":"80da3f4bb36a463d48e93b66c4e22d844544607f"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"92c961828dfb3cd3644ad87aebdaca9f2cb3eeea","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                LOG.warning(_LW(\"QoS specs are overriding extra_specs.\"))"},{"line_number":245,"context_line":"            else:"},{"line_number":246,"context_line":"                LOG.info(_LI(\"Using extra_specs for defining QoS specs \""},{"line_number":247,"context_line":"                             \"will be deprecated in the N release \""},{"line_number":248,"context_line":"                             \"of OpenStack. Please use QoS specs.\"))"},{"line_number":249,"context_line":"        return qos_limit if qos_limit is not None else extraspecs_limit"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_70558c4e","line":247,"range":{"start_line":247,"start_character":30,"end_line":247,"end_character":65},"in_reply_to":"bab6814e_023ddadc","updated":"2016-05-26 12:45:20.000000000","message":"We will remove it in a different patch.","commit_id":"80da3f4bb36a463d48e93b66c4e22d844544607f"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"4381376bf850c48de89b7c265aa29246ef309df1","unresolved":false,"context_lines":[{"line_number":588,"context_line":"    def _round_to_num_gran(self, size, num\u003d8):"},{"line_number":589,"context_line":"        if size % num \u003d\u003d 0:"},{"line_number":590,"context_line":"            return size"},{"line_number":591,"context_line":"        return size + num - (size % num)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":594,"context_line":"        \"\"\"Creates a cloned volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_e5ba60e0","line":591,"updated":"2016-05-26 12:16:42.000000000","message":"Would it make sense to cast this result to int before you return it so that you don\u0027t have to cast it later, as at line 701?\n\nOr am I missing that you want this to be a float sometimes?","commit_id":"80da3f4bb36a463d48e93b66c4e22d844544607f"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"92c961828dfb3cd3644ad87aebdaca9f2cb3eeea","unresolved":false,"context_lines":[{"line_number":588,"context_line":"    def _round_to_num_gran(self, size, num\u003d8):"},{"line_number":589,"context_line":"        if size % num \u003d\u003d 0:"},{"line_number":590,"context_line":"            return size"},{"line_number":591,"context_line":"        return size + num - (size % num)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":594,"context_line":"        \"\"\"Creates a cloned volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_eb823151","line":591,"in_reply_to":"bab6814e_e5ba60e0","updated":"2016-05-26 12:45:20.000000000","message":"You\u0027re probably right. I will take a closer look and update in the next patch.","commit_id":"80da3f4bb36a463d48e93b66c4e22d844544607f"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"b861efcf282a911597082765deca068ff1daab62","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        bw_per_gb \u003d self._find_limit(storage_type, QOS_BANDWIDTH_PER_GB, None)"},{"line_number":717,"context_line":"        LOG.info(_LI(\"bandwidth per gb is: %s\"), bw_per_gb)"},{"line_number":718,"context_line":"        if bw_per_gb is None:"},{"line_number":719,"context_line":"            return max_bandwidth"},{"line_number":720,"context_line":"        # Since ScaleIO volumes size is in 8GB granularity and BWS limitation"},{"line_number":721,"context_line":"        # is in 1024 KBs granularity, we need to make sure that scaled_bw_limit"},{"line_number":722,"context_line":"        # is in 128 granularity."}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_24cfdeb1","line":719,"updated":"2016-05-27 12:42:55.000000000","message":"Why do you align bw_per_gb, but do not do this with max_bandmith? What is the difference?","commit_id":"0a252718cd4d699eeeacce323b239296032e0750"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"1f2518879aeb244c682f71d4683b1d01a23a53e6","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        bw_per_gb \u003d self._find_limit(storage_type, QOS_BANDWIDTH_PER_GB, None)"},{"line_number":717,"context_line":"        LOG.info(_LI(\"bandwidth per gb is: %s\"), bw_per_gb)"},{"line_number":718,"context_line":"        if bw_per_gb is None:"},{"line_number":719,"context_line":"            return max_bandwidth"},{"line_number":720,"context_line":"        # Since ScaleIO volumes size is in 8GB granularity and BWS limitation"},{"line_number":721,"context_line":"        # is in 1024 KBs granularity, we need to make sure that scaled_bw_limit"},{"line_number":722,"context_line":"        # is in 128 granularity."}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_8cd32d38","line":719,"in_reply_to":"9abb7d3a_24cfdeb1","updated":"2016-05-28 14:45:37.000000000","message":"You\u0027re right, we should round it up as well.","commit_id":"0a252718cd4d699eeeacce323b239296032e0750"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"b861efcf282a911597082765deca068ff1daab62","unresolved":false,"context_lines":[{"line_number":729,"context_line":"                return max_bandwidth"},{"line_number":730,"context_line":"        except ValueError:"},{"line_number":731,"context_line":"            msg \u003d _(\"None numeric BWS QoS limitation\")"},{"line_number":732,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    def _get_iops_limit(self, size, storage_type):"},{"line_number":735,"context_line":"        max_iops \u003d self._find_limit(storage_type, QOS_IOPS_LIMIT_KEY,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_843faa24","line":732,"range":{"start_line":732,"start_character":28,"end_line":732,"end_character":53},"updated":"2016-05-27 12:42:55.000000000","message":"Other drivers (i\u0027ve seen it in huawei and ibm ones) throw InvalidInput in similar cases. Probably it\u0027s better to throw the same here.","commit_id":"0a252718cd4d699eeeacce323b239296032e0750"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"1f2518879aeb244c682f71d4683b1d01a23a53e6","unresolved":false,"context_lines":[{"line_number":729,"context_line":"                return max_bandwidth"},{"line_number":730,"context_line":"        except ValueError:"},{"line_number":731,"context_line":"            msg \u003d _(\"None numeric BWS QoS limitation\")"},{"line_number":732,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    def _get_iops_limit(self, size, storage_type):"},{"line_number":735,"context_line":"        max_iops \u003d self._find_limit(storage_type, QOS_IOPS_LIMIT_KEY,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_ecdab977","line":732,"range":{"start_line":732,"start_character":28,"end_line":732,"end_character":53},"in_reply_to":"9abb7d3a_843faa24","updated":"2016-05-28 14:45:37.000000000","message":"Done","commit_id":"0a252718cd4d699eeeacce323b239296032e0750"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"91c9a1db706bdf907c6f61ab3780b86199bb39dd","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        storage_type \u003d extra_specs.copy()"},{"line_number":699,"context_line":"        storage_type.update(qos_specs)"},{"line_number":700,"context_line":"        LOG.info(_LI(\"Volume type is %s.\"), storage_type)"},{"line_number":701,"context_line":"        round_volume_size \u003d int(self._round_to_num_gran(volume.size))"},{"line_number":702,"context_line":"        iops_limit \u003d self._get_iops_limit(round_volume_size, storage_type)"},{"line_number":703,"context_line":"        bandwidth_limit \u003d self._get_bandwidth_limit(round_volume_size,"},{"line_number":704,"context_line":"                                                    storage_type)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_a0e19f00","line":701,"updated":"2016-05-30 21:14:13.000000000","message":"probably int() is not required here","commit_id":"a61bca610ae61bd7398f3636d9b9078de8f32b55"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"2bf19c642015f2990cf982c3423a4f6275e09b67","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        storage_type \u003d extra_specs.copy()"},{"line_number":699,"context_line":"        storage_type.update(qos_specs)"},{"line_number":700,"context_line":"        LOG.info(_LI(\"Volume type is %s.\"), storage_type)"},{"line_number":701,"context_line":"        round_volume_size \u003d int(self._round_to_num_gran(volume.size))"},{"line_number":702,"context_line":"        iops_limit \u003d self._get_iops_limit(round_volume_size, storage_type)"},{"line_number":703,"context_line":"        bandwidth_limit \u003d self._get_bandwidth_limit(round_volume_size,"},{"line_number":704,"context_line":"                                                    storage_type)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_de7d96b2","line":701,"in_reply_to":"9abb7d3a_a0e19f00","updated":"2016-05-31 19:41:34.000000000","message":"Done","commit_id":"a61bca610ae61bd7398f3636d9b9078de8f32b55"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"2eb58a20407dbef4ed3922d65b1260b0a5bab7a5","unresolved":false,"context_lines":[{"line_number":714,"context_line":"            max_bandwidth \u003d self._find_limit(storage_type, QOS_BANDWIDTH_LIMIT,"},{"line_number":715,"context_line":"                                             BANDWIDTH_LIMIT)"},{"line_number":716,"context_line":"            max_bandwidth \u003d (None if max_bandwidth is None else"},{"line_number":717,"context_line":"                             self._round_to_num_gran(max_bandwidth, 1024))"},{"line_number":718,"context_line":"            LOG.info(_LI(\"max bandwidth is: %s\"), max_bandwidth)"},{"line_number":719,"context_line":"            bw_per_gb \u003d self._find_limit(storage_type, QOS_BANDWIDTH_PER_GB,"},{"line_number":720,"context_line":"                                         None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_c4ffb7a8","line":717,"range":{"start_line":717,"start_character":68,"end_line":717,"end_character":72},"updated":"2016-05-30 08:31:47.000000000","message":"Maybe place a comment about 1024 granularity at the top of the method? (But leave the part about 128\u003d1024/8 near 128 usage)","commit_id":"a61bca610ae61bd7398f3636d9b9078de8f32b55"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"91c9a1db706bdf907c6f61ab3780b86199bb39dd","unresolved":false,"context_lines":[{"line_number":714,"context_line":"            max_bandwidth \u003d self._find_limit(storage_type, QOS_BANDWIDTH_LIMIT,"},{"line_number":715,"context_line":"                                             BANDWIDTH_LIMIT)"},{"line_number":716,"context_line":"            max_bandwidth \u003d (None if max_bandwidth is None else"},{"line_number":717,"context_line":"                             self._round_to_num_gran(max_bandwidth, 1024))"},{"line_number":718,"context_line":"            LOG.info(_LI(\"max bandwidth is: %s\"), max_bandwidth)"},{"line_number":719,"context_line":"            bw_per_gb \u003d self._find_limit(storage_type, QOS_BANDWIDTH_PER_GB,"},{"line_number":720,"context_line":"                                         None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_4f862466","line":717,"range":{"start_line":717,"start_character":53,"end_line":717,"end_character":66},"updated":"2016-05-30 21:14:13.000000000","message":"must be int(max_bandwith), and the result of round_to... must be converted to str","commit_id":"a61bca610ae61bd7398f3636d9b9078de8f32b55"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"2bf19c642015f2990cf982c3423a4f6275e09b67","unresolved":false,"context_lines":[{"line_number":714,"context_line":"            max_bandwidth \u003d self._find_limit(storage_type, QOS_BANDWIDTH_LIMIT,"},{"line_number":715,"context_line":"                                             BANDWIDTH_LIMIT)"},{"line_number":716,"context_line":"            max_bandwidth \u003d (None if max_bandwidth is None else"},{"line_number":717,"context_line":"                             self._round_to_num_gran(max_bandwidth, 1024))"},{"line_number":718,"context_line":"            LOG.info(_LI(\"max bandwidth is: %s\"), max_bandwidth)"},{"line_number":719,"context_line":"            bw_per_gb \u003d self._find_limit(storage_type, QOS_BANDWIDTH_PER_GB,"},{"line_number":720,"context_line":"                                         None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_9eacae36","line":717,"range":{"start_line":717,"start_character":53,"end_line":717,"end_character":66},"in_reply_to":"9abb7d3a_4f862466","updated":"2016-05-31 19:41:34.000000000","message":"You\u0027re right about int(max_badnwidth).\nBy str you mean six.text_type?","commit_id":"a61bca610ae61bd7398f3636d9b9078de8f32b55"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"dcad61a69717ecc75a7f0c00d78135712dd13952","unresolved":false,"context_lines":[{"line_number":714,"context_line":"            max_bandwidth \u003d self._find_limit(storage_type, QOS_BANDWIDTH_LIMIT,"},{"line_number":715,"context_line":"                                             BANDWIDTH_LIMIT)"},{"line_number":716,"context_line":"            max_bandwidth \u003d (None if max_bandwidth is None else"},{"line_number":717,"context_line":"                             self._round_to_num_gran(max_bandwidth, 1024))"},{"line_number":718,"context_line":"            LOG.info(_LI(\"max bandwidth is: %s\"), max_bandwidth)"},{"line_number":719,"context_line":"            bw_per_gb \u003d self._find_limit(storage_type, QOS_BANDWIDTH_PER_GB,"},{"line_number":720,"context_line":"                                         None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_7afa8444","line":717,"range":{"start_line":717,"start_character":53,"end_line":717,"end_character":66},"in_reply_to":"9abb7d3a_9eacae36","updated":"2016-05-31 20:26:57.000000000","message":"sure","commit_id":"a61bca610ae61bd7398f3636d9b9078de8f32b55"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"2eb58a20407dbef4ed3922d65b1260b0a5bab7a5","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                return max_iops"},{"line_number":751,"context_line":"        except ValueError:"},{"line_number":752,"context_line":"            msg \u003d _(\"None numeric IOPS QoS limitation\")"},{"line_number":753,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":756,"context_line":"        LOG.debug(\"scaleio driver terminate connection.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_e9661428","line":753,"range":{"start_line":753,"start_character":28,"end_line":753,"end_character":53},"updated":"2016-05-30 08:31:47.000000000","message":"InvalidInput as well","commit_id":"a61bca610ae61bd7398f3636d9b9078de8f32b55"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"b791ab8388330f8ab5716a880562bc56ee01fca0","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                return max_iops"},{"line_number":751,"context_line":"        except ValueError:"},{"line_number":752,"context_line":"            msg \u003d _(\"None numeric IOPS QoS limitation\")"},{"line_number":753,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":756,"context_line":"        LOG.debug(\"scaleio driver terminate connection.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_8874eb36","line":753,"range":{"start_line":753,"start_character":28,"end_line":753,"end_character":53},"in_reply_to":"9abb7d3a_e9661428","updated":"2016-06-15 10:49:54.000000000","message":"Done","commit_id":"a61bca610ae61bd7398f3636d9b9078de8f32b55"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"47895ee87f684db4bf147a265876db07fda790b2","unresolved":false,"context_lines":[{"line_number":715,"context_line":"                                             BANDWIDTH_LIMIT)"},{"line_number":716,"context_line":"            if max_bandwidth is not None:"},{"line_number":717,"context_line":"                max_bandwidth \u003d (self._round_to_num_gran(int(max_bandwidth),"},{"line_number":718,"context_line":"                                                         1024))"},{"line_number":719,"context_line":"                max_bandwidth \u003d six.text_type(max_bandwidth)"},{"line_number":720,"context_line":"            LOG.info(_LI(\"max bandwidth is: %s\"), max_bandwidth)"},{"line_number":721,"context_line":"            bw_per_gb \u003d self._find_limit(storage_type, QOS_BANDWIDTH_PER_GB,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_45f1e5cc","line":718,"updated":"2016-06-16 21:57:49.000000000","message":"Use units.Ki instead of 1024","commit_id":"1ce9d4371005e84e14412757ebad905472a5aa89"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"a3007e95fcf1fcf1566e742fdafd9a6f3521beb9","unresolved":false,"context_lines":[{"line_number":715,"context_line":"                                             BANDWIDTH_LIMIT)"},{"line_number":716,"context_line":"            if max_bandwidth is not None:"},{"line_number":717,"context_line":"                max_bandwidth \u003d (self._round_to_num_gran(int(max_bandwidth),"},{"line_number":718,"context_line":"                                                         1024))"},{"line_number":719,"context_line":"                max_bandwidth \u003d six.text_type(max_bandwidth)"},{"line_number":720,"context_line":"            LOG.info(_LI(\"max bandwidth is: %s\"), max_bandwidth)"},{"line_number":721,"context_line":"            bw_per_gb \u003d self._find_limit(storage_type, QOS_BANDWIDTH_PER_GB,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_d0a982e1","line":718,"in_reply_to":"7aa08908_45f1e5cc","updated":"2016-06-18 19:07:09.000000000","message":"Done","commit_id":"1ce9d4371005e84e14412757ebad905472a5aa89"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"47895ee87f684db4bf147a265876db07fda790b2","unresolved":false,"context_lines":[{"line_number":727,"context_line":"            # and BWS limitation is in 1024 KBs granularity, we need to make"},{"line_number":728,"context_line":"            # sure that scaled_bw_limit is in 128 granularity."},{"line_number":729,"context_line":"            scaled_bw_limit \u003d (size *"},{"line_number":730,"context_line":"                               self._round_to_num_gran(int(bw_per_gb), 128))"},{"line_number":731,"context_line":"            if max_bandwidth is None or scaled_bw_limit \u003c int(max_bandwidth):"},{"line_number":732,"context_line":"                return six.text_type(scaled_bw_limit)"},{"line_number":733,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_85a0eda6","line":730,"updated":"2016-06-16 21:57:49.000000000","message":"Please use a constant for 128.","commit_id":"1ce9d4371005e84e14412757ebad905472a5aa89"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"a3007e95fcf1fcf1566e742fdafd9a6f3521beb9","unresolved":false,"context_lines":[{"line_number":727,"context_line":"            # and BWS limitation is in 1024 KBs granularity, we need to make"},{"line_number":728,"context_line":"            # sure that scaled_bw_limit is in 128 granularity."},{"line_number":729,"context_line":"            scaled_bw_limit \u003d (size *"},{"line_number":730,"context_line":"                               self._round_to_num_gran(int(bw_per_gb), 128))"},{"line_number":731,"context_line":"            if max_bandwidth is None or scaled_bw_limit \u003c int(max_bandwidth):"},{"line_number":732,"context_line":"                return six.text_type(scaled_bw_limit)"},{"line_number":733,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_30af26e5","line":730,"in_reply_to":"7aa08908_85a0eda6","updated":"2016-06-18 19:07:09.000000000","message":"Done","commit_id":"1ce9d4371005e84e14412757ebad905472a5aa89"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"47895ee87f684db4bf147a265876db07fda790b2","unresolved":false,"context_lines":[{"line_number":734,"context_line":"                return max_bandwidth"},{"line_number":735,"context_line":"        except ValueError:"},{"line_number":736,"context_line":"            msg \u003d _(\"None numeric BWS QoS limitation\")"},{"line_number":737,"context_line":"            raise exception.InvalidInput(data\u003dmsg)"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"    def _get_iops_limit(self, size, storage_type):"},{"line_number":740,"context_line":"        max_iops \u003d self._find_limit(storage_type, QOS_IOPS_LIMIT_KEY,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_a5ad299d","line":737,"range":{"start_line":737,"start_character":12,"end_line":737,"end_character":50},"updated":"2016-06-16 21:57:49.000000000","message":"raise exception.InvalidInput(reason\u003dmsg)","commit_id":"1ce9d4371005e84e14412757ebad905472a5aa89"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"a3007e95fcf1fcf1566e742fdafd9a6f3521beb9","unresolved":false,"context_lines":[{"line_number":734,"context_line":"                return max_bandwidth"},{"line_number":735,"context_line":"        except ValueError:"},{"line_number":736,"context_line":"            msg \u003d _(\"None numeric BWS QoS limitation\")"},{"line_number":737,"context_line":"            raise exception.InvalidInput(data\u003dmsg)"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"    def _get_iops_limit(self, size, storage_type):"},{"line_number":740,"context_line":"        max_iops \u003d self._find_limit(storage_type, QOS_IOPS_LIMIT_KEY,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_10acaaec","line":737,"range":{"start_line":737,"start_character":12,"end_line":737,"end_character":50},"in_reply_to":"7aa08908_a5ad299d","updated":"2016-06-18 19:07:09.000000000","message":"Done","commit_id":"1ce9d4371005e84e14412757ebad905472a5aa89"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"47895ee87f684db4bf147a265876db07fda790b2","unresolved":false,"context_lines":[{"line_number":755,"context_line":"                return six.text_type(max_iops)"},{"line_number":756,"context_line":"        except ValueError:"},{"line_number":757,"context_line":"            msg \u003d _(\"None numeric IOPS QoS limitation\")"},{"line_number":758,"context_line":"            raise exception.InvalidInput(data\u003dmsg)"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":761,"context_line":"        LOG.debug(\"scaleio driver terminate connection.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_e58f312c","line":758,"updated":"2016-06-16 21:57:49.000000000","message":"Same as above.","commit_id":"1ce9d4371005e84e14412757ebad905472a5aa89"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"a3007e95fcf1fcf1566e742fdafd9a6f3521beb9","unresolved":false,"context_lines":[{"line_number":755,"context_line":"                return six.text_type(max_iops)"},{"line_number":756,"context_line":"        except ValueError:"},{"line_number":757,"context_line":"            msg \u003d _(\"None numeric IOPS QoS limitation\")"},{"line_number":758,"context_line":"            raise exception.InvalidInput(data\u003dmsg)"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":761,"context_line":"        LOG.debug(\"scaleio driver terminate connection.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_70b9ae2e","line":758,"in_reply_to":"7aa08908_e58f312c","updated":"2016-06-18 19:07:09.000000000","message":"Done","commit_id":"1ce9d4371005e84e14412757ebad905472a5aa89"}],"releasenotes/notes/scaleio-scaling-qos-50c58e43d4b54247.yaml":[{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"e9629c193e8abb79d9d50da954eed63e6183404b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for scaling QoS in the ScaleIO driver."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"5a9d85d2_19c64549","line":3,"updated":"2016-06-21 10:05:29.000000000","message":"Should not we specify more details (like new attributes names, etc)?","commit_id":"02b8c827c67fc87622af2080182777a6c4fa2f7d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a04510e05219f8efd1e40481404267cdef007a21","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for scaling QoS in the ScaleIO driver."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"5a9d85d2_75c0252b","line":3,"in_reply_to":"5a9d85d2_07c6dc48","updated":"2016-06-21 12:49:43.000000000","message":"Matan,\n\nI think it\u0027s better to mention maxIOPSperGB and maxBWperGB here so it is more clear what are added.","commit_id":"02b8c827c67fc87622af2080182777a6c4fa2f7d"},{"author":{"_account_id":18997,"name":"Matan Sabag","email":"matan.sabag@emc.com","username":"sabagm"},"change_message_id":"e37cb7b4334ff2a1c08579cf9dc2203137c2a700","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for scaling QoS in the ScaleIO driver."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"5a9d85d2_07c6dc48","line":3,"in_reply_to":"5a9d85d2_19c64549","updated":"2016-06-21 10:41:38.000000000","message":"I don\u0027t think it is needed here. We will add it in our configuration settings where we currently list all the QoS keys.","commit_id":"02b8c827c67fc87622af2080182777a6c4fa2f7d"}]}
