)]}'
{"releasenotes/notes/storage-workload-balance-0ecabbc1791e6894.yaml":[{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"8a7949eb06be332f5d008b7bf023010f82b1204e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added storage capacity balance strategy."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7f96bb07_a643dc12","line":4,"updated":"2018-01-17 08:57:38.000000000","message":"A link to strategy documentation can be added here.","commit_id":"e277710dc05551a68fe25440f471deefe5a551a0"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"0c256dfd714e5577d675c1a9ce45661f441aa2fe","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added storage capacity balance strategy."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7f96bb07_137c0970","line":4,"in_reply_to":"7f96bb07_a643dc12","updated":"2018-01-19 03:36:03.000000000","message":"This strategy doc isn\u0027t ready and will add later.","commit_id":"e277710dc05551a68fe25440f471deefe5a551a0"}],"setup.cfg":[{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"8a7949eb06be332f5d008b7bf023010f82b1204e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    workload_balance \u003d watcher.decision_engine.strategy.strategies.workload_balance:WorkloadBalance"},{"line_number":78,"context_line":"    uniform_airflow \u003d watcher.decision_engine.strategy.strategies.uniform_airflow:UniformAirflow"},{"line_number":79,"context_line":"    noisy_neighbor \u003d watcher.decision_engine.strategy.strategies.noisy_neighbor:NoisyNeighbor"},{"line_number":80,"context_line":"    volume_workload_balance \u003d watcher.decision_engine.strategy.strategies.volume_workload_balance:StorageCapacityBalance"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"watcher_actions \u003d"},{"line_number":83,"context_line":"    migrate \u003d watcher.applier.actions.migration:Migrate"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"7f96bb07_c62f083d","line":80,"updated":"2018-01-17 08:57:38.000000000","message":"It is bit confusing, why volume_workload_balance and storage_capacity balance??","commit_id":"e277710dc05551a68fe25440f471deefe5a551a0"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"0c256dfd714e5577d675c1a9ce45661f441aa2fe","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    workload_balance \u003d watcher.decision_engine.strategy.strategies.workload_balance:WorkloadBalance"},{"line_number":78,"context_line":"    uniform_airflow \u003d watcher.decision_engine.strategy.strategies.uniform_airflow:UniformAirflow"},{"line_number":79,"context_line":"    noisy_neighbor \u003d watcher.decision_engine.strategy.strategies.noisy_neighbor:NoisyNeighbor"},{"line_number":80,"context_line":"    volume_workload_balance \u003d watcher.decision_engine.strategy.strategies.volume_workload_balance:StorageCapacityBalance"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"watcher_actions \u003d"},{"line_number":83,"context_line":"    migrate \u003d watcher.applier.actions.migration:Migrate"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"7f96bb07_78c3eced","line":80,"in_reply_to":"7f96bb07_c62f083d","updated":"2018-01-19 03:36:03.000000000","message":"I will unify the definition.","commit_id":"e277710dc05551a68fe25440f471deefe5a551a0"}],"watcher/applier/actions/volume_migration.py":[{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                },"},{"line_number":88,"context_line":"                \u0027migration_type\u0027: {"},{"line_number":89,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":90,"context_line":"                    \"enum\": [\"swap\", \"cold\", \"retype\", \"migrate\"]"},{"line_number":91,"context_line":"                },"},{"line_number":92,"context_line":"                \u0027destination_node\u0027: {"},{"line_number":93,"context_line":"                    \"anyof\": ["}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_d170f80a","line":90,"range":{"start_line":90,"start_character":37,"end_line":90,"end_character":43},"updated":"2017-11-16 13:37:00.000000000","message":"cold is not necessary if retype and migrate are added.\nLet\u0027s remove cold.","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                },"},{"line_number":88,"context_line":"                \u0027migration_type\u0027: {"},{"line_number":89,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":90,"context_line":"                    \"enum\": [\"swap\", \"cold\", \"retype\", \"migrate\"]"},{"line_number":91,"context_line":"                },"},{"line_number":92,"context_line":"                \u0027destination_node\u0027: {"},{"line_number":93,"context_line":"                    \"anyof\": ["}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_f7c2ad33","line":90,"range":{"start_line":90,"start_character":37,"end_line":90,"end_character":43},"in_reply_to":"1f485f77_c8d3985f","updated":"2017-11-17 07:47:29.000000000","message":"I\u0027ll report a bug and fix it","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"652d8a8c72c0370bc28e28ddf218660dcafc0027","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                },"},{"line_number":88,"context_line":"                \u0027migration_type\u0027: {"},{"line_number":89,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":90,"context_line":"                    \"enum\": [\"swap\", \"cold\", \"retype\", \"migrate\"]"},{"line_number":91,"context_line":"                },"},{"line_number":92,"context_line":"                \u0027destination_node\u0027: {"},{"line_number":93,"context_line":"                    \"anyof\": ["}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_c8d3985f","line":90,"range":{"start_line":90,"start_character":37,"end_line":90,"end_character":43},"in_reply_to":"1f485f77_d170f80a","updated":"2017-11-17 02:56:59.000000000","message":"ok","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        try:"},{"line_number":216,"context_line":"            volume \u003d self.cinder_util.get_volume(volume_id)"},{"line_number":217,"context_line":"            if self.migration_type \u003d\u003d self.COLD:"},{"line_number":218,"context_line":"                return self._cold_migrate(volume, dest_node, dest_type)"},{"line_number":219,"context_line":"            elif self.migration_type \u003d\u003d self.SWAP:"},{"line_number":220,"context_line":"                if dest_node:"},{"line_number":221,"context_line":"                    LOG.warning(\"dest_node is ignored\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_71cee42d","line":218,"range":{"start_line":217,"start_character":12,"end_line":218,"end_character":71},"updated":"2017-11-16 13:37:00.000000000","message":"let\u0027s remove cold","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"652d8a8c72c0370bc28e28ddf218660dcafc0027","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        try:"},{"line_number":216,"context_line":"            volume \u003d self.cinder_util.get_volume(volume_id)"},{"line_number":217,"context_line":"            if self.migration_type \u003d\u003d self.COLD:"},{"line_number":218,"context_line":"                return self._cold_migrate(volume, dest_node, dest_type)"},{"line_number":219,"context_line":"            elif self.migration_type \u003d\u003d self.SWAP:"},{"line_number":220,"context_line":"                if dest_node:"},{"line_number":221,"context_line":"                    LOG.warning(\"dest_node is ignored\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_a8d85c7a","line":218,"range":{"start_line":217,"start_character":12,"end_line":218,"end_character":71},"in_reply_to":"1f485f77_71cee42d","updated":"2017-11-17 02:56:59.000000000","message":"ok","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        try:"},{"line_number":216,"context_line":"            volume \u003d self.cinder_util.get_volume(volume_id)"},{"line_number":217,"context_line":"            if self.migration_type \u003d\u003d self.COLD:"},{"line_number":218,"context_line":"                return self._cold_migrate(volume, dest_node, dest_type)"},{"line_number":219,"context_line":"            elif self.migration_type \u003d\u003d self.SWAP:"},{"line_number":220,"context_line":"                if dest_node:"},{"line_number":221,"context_line":"                    LOG.warning(\"dest_node is ignored\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_77e47de0","line":218,"range":{"start_line":217,"start_character":12,"end_line":218,"end_character":71},"in_reply_to":"1f485f77_a8d85c7a","updated":"2017-11-17 07:47:29.000000000","message":"ditto","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"}],"watcher/decision_engine/strategy/strategies/volume_workload_balance.py":[{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2017  ZTE\tCorp"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_c6d4c0eb","line":2,"range":{"start_line":2,"start_character":22,"end_line":2,"end_character":30},"updated":"2017-11-16 13:37:00.000000000","message":"ZTE Corporation?","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def get_config_opts(cls):"},{"line_number":111,"context_line":"        return ["},{"line_number":112,"context_line":"            cfg.StrOpt("},{"line_number":113,"context_line":"                \"ex_pools\","},{"line_number":114,"context_line":"                help\u003d\"exclude pools, split by ,\","},{"line_number":115,"context_line":"                default\u003d\"local_vstorage\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_7106e41e","line":112,"range":{"start_line":112,"start_character":16,"end_line":112,"end_character":22},"updated":"2017-11-16 13:37:00.000000000","message":"Can we use ListOpt?\nhttps://docs.openstack.org/oslo.config/latest/reference/opts.html#oslo_config.cfg.ListOpt","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"652d8a8c72c0370bc28e28ddf218660dcafc0027","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def get_config_opts(cls):"},{"line_number":111,"context_line":"        return ["},{"line_number":112,"context_line":"            cfg.StrOpt("},{"line_number":113,"context_line":"                \"ex_pools\","},{"line_number":114,"context_line":"                help\u003d\"exclude pools, split by ,\","},{"line_number":115,"context_line":"                default\u003d\"local_vstorage\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_c8bdd8d8","line":112,"range":{"start_line":112,"start_character":16,"end_line":112,"end_character":22},"in_reply_to":"1f485f77_7106e41e","updated":"2017-11-17 02:56:59.000000000","message":"Thanks, I\u0027ll use ListOpt.","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def get_config_opts(cls):"},{"line_number":111,"context_line":"        return ["},{"line_number":112,"context_line":"            cfg.StrOpt("},{"line_number":113,"context_line":"                \"ex_pools\","},{"line_number":114,"context_line":"                help\u003d\"exclude pools, split by ,\","},{"line_number":115,"context_line":"                default\u003d\"local_vstorage\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_01c3cb39","line":112,"range":{"start_line":112,"start_character":16,"end_line":112,"end_character":22},"in_reply_to":"1f485f77_c8bdd8d8","updated":"2017-11-17 07:47:29.000000000","message":"Done","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            cfg.StrOpt("},{"line_number":113,"context_line":"                \"ex_pools\","},{"line_number":114,"context_line":"                help\u003d\"exclude pools, split by ,\","},{"line_number":115,"context_line":"                default\u003d\"local_vstorage\"),"},{"line_number":116,"context_line":"            ]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_pools(self, cinder):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_316bccb7","line":115,"range":{"start_line":115,"start_character":25,"end_line":115,"end_character":39},"updated":"2017-11-16 13:37:00.000000000","message":"I wonder why default is \"local_vstorage\"..\nThe value for testing in your environment??","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"652d8a8c72c0370bc28e28ddf218660dcafc0027","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            cfg.StrOpt("},{"line_number":113,"context_line":"                \"ex_pools\","},{"line_number":114,"context_line":"                help\u003d\"exclude pools, split by ,\","},{"line_number":115,"context_line":"                default\u003d\"local_vstorage\"),"},{"line_number":116,"context_line":"            ]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_pools(self, cinder):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_a8661cc0","line":115,"range":{"start_line":115,"start_character":25,"end_line":115,"end_character":39},"in_reply_to":"1f485f77_316bccb7","updated":"2017-11-17 02:56:59.000000000","message":"yes","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            cfg.StrOpt("},{"line_number":113,"context_line":"                \"ex_pools\","},{"line_number":114,"context_line":"                help\u003d\"exclude pools, split by ,\","},{"line_number":115,"context_line":"                default\u003d\"local_vstorage\"),"},{"line_number":116,"context_line":"            ]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_pools(self, cinder):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_e1bf8fa7","line":115,"range":{"start_line":115,"start_character":25,"end_line":115,"end_character":39},"in_reply_to":"1f485f77_a8661cc0","updated":"2017-11-17 07:47:29.000000000","message":"Done","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            ]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_pools(self, cinder):"},{"line_number":119,"context_line":"        \"\"\"Get all volume pools."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        :param cinder: cinder client"},{"line_number":122,"context_line":"        :return: volume pools"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_91a160fb","line":119,"updated":"2017-11-16 13:37:00.000000000","message":"except for ex_pools","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            ]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_pools(self, cinder):"},{"line_number":119,"context_line":"        \"\"\"Get all volume pools."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        :param cinder: cinder client"},{"line_number":122,"context_line":"        :return: volume pools"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_a1e3d7d8","line":119,"in_reply_to":"1f485f77_91a160fb","updated":"2017-11-17 07:47:29.000000000","message":"Done","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        return filtered_pools"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def get_volumes(self, cinder):"},{"line_number":131,"context_line":"        \"\"\"Get all volumes with staus in available or in-use."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        :param cinder: cinder client"},{"line_number":134,"context_line":"        :return: all volumes"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_66b50c7e","line":131,"updated":"2017-11-16 13:37:00.000000000","message":"and no snapshot.","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        return filtered_pools"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def get_volumes(self, cinder):"},{"line_number":131,"context_line":"        \"\"\"Get all volumes with staus in available or in-use."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        :param cinder: cinder client"},{"line_number":134,"context_line":"        :return: all volumes"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_81e45be1","line":131,"in_reply_to":"1f485f77_66b50c7e","updated":"2017-11-17 07:47:29.000000000","message":"Done","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        return over_pools, under_pools"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def get_volume_type_by_name(self, cinder, backendname):"},{"line_number":176,"context_line":"        # return list of pool type"},{"line_number":177,"context_line":"        if backendname in self.pool_type_cache.keys():"},{"line_number":178,"context_line":"            return self.pool_type_cache.get(backendname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_51ce48b4","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":31},"updated":"2017-11-16 13:37:00.000000000","message":"get_volume_type_by_backendname is in cinder_helper.\nhttps://github.com/openstack/watcher/blob/master/watcher/common/cinder_helper.py#L73\n\nIf that is not enough or bug, please fix the method in cinder_helper.\nOr please report bug..","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"652d8a8c72c0370bc28e28ddf218660dcafc0027","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        return over_pools, under_pools"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def get_volume_type_by_name(self, cinder, backendname):"},{"line_number":176,"context_line":"        # return list of pool type"},{"line_number":177,"context_line":"        if backendname in self.pool_type_cache.keys():"},{"line_number":178,"context_line":"            return self.pool_type_cache.get(backendname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_88a8008c","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":31},"in_reply_to":"1f485f77_51ce48b4","updated":"2017-11-17 02:56:59.000000000","message":"ok, I will check this method","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        return over_pools, under_pools"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def get_volume_type_by_name(self, cinder, backendname):"},{"line_number":176,"context_line":"        # return list of pool type"},{"line_number":177,"context_line":"        if backendname in self.pool_type_cache.keys():"},{"line_number":178,"context_line":"            return self.pool_type_cache.get(backendname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_c11b737e","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":31},"in_reply_to":"1f485f77_88a8008c","updated":"2017-11-17 07:47:29.000000000","message":"One pool may have more than one volume type. Here I need a list of volume type objects.\nThe method in cinder_helper just retun the first volume type object\u0027s name field. It\u0027s not enough.\nI will report a bug and fix it. then I can use it here.","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"ee468559bdf5c25ed9b9bf4fc257fd2299c39b94","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        return over_pools, under_pools"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def get_volume_type_by_name(self, cinder, backendname):"},{"line_number":176,"context_line":"        # return list of pool type"},{"line_number":177,"context_line":"        if backendname in self.pool_type_cache.keys():"},{"line_number":178,"context_line":"            return self.pool_type_cache.get(backendname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_624b3687","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":31},"in_reply_to":"1f485f77_c11b737e","updated":"2017-11-20 03:22:15.000000000","message":"I\u0027m sorry my understanding about relation between pool and volume type was wrong. \nCinder data model also be affected due to using the method in cinder_helper.\nit may be better that this method remains here and reporting bug about cinder data model separately.","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"4d7da79523de31c3fe421dc1b8087cfc4a2375a2","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        return over_pools, under_pools"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def get_volume_type_by_name(self, cinder, backendname):"},{"line_number":176,"context_line":"        # return list of pool type"},{"line_number":177,"context_line":"        if backendname in self.pool_type_cache.keys():"},{"line_number":178,"context_line":"            return self.pool_type_cache.get(backendname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_89a89ddb","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":31},"in_reply_to":"ff82abbf_624b3687","updated":"2017-11-22 06:00:43.000000000","message":"https://bugs.launchpad.net/watcher/+bug/1733257","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"2e9eaa7dc80187c10e73292f2a114af0b1f319fa","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        return over_pools, under_pools"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def get_volume_type_by_name(self, cinder, backendname):"},{"line_number":176,"context_line":"        # return list of pool type"},{"line_number":177,"context_line":"        if backendname in self.pool_type_cache.keys():"},{"line_number":178,"context_line":"            return self.pool_type_cache.get(backendname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_4a752bf9","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":31},"in_reply_to":"ff82abbf_89a89ddb","updated":"2017-11-28 09:38:27.000000000","message":"Thanks","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"ee468559bdf5c25ed9b9bf4fc257fd2299c39b94","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        target_pool_name \u003d None"},{"line_number":193,"context_line":"        if volume.volume_type:"},{"line_number":194,"context_line":"            LOG.info(\"volume %s type %s\", volume.id, volume.volume_type)"},{"line_number":195,"context_line":"            return target_pool_name"},{"line_number":196,"context_line":"        self.dest_pools.sort("},{"line_number":197,"context_line":"            key\u003dlambda p: float(p.free_capacity_gb) /"},{"line_number":198,"context_line":"            float(p.total_capacity_gb))"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_05703472","line":195,"range":{"start_line":195,"start_character":12,"end_line":195,"end_character":35},"updated":"2017-11-20 03:22:15.000000000","message":"if volume has volume type, always return None. Is this intended?","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"4d7da79523de31c3fe421dc1b8087cfc4a2375a2","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        target_pool_name \u003d None"},{"line_number":193,"context_line":"        if volume.volume_type:"},{"line_number":194,"context_line":"            LOG.info(\"volume %s type %s\", volume.id, volume.volume_type)"},{"line_number":195,"context_line":"            return target_pool_name"},{"line_number":196,"context_line":"        self.dest_pools.sort("},{"line_number":197,"context_line":"            key\u003dlambda p: float(p.free_capacity_gb) /"},{"line_number":198,"context_line":"            float(p.total_capacity_gb))"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_89cf3daf","line":195,"range":{"start_line":195,"start_character":12,"end_line":195,"end_character":35},"in_reply_to":"ff82abbf_05703472","updated":"2017-11-22 06:00:43.000000000","message":"If volume has type, we use \u0027retype\u0027.\n def retype_fit(self, volume, threshold):","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"2e9eaa7dc80187c10e73292f2a114af0b1f319fa","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        target_pool_name \u003d None"},{"line_number":193,"context_line":"        if volume.volume_type:"},{"line_number":194,"context_line":"            LOG.info(\"volume %s type %s\", volume.id, volume.volume_type)"},{"line_number":195,"context_line":"            return target_pool_name"},{"line_number":196,"context_line":"        self.dest_pools.sort("},{"line_number":197,"context_line":"            key\u003dlambda p: float(p.free_capacity_gb) /"},{"line_number":198,"context_line":"            float(p.total_capacity_gb))"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_8a6fb329","line":195,"range":{"start_line":195,"start_character":12,"end_line":195,"end_character":35},"in_reply_to":"ff82abbf_89cf3daf","updated":"2017-11-28 09:38:27.000000000","message":"Thanks, got it.","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    def post_execute(self):"},{"line_number":406,"context_line":"        \"\"\"Post-execution phase"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        This can be used to compute the global efficacy"},{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        # self.solution.model \u003d self.compute_model"},{"line_number":411,"context_line":"        self.pool_type_cache \u003d dict()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_9195e035","line":408,"range":{"start_line":408,"start_character":8,"end_line":408,"end_character":55},"updated":"2017-11-16 13:37:00.000000000","message":"remove this line.","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    def post_execute(self):"},{"line_number":406,"context_line":"        \"\"\"Post-execution phase"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        This can be used to compute the global efficacy"},{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        # self.solution.model \u003d self.compute_model"},{"line_number":411,"context_line":"        self.pool_type_cache \u003d dict()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_e1ed4fb7","line":408,"range":{"start_line":408,"start_character":8,"end_line":408,"end_character":55},"in_reply_to":"1f485f77_9195e035","updated":"2017-11-17 07:47:29.000000000","message":"Done","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"9ef7fa154fe907dd8cf5e381008553e79de2a372","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        This can be used to compute the global efficacy"},{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        # self.solution.model \u003d self.compute_model"},{"line_number":411,"context_line":"        self.pool_type_cache \u003d dict()"},{"line_number":412,"context_line":"        self.source_pools \u003d []"},{"line_number":413,"context_line":"        self.dest_pools \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_31a4eca5","line":410,"range":{"start_line":410,"start_character":8,"end_line":410,"end_character":50},"updated":"2017-11-16 13:37:00.000000000","message":"remove this line.","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"d8edb61e743b4c7bfc56ee116b767a7638bcf22e","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        This can be used to compute the global efficacy"},{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        # self.solution.model \u003d self.compute_model"},{"line_number":411,"context_line":"        self.pool_type_cache \u003d dict()"},{"line_number":412,"context_line":"        self.source_pools \u003d []"},{"line_number":413,"context_line":"        self.dest_pools \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_c12c9303","line":410,"range":{"start_line":410,"start_character":8,"end_line":410,"end_character":50},"in_reply_to":"1f485f77_31a4eca5","updated":"2017-11-17 07:47:29.000000000","message":"Done","commit_id":"6c2cec14422dab5fdb7ea5967fba3254f72fcd4b"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"996b5a0277a8ad38b1c34641d5b6ad6074716bf7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class VolumeWorkloadBalance(base.WorkloadStabilizationBaseStrategy):"},{"line_number":47,"context_line":"    \"\"\"Workload balance using cinder volume migration"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    *Description*"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_ccd25c35","line":46,"range":{"start_line":46,"start_character":6,"end_line":46,"end_character":27},"updated":"2017-12-03 13:35:59.000000000","message":"StorageCapacityBalance","commit_id":"7e8f1f7b0e1933a5f7c81e77fe880ed6a9e3bcdc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"cd1a8efd98272cce3dcc88fb3f8ff0b3ce7dae79","unresolved":false,"context_lines":[{"line_number":43,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class VolumeWorkloadBalance(base.WorkloadStabilizationBaseStrategy):"},{"line_number":47,"context_line":"    \"\"\"Workload balance using cinder volume migration"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    *Description*"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_3b15fb9c","line":46,"range":{"start_line":46,"start_character":6,"end_line":46,"end_character":27},"in_reply_to":"df87a7cf_b82831e2","updated":"2017-12-06 04:15:10.000000000","message":"I agree goal of this strategy is workload_balancing.\nDo you have plan to implement storage capacity balance and storage IO balance in this strategy? I think storage IO balance strategy should be developed apart from storage capacity balance strategy.","commit_id":"7e8f1f7b0e1933a5f7c81e77fe880ed6a9e3bcdc"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"64aa6678b05decd5751709c01aa9e8320b525e91","unresolved":false,"context_lines":[{"line_number":43,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class VolumeWorkloadBalance(base.WorkloadStabilizationBaseStrategy):"},{"line_number":47,"context_line":"    \"\"\"Workload balance using cinder volume migration"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    *Description*"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_b82831e2","line":46,"range":{"start_line":46,"start_character":6,"end_line":46,"end_character":27},"in_reply_to":"df87a7cf_ccd25c35","updated":"2017-12-06 02:55:32.000000000","message":"Storage capacity is just one of the available inputs,\nWe have plan to add storage IO balance in this strategy.","commit_id":"7e8f1f7b0e1933a5f7c81e77fe880ed6a9e3bcdc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"996b5a0277a8ad38b1c34641d5b6ad6074716bf7","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @classmethod"},{"line_number":85,"context_line":"    def get_name(cls):"},{"line_number":86,"context_line":"        return \"volume_workload_balance\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @classmethod"},{"line_number":89,"context_line":"    def get_display_name(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_ec32c0a7","line":86,"range":{"start_line":86,"start_character":16,"end_line":86,"end_character":39},"updated":"2017-12-03 13:35:59.000000000","message":"storage_capacity_balance","commit_id":"7e8f1f7b0e1933a5f7c81e77fe880ed6a9e3bcdc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"996b5a0277a8ad38b1c34641d5b6ad6074716bf7","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @classmethod"},{"line_number":89,"context_line":"    def get_display_name(cls):"},{"line_number":90,"context_line":"        return _(\"Volume Workload Balance Strategy\")"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @classmethod"},{"line_number":93,"context_line":"    def get_translatable_display_name(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_8c277465","line":90,"range":{"start_line":90,"start_character":18,"end_line":90,"end_character":50},"updated":"2017-12-03 13:35:59.000000000","message":"Storage Capacity Balance Strategy","commit_id":"7e8f1f7b0e1933a5f7c81e77fe880ed6a9e3bcdc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"996b5a0277a8ad38b1c34641d5b6ad6074716bf7","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @classmethod"},{"line_number":93,"context_line":"    def get_translatable_display_name(cls):"},{"line_number":94,"context_line":"        return \"Volume Workload Balance Strategy\""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @classmethod"},{"line_number":97,"context_line":"    def get_schema(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_4c216c4d","line":94,"range":{"start_line":94,"start_character":16,"end_line":94,"end_character":48},"updated":"2017-12-03 13:35:59.000000000","message":"Storage Capacity Balance Strategy","commit_id":"7e8f1f7b0e1933a5f7c81e77fe880ed6a9e3bcdc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"996b5a0277a8ad38b1c34641d5b6ad6074716bf7","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        return {"},{"line_number":100,"context_line":"            \"properties\": {"},{"line_number":101,"context_line":"                \"volume_threshold\": {"},{"line_number":102,"context_line":"                    \"description\": \"volume threshold for workload balance\","},{"line_number":103,"context_line":"                    \"type\": \"number\","},{"line_number":104,"context_line":"                    \"default\": 80.0"},{"line_number":105,"context_line":"                },"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_2c18a81b","line":102,"range":{"start_line":102,"start_character":57,"end_line":102,"end_character":73},"updated":"2017-12-03 13:35:59.000000000","message":"capacity balance","commit_id":"7e8f1f7b0e1933a5f7c81e77fe880ed6a9e3bcdc"},{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"8a7949eb06be332f5d008b7bf023010f82b1204e","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        \"\"\""},{"line_number":409,"context_line":"        self.pool_type_cache \u003d dict()"},{"line_number":410,"context_line":"        self.source_pools \u003d []"},{"line_number":411,"context_line":"        self.dest_pools \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_e6a7a4bc","line":410,"updated":"2018-01-17 08:57:38.000000000","message":"significance of this??","commit_id":"e277710dc05551a68fe25440f471deefe5a551a0"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"0c256dfd714e5577d675c1a9ce45661f441aa2fe","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        \"\"\""},{"line_number":409,"context_line":"        self.pool_type_cache \u003d dict()"},{"line_number":410,"context_line":"        self.source_pools \u003d []"},{"line_number":411,"context_line":"        self.dest_pools \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_38eb2478","line":410,"in_reply_to":"7f96bb07_e6a7a4bc","updated":"2018-01-19 03:36:03.000000000","message":"I will remove these codes.","commit_id":"e277710dc05551a68fe25440f471deefe5a551a0"}]}
