)]}'
{"watcher/common/exception.py":[{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"3adbcab85ce3ecd2798b0b290ed00753313b4f0d","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    msg_fmt \u003d _(\"Keystone API endpoint is missing\")"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"class ClusterEmpty(WatcherException):"},{"line_number":362,"context_line":"    msg_fmt \u003d _(\"The list of compute node(s) in the cluster is empty\")"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_23aa09d2","line":361,"updated":"2017-12-13 05:41:52.000000000","message":"IMHO we do need this exception now, ComputeClusterEmpty and StorageClusterEmpty can be directly inherited from Exception","commit_id":"453ab036b298dc307c2e706a7dc75fa8791a1bdd"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"946ff2074233c6a419c17a8ccb6851eb2686e02f","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    msg_fmt \u003d _(\"Keystone API endpoint is missing\")"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"class ClusterEmpty(WatcherException):"},{"line_number":362,"context_line":"    msg_fmt \u003d _(\"The list of compute node(s) in the cluster is empty\")"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf8cb3f7_f8efe7e6","line":361,"in_reply_to":"df87a7cf_23aa09d2","updated":"2017-12-21 02:29:50.000000000","message":"Done","commit_id":"453ab036b298dc307c2e706a7dc75fa8791a1bdd"},{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"3adbcab85ce3ecd2798b0b290ed00753313b4f0d","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    msg_fmt \u003d _(\"The metrics resource collector is not defined\")"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class ClusterStateStale(WatcherException):"},{"line_number":378,"context_line":"    msg_fmt \u003d _(\"The cluster state is stale\")"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_8382f551","line":377,"updated":"2017-12-13 05:41:52.000000000","message":"ditto","commit_id":"453ab036b298dc307c2e706a7dc75fa8791a1bdd"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"946ff2074233c6a419c17a8ccb6851eb2686e02f","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    msg_fmt \u003d _(\"The metrics resource collector is not defined\")"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class ClusterStateStale(WatcherException):"},{"line_number":378,"context_line":"    msg_fmt \u003d _(\"The cluster state is stale\")"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf8cb3f7_18edebee","line":377,"in_reply_to":"df87a7cf_8382f551","updated":"2017-12-21 02:29:50.000000000","message":"Done","commit_id":"453ab036b298dc307c2e706a7dc75fa8791a1bdd"},{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"3adbcab85ce3ecd2798b0b290ed00753313b4f0d","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    msg_fmt \u003d _(\"The cluster data model \u0027%(cdm)s\u0027 could not be built\")"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"class ClusterStateNotDefined(WatcherException):"},{"line_number":394,"context_line":"    msg_fmt \u003d _(\"The cluster state is not defined\")"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_a387f961","line":393,"updated":"2017-12-13 05:41:52.000000000","message":"ditto","commit_id":"453ab036b298dc307c2e706a7dc75fa8791a1bdd"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"946ff2074233c6a419c17a8ccb6851eb2686e02f","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    msg_fmt \u003d _(\"The cluster data model \u0027%(cdm)s\u0027 could not be built\")"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"class ClusterStateNotDefined(WatcherException):"},{"line_number":394,"context_line":"    msg_fmt \u003d _(\"The cluster state is not defined\")"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf8cb3f7_b8bb9fe3","line":393,"in_reply_to":"df87a7cf_a387f961","updated":"2017-12-21 02:29:50.000000000","message":"Done","commit_id":"453ab036b298dc307c2e706a7dc75fa8791a1bdd"}],"watcher/decision_engine/goal/goals.py":[{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"3adbcab85ce3ecd2798b0b290ed00753313b4f0d","unresolved":false,"context_lines":[{"line_number":221,"context_line":"class HardwareMaintenance(base.Goal):"},{"line_number":222,"context_line":"    \"\"\"HardwareMaintenance"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    This goal is to migrate instances and volumes on a set of compute"},{"line_number":225,"context_line":"    nodes and storage."},{"line_number":226,"context_line":"    \"\"\""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_e3ebc1d9","line":225,"range":{"start_line":224,"start_character":4,"end_line":225,"end_character":20},"updated":"2017-12-13 05:41:52.000000000","message":"it is better to write, \u0027This goal is to migrate instances and volumes on a set of compute nodes and storage from nodes under maintenance\u0027","commit_id":"453ab036b298dc307c2e706a7dc75fa8791a1bdd"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"946ff2074233c6a419c17a8ccb6851eb2686e02f","unresolved":false,"context_lines":[{"line_number":221,"context_line":"class HardwareMaintenance(base.Goal):"},{"line_number":222,"context_line":"    \"\"\"HardwareMaintenance"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    This goal is to migrate instances and volumes on a set of compute"},{"line_number":225,"context_line":"    nodes and storage."},{"line_number":226,"context_line":"    \"\"\""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf8cb3f7_78b517ee","line":225,"range":{"start_line":224,"start_character":4,"end_line":225,"end_character":20},"in_reply_to":"df87a7cf_e3ebc1d9","updated":"2017-12-21 02:29:50.000000000","message":"Done","commit_id":"453ab036b298dc307c2e706a7dc75fa8791a1bdd"}],"watcher/decision_engine/strategy/strategies/zone_migration.py":[{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"44f27b76f3c2d4633929b8612d9a4331b6bd8cc4","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        LOG.info(\"Initializing zone migration Strategy\")"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if not self.compute_model:"},{"line_number":271,"context_line":"            raise wexc.ComputeClusterStateNotDefined()"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        if len(self.get_available_compute_nodes()) \u003d\u003d 0:"},{"line_number":274,"context_line":"            raise wexc.ComputeClusterEmpty()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_f21369b7","line":271,"range":{"start_line":270,"start_character":0,"end_line":271,"end_character":54},"updated":"2017-12-22 03:16:59.000000000","message":"I think this is needless.\nIt\u0027s same as\nhttps://github.com/openstack/watcher/blob/master/watcher/decision_engine/strategy/strategies/base.py#L188","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"db9234a9b0fc38ac7d90c6f292d27c18f78409b9","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        LOG.info(\"Initializing zone migration Strategy\")"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if not self.compute_model:"},{"line_number":271,"context_line":"            raise wexc.ComputeClusterStateNotDefined()"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        if len(self.get_available_compute_nodes()) \u003d\u003d 0:"},{"line_number":274,"context_line":"            raise wexc.ComputeClusterEmpty()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_92947dea","line":271,"range":{"start_line":270,"start_character":0,"end_line":271,"end_character":54},"in_reply_to":"bf8cb3f7_cd178745","updated":"2017-12-29 02:36:38.000000000","message":"But if self.compute_model is None, it will raise exception.ClusterStateNotDefined() first.\nso the wexc.ComputeClusterStateNotDefined() will never be thrown.","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f43f75a97fb9449735ae058ac71d55f3da4a0875","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        LOG.info(\"Initializing zone migration Strategy\")"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if not self.compute_model:"},{"line_number":271,"context_line":"            raise wexc.ComputeClusterStateNotDefined()"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        if len(self.get_available_compute_nodes()) \u003d\u003d 0:"},{"line_number":274,"context_line":"            raise wexc.ComputeClusterEmpty()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_cd178745","line":271,"range":{"start_line":270,"start_character":0,"end_line":271,"end_character":54},"in_reply_to":"bf8cb3f7_f21369b7","updated":"2017-12-26 04:48:58.000000000","message":"This is needed if we want to raise exception in pre_execute.\nWithout this exception, we will detect wrong cluster state when we actually use cluster data model.","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"44f27b76f3c2d4633929b8612d9a4331b6bd8cc4","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        if len(self.get_available_compute_nodes()) \u003d\u003d 0:"},{"line_number":274,"context_line":"            raise wexc.ComputeClusterEmpty()"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        if self.compute_model.stale:"},{"line_number":277,"context_line":"            raise wexc.ComputeClusterStateStale()"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if not self.storage_model:"},{"line_number":280,"context_line":"            raise wexc.StorageClusterStateNotDefined()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_d212e5b1","line":277,"range":{"start_line":276,"start_character":1,"end_line":277,"end_character":49},"updated":"2017-12-22 03:16:59.000000000","message":"ditto","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f43f75a97fb9449735ae058ac71d55f3da4a0875","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        if len(self.get_available_compute_nodes()) \u003d\u003d 0:"},{"line_number":274,"context_line":"            raise wexc.ComputeClusterEmpty()"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        if self.compute_model.stale:"},{"line_number":277,"context_line":"            raise wexc.ComputeClusterStateStale()"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if not self.storage_model:"},{"line_number":280,"context_line":"            raise wexc.StorageClusterStateNotDefined()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_8d2bbf80","line":277,"range":{"start_line":276,"start_character":1,"end_line":277,"end_character":49},"in_reply_to":"bf8cb3f7_d212e5b1","updated":"2017-12-26 04:48:58.000000000","message":"Same reason as above.","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"44f27b76f3c2d4633929b8612d9a4331b6bd8cc4","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        if self.compute_model.stale:"},{"line_number":277,"context_line":"            raise wexc.ComputeClusterStateStale()"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if not self.storage_model:"},{"line_number":280,"context_line":"            raise wexc.StorageClusterStateNotDefined()"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        if len(self.get_available_storage_nodes()) \u003d\u003d 0:"},{"line_number":283,"context_line":"            raise wexc.StorageClusterEmpty()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_92245d0f","line":280,"range":{"start_line":279,"start_character":1,"end_line":280,"end_character":54},"updated":"2017-12-22 03:16:59.000000000","message":"ditto\nhttps://github.com/openstack/watcher/blob/master/watcher/decision_engine/strategy/strategies/base.py#L210","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f43f75a97fb9449735ae058ac71d55f3da4a0875","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        if self.compute_model.stale:"},{"line_number":277,"context_line":"            raise wexc.ComputeClusterStateStale()"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if not self.storage_model:"},{"line_number":280,"context_line":"            raise wexc.StorageClusterStateNotDefined()"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        if len(self.get_available_storage_nodes()) \u003d\u003d 0:"},{"line_number":283,"context_line":"            raise wexc.StorageClusterEmpty()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_4d25b7aa","line":280,"range":{"start_line":279,"start_character":1,"end_line":280,"end_character":54},"in_reply_to":"bf8cb3f7_92245d0f","updated":"2017-12-26 04:48:58.000000000","message":"Same reason as above.","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"44f27b76f3c2d4633929b8612d9a4331b6bd8cc4","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        if len(self.get_available_storage_nodes()) \u003d\u003d 0:"},{"line_number":283,"context_line":"            raise wexc.StorageClusterEmpty()"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        if self.storage_model.stale:"},{"line_number":286,"context_line":"            raise wexc.StorageClusterStateStale()"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        LOG.debug(self.compute_model.to_string())"},{"line_number":289,"context_line":"        LOG.debug(self.storage_model.to_string())"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_3221d1fc","line":286,"range":{"start_line":285,"start_character":0,"end_line":286,"end_character":49},"updated":"2017-12-22 03:16:59.000000000","message":"ditto","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f43f75a97fb9449735ae058ac71d55f3da4a0875","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        if len(self.get_available_storage_nodes()) \u003d\u003d 0:"},{"line_number":283,"context_line":"            raise wexc.StorageClusterEmpty()"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        if self.storage_model.stale:"},{"line_number":286,"context_line":"            raise wexc.StorageClusterStateStale()"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        LOG.debug(self.compute_model.to_string())"},{"line_number":289,"context_line":"        LOG.debug(self.storage_model.to_string())"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_ed3b6bce","line":286,"range":{"start_line":285,"start_character":0,"end_line":286,"end_character":49},"in_reply_to":"bf8cb3f7_3221d1fc","updated":"2017-12-26 04:48:58.000000000","message":"Same reason as above.","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"44f27b76f3c2d4633929b8612d9a4331b6bd8cc4","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    def do_execute(self):"},{"line_number":292,"context_line":"        \"\"\"Strategy execution phase"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        This phase is where you should put the main logic of your strategy."},{"line_number":295,"context_line":"        \"\"\""},{"line_number":296,"context_line":"        filtered_targets \u003d self.filtered_targets()"},{"line_number":297,"context_line":"        self.set_migration_count(filtered_targets)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_3276b108","line":294,"range":{"start_line":294,"start_character":8,"end_line":294,"end_character":74},"updated":"2017-12-22 03:16:59.000000000","message":"pls update or remove this message.","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f43f75a97fb9449735ae058ac71d55f3da4a0875","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    def do_execute(self):"},{"line_number":292,"context_line":"        \"\"\"Strategy execution phase"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        This phase is where you should put the main logic of your strategy."},{"line_number":295,"context_line":"        \"\"\""},{"line_number":296,"context_line":"        filtered_targets \u003d self.filtered_targets()"},{"line_number":297,"context_line":"        self.set_migration_count(filtered_targets)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_ad3563dc","line":294,"range":{"start_line":294,"start_character":8,"end_line":294,"end_character":74},"in_reply_to":"bf8cb3f7_3276b108","updated":"2017-12-26 04:48:58.000000000","message":"I will remove this comment.","commit_id":"57e600b7960b341ee766801988fe10a8a22a14ee"}]}
