)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"ddb9732061aa8c333d50f519b8e4bef25514b703","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"extend-node-status"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"add \u0027UNKNOWN\u0027 status in compute CDM, for compute nodes disabled"},{"line_number":10,"context_line":"not by watcher, so no audit will react on them."},{"line_number":11,"context_line":"When a node is \"disabled\", we can use \"disabled_reason\"(prefix `watcher_`)"},{"line_number":12,"context_line":"to specify the compute nodes disabled by watcher. When building compute CDM,"},{"line_number":13,"context_line":"if the disabled nodes with \u0027disabled_reason\u0027 \u0027watcher_disabled\u0027, we set them"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"7f287b81_18610606","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":47},"updated":"2017-08-29 14:28:21.000000000","message":"add \u0027UNKNOWN\u0027 status in compute CDM to describe a status where a compute node is not disabled by watcher. And an audit will not react on compute nodes with \u0027UNKNOWN\u0027 status.","commit_id":"859ba551cc3dd217b89297b99c5bbb797fd7a418"}],"watcher/applier/actions/change_nova_service_state.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"46ec81d5a6f095acf3a87f76e51b8f54d3466d15","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if state is True:"},{"line_number":95,"context_line":"            return nova.enable_service_nova_compute(self.host)"},{"line_number":96,"context_line":"        else:"},{"line_number":97,"context_line":"            reason \u003d \u0027watcher_disabled\u0027"},{"line_number":98,"context_line":"            return nova.disable_service_nova_compute(self.host, reason)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def pre_condition(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_f35b7d2b","line":97,"range":{"start_line":97,"start_character":12,"end_line":97,"end_character":39},"updated":"2017-05-16 09:47:11.000000000","message":"no need to introduce new variable at all","commit_id":"465963ec3bc871d23599f9379e4c1cdf7a380c8a"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"db9b6335acc0bd7f5bf0618732c207e72e62fdd9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if state is True:"},{"line_number":95,"context_line":"            return nova.enable_service_nova_compute(self.host)"},{"line_number":96,"context_line":"        else:"},{"line_number":97,"context_line":"            reason \u003d \u0027watcher_disabled\u0027"},{"line_number":98,"context_line":"            return nova.disable_service_nova_compute(self.host, reason)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def pre_condition(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_2e0bbc8e","line":97,"range":{"start_line":97,"start_character":12,"end_line":97,"end_character":39},"in_reply_to":"1f013ff3_f35b7d2b","updated":"2017-05-16 10:40:49.000000000","message":"If the administrator disable the nova-compute for private purpose, how to set apart from watcher optim?\nI think we should not optim these nodes disabled for private reason except that watcher disabled them.","commit_id":"465963ec3bc871d23599f9379e4c1cdf7a380c8a"},{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"2cb96b657bf3c68022d8642e81610bbe797ca12b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    The `resource_id` references a nova-compute service name (list of available"},{"line_number":42,"context_line":"    nova-compute services is returned by this command: ``nova service-list"},{"line_number":43,"context_line":"    --binary nova-compute``)."},{"line_number":44,"context_line":"    The `state` value should either be `ONLINE` or `OFFLINE`."},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    STATE \u003d \u0027state\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f287b81_bbcc456a","line":44,"updated":"2017-09-07 08:00:09.000000000","message":"add details about disabled_reason field in comment section and its valid values","commit_id":"d27cf124f6a6fd29808631a5fbc8bf7808bb2798"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"e32d34fad87098c8ae5dd61458e040dc059c1b97","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    The `resource_id` references a nova-compute service name (list of available"},{"line_number":42,"context_line":"    nova-compute services is returned by this command: ``nova service-list"},{"line_number":43,"context_line":"    --binary nova-compute``)."},{"line_number":44,"context_line":"    The `state` value should either be `ONLINE` or `OFFLINE`."},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    STATE \u003d \u0027state\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f287b81_b3fa2940","line":44,"in_reply_to":"7f287b81_bbcc456a","updated":"2017-09-07 10:01:24.000000000","message":"Done","commit_id":"d27cf124f6a6fd29808631a5fbc8bf7808bb2798"}],"watcher/common/nova_helper.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"46ec81d5a6f095acf3a87f76e51b8f54d3466d15","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def disable_service_nova_compute(self, hostname, reason\u003dNone):"},{"line_number":444,"context_line":"        if reason:"},{"line_number":445,"context_line":"            if self.nova.services.disable_log_reason(host\u003dhostname,"},{"line_number":446,"context_line":"                                                     binary\u003d\u0027nova-compute\u0027,"},{"line_number":447,"context_line":"                                                     reason\u003dreason). \\"},{"line_number":448,"context_line":"                    status \u003d\u003d \u0027disabled\u0027:"},{"line_number":449,"context_line":"                return True"},{"line_number":450,"context_line":"            else:"},{"line_number":451,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_f3f7fdf4","line":448,"range":{"start_line":445,"start_character":12,"end_line":448,"end_character":40},"updated":"2017-05-16 09:47:11.000000000","message":"Just re-indent like this\n    if self.nova.services.disable_log_reason(\n        host\u003dhostname,\n        binary\u003d\u0027nova-compute\u0027,\n        reason\u003dreason).status \u003d\u003d \u0027disabled\u0027:","commit_id":"465963ec3bc871d23599f9379e4c1cdf7a380c8a"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"1be2f0d165756b6c4aac28f9cac536160b67b97a","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                return True"},{"line_number":450,"context_line":"            else:"},{"line_number":451,"context_line":"                return False"},{"line_number":452,"context_line":"        else:"},{"line_number":453,"context_line":"            if self.nova.services.disable(host\u003dhostname,"},{"line_number":454,"context_line":"                                          binary\u003d\u0027nova-compute\u0027). \\"},{"line_number":455,"context_line":"                    status \u003d\u003d \u0027disabled\u0027:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_bd9f044f","line":452,"range":{"start_line":452,"start_character":8,"end_line":452,"end_character":13},"updated":"2017-05-16 08:56:34.000000000","message":"the \"else\" clause here is not necessary since you return in both previous branches","commit_id":"465963ec3bc871d23599f9379e4c1cdf7a380c8a"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"1be2f0d165756b6c4aac28f9cac536160b67b97a","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            else:"},{"line_number":451,"context_line":"                return False"},{"line_number":452,"context_line":"        else:"},{"line_number":453,"context_line":"            if self.nova.services.disable(host\u003dhostname,"},{"line_number":454,"context_line":"                                          binary\u003d\u0027nova-compute\u0027). \\"},{"line_number":455,"context_line":"                    status \u003d\u003d \u0027disabled\u0027:"},{"line_number":456,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_1d35d846","line":453,"range":{"start_line":453,"start_character":15,"end_line":453,"end_character":41},"updated":"2017-05-16 08:56:34.000000000","message":"Is there a reason for keeping both disable_log_reason() and disable() ?\nUnless there is something I am missing disable_log_reason() can actually handle both the case where you have a reason and the case where no reason has been given, which makes disable() redundant.","commit_id":"465963ec3bc871d23599f9379e4c1cdf7a380c8a"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"db9b6335acc0bd7f5bf0618732c207e72e62fdd9","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            else:"},{"line_number":451,"context_line":"                return False"},{"line_number":452,"context_line":"        else:"},{"line_number":453,"context_line":"            if self.nova.services.disable(host\u003dhostname,"},{"line_number":454,"context_line":"                                          binary\u003d\u0027nova-compute\u0027). \\"},{"line_number":455,"context_line":"                    status \u003d\u003d \u0027disabled\u0027:"},{"line_number":456,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_6ec6646a","line":453,"range":{"start_line":453,"start_character":15,"end_line":453,"end_character":41},"in_reply_to":"1f013ff3_1d35d846","updated":"2017-05-16 10:40:49.000000000","message":"yes, no need to keep both method.","commit_id":"465963ec3bc871d23599f9379e4c1cdf7a380c8a"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"46ec81d5a6f095acf3a87f76e51b8f54d3466d15","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                return False"},{"line_number":452,"context_line":"        else:"},{"line_number":453,"context_line":"            if self.nova.services.disable(host\u003dhostname,"},{"line_number":454,"context_line":"                                          binary\u003d\u0027nova-compute\u0027). \\"},{"line_number":455,"context_line":"                    status \u003d\u003d \u0027disabled\u0027:"},{"line_number":456,"context_line":"                return True"},{"line_number":457,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_b3d97584","line":454,"range":{"start_line":454,"start_character":56,"end_line":454,"end_character":67},"updated":"2017-05-16 09:47:11.000000000","message":"same here","commit_id":"465963ec3bc871d23599f9379e4c1cdf7a380c8a"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"37c448b78af2a02bd9482e59efbe77581e17a832","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def enable_service_nova_compute(self, hostname):"},{"line_number":543,"context_line":"        if self.nova.services.enable(host\u003dhostname,"},{"line_number":544,"context_line":"                                     binary\u003d\u0027nova-compute\u0027). \\"},{"line_number":545,"context_line":"                status \u003d\u003d \u0027enabled\u0027:"},{"line_number":546,"context_line":"            return True"},{"line_number":547,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_0611b852","line":544,"updated":"2017-11-16 12:52:04.000000000","message":"Could you add reason\u003d\u0027watcher-watcher_disabled\u0027 ?\nBecause our use case is \"We want watcher to enable a compute node which is disabled by watcher not by others. \"","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"59ad7f75a4e3a1d2a25c728bbcd230985d6022ee","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def enable_service_nova_compute(self, hostname):"},{"line_number":543,"context_line":"        if self.nova.services.enable(host\u003dhostname,"},{"line_number":544,"context_line":"                                     binary\u003d\u0027nova-compute\u0027). \\"},{"line_number":545,"context_line":"                status \u003d\u003d \u0027enabled\u0027:"},{"line_number":546,"context_line":"            return True"},{"line_number":547,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_2657145b","line":544,"in_reply_to":"1f485f77_0611b852","updated":"2017-11-16 13:16:43.000000000","message":"nova-compute enable without disable_reason.","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"0df96772c1e0c10ee654b105e7f031d83571a5aa","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def enable_service_nova_compute(self, hostname):"},{"line_number":543,"context_line":"        if self.nova.services.enable(host\u003dhostname,"},{"line_number":544,"context_line":"                                     binary\u003d\u0027nova-compute\u0027). \\"},{"line_number":545,"context_line":"                status \u003d\u003d \u0027enabled\u0027:"},{"line_number":546,"context_line":"            return True"},{"line_number":547,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_7e245faf","line":544,"in_reply_to":"1f485f77_2657145b","updated":"2017-11-16 23:34:30.000000000","message":"Sorry completely I am wrong.","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"37c448b78af2a02bd9482e59efbe77581e17a832","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        else:"},{"line_number":548,"context_line":"            return False"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    def disable_service_nova_compute(self, hostname, reason\u003dNone):"},{"line_number":551,"context_line":"        if self.nova.services.disable_log_reason(host\u003dhostname,"},{"line_number":552,"context_line":"                                                 binary\u003d\u0027nova-compute\u0027,"},{"line_number":553,"context_line":"                                                 reason\u003dreason). \\"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_4659f032","line":550,"range":{"start_line":550,"start_character":53,"end_line":550,"end_character":64},"updated":"2017-11-16 12:52:04.000000000","message":"argument is not need because reason is only allowed \u0027watcher_disabled\u0027.","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"59ad7f75a4e3a1d2a25c728bbcd230985d6022ee","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        else:"},{"line_number":548,"context_line":"            return False"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    def disable_service_nova_compute(self, hostname, reason\u003dNone):"},{"line_number":551,"context_line":"        if self.nova.services.disable_log_reason(host\u003dhostname,"},{"line_number":552,"context_line":"                                                 binary\u003d\u0027nova-compute\u0027,"},{"line_number":553,"context_line":"                                                 reason\u003dreason). \\"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_a6642423","line":550,"range":{"start_line":550,"start_character":53,"end_line":550,"end_character":64},"in_reply_to":"1f485f77_4659f032","updated":"2017-11-16 13:16:43.000000000","message":"nova-compute disable with disable_reason, and the disable_reason is pass on from change_nova_service_state action. It doesn\u0027t restrict to the specific reason here, because there will be other reason in future, such as \u0027watcher_maintaining\u0027.","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"0df96772c1e0c10ee654b105e7f031d83571a5aa","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        else:"},{"line_number":548,"context_line":"            return False"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    def disable_service_nova_compute(self, hostname, reason\u003dNone):"},{"line_number":551,"context_line":"        if self.nova.services.disable_log_reason(host\u003dhostname,"},{"line_number":552,"context_line":"                                                 binary\u003d\u0027nova-compute\u0027,"},{"line_number":553,"context_line":"                                                 reason\u003dreason). \\"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_3e3f07b5","line":550,"range":{"start_line":550,"start_character":53,"end_line":550,"end_character":64},"in_reply_to":"1f485f77_a6642423","updated":"2017-11-16 23:34:30.000000000","message":"OK, this is helper method.","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"}],"watcher/decision_engine/model/collector/nova.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"0601072adcec558b0ad6eced93f1b2c1422519e2","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        if compute_service.status \u003d\u003d \u0027enabled\u0027:"},{"line_number":146,"context_line":"            service_status \u003d element.ServiceState.ENABLED.value"},{"line_number":147,"context_line":"        elif compute_service.disabled_reason \u003d\u003d \u0027watcher_disabled\u0027:"},{"line_number":148,"context_line":"            service_status \u003d element.ServiceState.DISABLED.value"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            return False"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        node_attributes[\"status\"] \u003d service_status"},{"line_number":153,"context_line":"        compute_node \u003d element.ComputeNode(**node_attributes)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f013ff3_492ba2ea","line":150,"range":{"start_line":148,"start_character":12,"end_line":150,"end_character":24},"updated":"2017-05-16 15:26:55.000000000","message":"As I said in another PS I would rather have this piece of logic within each strategy. If you then want to centralize it, maybe you can add a new high-level get method/flag that will do exactly that but explicitly.","commit_id":"c6f61edc860e832748e6bfd066f55238db62dfb5"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"c1d4259fefbe550088b6056defae9b9a4dde47b9","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        if compute_service.status \u003d\u003d \u0027enabled\u0027:"},{"line_number":146,"context_line":"            service_status \u003d element.ServiceState.ENABLED.value"},{"line_number":147,"context_line":"        elif compute_service.disabled_reason \u003d\u003d \u0027watcher_disabled\u0027:"},{"line_number":148,"context_line":"            service_status \u003d element.ServiceState.DISABLED.value"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            return False"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        node_attributes[\"status\"] \u003d service_status"},{"line_number":153,"context_line":"        compute_node \u003d element.ComputeNode(**node_attributes)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f013ff3_59f35974","line":150,"range":{"start_line":148,"start_character":12,"end_line":150,"end_character":24},"in_reply_to":"1f013ff3_492ba2ea","updated":"2017-05-17 02:34:30.000000000","message":"The CDM is built generally above all strategies. It\u0027s not proper to limited to a specific strategy.\nMaybe here, we can import a \"unknown\" state for compute node disabled by unknown reason.","commit_id":"c6f61edc860e832748e6bfd066f55238db62dfb5"}],"watcher/decision_engine/model/element/node.py":[{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"37c448b78af2a02bd9482e59efbe77581e17a832","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \"id\": wfields.NonNegativeIntegerField(),"},{"line_number":37,"context_line":"        \"hostname\": wfields.StringField(),"},{"line_number":38,"context_line":"        \"status\": wfields.StringField(default\u003dServiceState.ENABLED.value),"},{"line_number":39,"context_line":"        \"disabled_reason\": wfields.StringField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \"state\": wfields.StringField(default\u003dServiceState.ONLINE.value),"},{"line_number":41,"context_line":"        \"memory\": wfields.NonNegativeIntegerField(),"},{"line_number":42,"context_line":"        \"disk\": wfields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_208a5cbe","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":25},"updated":"2017-11-16 12:52:04.000000000","message":"i prefer disabled_reason is under \"state\" or above \"status\".","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"},{"author":{"_account_id":24501,"name":"sue","display_name":"suzhengwei","email":"sugar-2008@163.com","username":"suzhengwei"},"change_message_id":"59ad7f75a4e3a1d2a25c728bbcd230985d6022ee","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \"id\": wfields.NonNegativeIntegerField(),"},{"line_number":37,"context_line":"        \"hostname\": wfields.StringField(),"},{"line_number":38,"context_line":"        \"status\": wfields.StringField(default\u003dServiceState.ENABLED.value),"},{"line_number":39,"context_line":"        \"disabled_reason\": wfields.StringField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \"state\": wfields.StringField(default\u003dServiceState.ONLINE.value),"},{"line_number":41,"context_line":"        \"memory\": wfields.NonNegativeIntegerField(),"},{"line_number":42,"context_line":"        \"disk\": wfields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_3114ec43","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":25},"in_reply_to":"1f485f77_208a5cbe","updated":"2017-11-16 13:16:43.000000000","message":"The disable_reason is associated with \u0027disabled\u0027 status. It doesn\u0027t matter wherever settled, because they are equal in the fields.","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"0df96772c1e0c10ee654b105e7f031d83571a5aa","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \"id\": wfields.NonNegativeIntegerField(),"},{"line_number":37,"context_line":"        \"hostname\": wfields.StringField(),"},{"line_number":38,"context_line":"        \"status\": wfields.StringField(default\u003dServiceState.ENABLED.value),"},{"line_number":39,"context_line":"        \"disabled_reason\": wfields.StringField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \"state\": wfields.StringField(default\u003dServiceState.ONLINE.value),"},{"line_number":41,"context_line":"        \"memory\": wfields.NonNegativeIntegerField(),"},{"line_number":42,"context_line":"        \"disk\": wfields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f485f77_7e721faf","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":25},"in_reply_to":"1f485f77_3114ec43","updated":"2017-11-16 23:34:30.000000000","message":"I accept it does not matter.","commit_id":"74bc31e562044a7b5eacf8e65d7b5feaf83bec56"}]}
