)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"3173bc47c487a0beba8a77cc414e9ff3542d24e1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     suzhengwei \u003csugar-2008@163.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-01-03 15:18:45 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"enable to segment"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Sometimes, the users want to temporarily close ha function to"},{"line_number":10,"context_line":"specific segment. For example, hardware plug in-out."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_bc48ae2d","line":7,"updated":"2020-01-08 06:58:48.000000000","message":"This need to add the \"WIP\" pre subfix, and add a spec for this change. But the ussuri directory is not merged https://review.opendev.org/#/c/679604/","commit_id":"ae212e774282a0c4658ce00341b42e83c3973ea7"}],"masakari/api/openstack/ha/schemas/segments.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                             \"auto_priority\", \"rh_priority\"]"},{"line_number":33,"context_line":"                },"},{"line_number":34,"context_line":"                \u0027service_type\u0027: parameter_types.name,"},{"line_number":35,"context_line":"                \u0027enabled\u0027: parameter_types.boolean"},{"line_number":36,"context_line":"            },"},{"line_number":37,"context_line":"            \u0027additionalProperties\u0027: False"},{"line_number":38,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_0402f009","line":35,"range":{"start_line":35,"start_character":17,"end_line":35,"end_character":24},"updated":"2020-06-10 05:33:27.000000000","message":"You will need to add enabled parameter only in 1.2 micro-version otherwise user would be able to pass the enabled parameter using old version as well which will break the API compatibility.\n\nSo, simply create a copy of _base and add this parameter in 2.1. \n\n\ncreate_v12 \u003d copy.deepcopy(create) # after line 46.\ncreate_v12[\u0027properties\u0027][\u0027segment\u0027][\u0027properties\u0027][\u0027enabled\u0027]\u003d parameter_types.boolean\n\nThen, in controller, you will need to add schema decorator something like this:\n\n    @validation.schema(schema.create, \"1.0\", \"1.1\")\n    @validation.schema(schema.create_v12, \"1.2\")\n    def create(self, req, body):","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                                            {\u0027required\u0027: [\u0027description\u0027]},"},{"line_number":53,"context_line":"                                            {\u0027required\u0027: [\u0027recovery_method\u0027]},"},{"line_number":54,"context_line":"                                            {\u0027required\u0027: [\u0027service_type\u0027]},"},{"line_number":55,"context_line":"                                            {\u0027required\u0027: [\u0027enabled\u0027]},"},{"line_number":56,"context_line":"                                            ]"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_440ce83a","line":55,"range":{"start_line":55,"start_character":46,"end_line":55,"end_character":54},"updated":"2020-06-10 05:33:27.000000000","message":"Similar to create API, you should add micro-version schema specific changes for update API as well.","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"b3d94bc3c9d9f8bb2da6b32eeb85c8d5b1fd52ef","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                               \u0027service_type\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"create_v12 \u003d copy.deepcopy(create)"},{"line_number":49,"context_line":"create_v12[\u0027properties\u0027][\u0027segment\u0027][\u0027properties\u0027][\u0027enable\u0027] \u003d \\"},{"line_number":50,"context_line":"    parameter_types.boolean"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"update \u003d copy.deepcopy(_base)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_c7393342","line":49,"range":{"start_line":49,"start_character":51,"end_line":49,"end_character":57},"updated":"2020-06-25 03:03:16.000000000","message":"It should be enabled.","commit_id":"24a165ad1a2d26426056ddd790ae714c5c4d81a2"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"b3d94bc3c9d9f8bb2da6b32eeb85c8d5b1fd52ef","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                               \u0027service_type\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"create_v12 \u003d copy.deepcopy(create)"},{"line_number":49,"context_line":"create_v12[\u0027properties\u0027][\u0027segment\u0027][\u0027properties\u0027][\u0027enable\u0027] \u003d \\"},{"line_number":50,"context_line":"    parameter_types.boolean"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"update \u003d copy.deepcopy(_base)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf51134e_d58f9972","line":49,"range":{"start_line":49,"start_character":51,"end_line":49,"end_character":57},"updated":"2020-06-25 03:03:16.000000000","message":"enabled","commit_id":"a8b60bc2e1e5c9527481cf9346a1e8045657cc73"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"b3d94bc3c9d9f8bb2da6b32eeb85c8d5b1fd52ef","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                                            ]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"update_v12 \u003d copy.deepcopy(update)"},{"line_number":60,"context_line":"update_v12[\u0027properties\u0027][\u0027segment\u0027][\u0027anyOf\u0027].append({\u0027required\u0027: [\u0027enable\u0027]})"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf51134e_15ebd112","line":60,"range":{"start_line":60,"start_character":67,"end_line":60,"end_character":73},"updated":"2020-06-25 03:03:16.000000000","message":"enabled","commit_id":"a8b60bc2e1e5c9527481cf9346a1e8045657cc73"}],"masakari/db/sqlalchemy/migrate_repo/versions/007_enabled_to_segments.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2019 NTT Data."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_a24e9793","line":1,"range":{"start_line":1,"start_character":17,"end_line":1,"end_character":26},"updated":"2020-06-10 05:33:27.000000000","message":"Curious: Are you working for NTT DATA?\n\nChange the year from 2019 to 2020.","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"}],"masakari/engine/manager.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        \"\"\"Processes the notification\"\"\""},{"line_number":331,"context_line":"        host \u003d objects.Host.get_by_uuid("},{"line_number":332,"context_line":"            context, notification.source_host_uuid)"},{"line_number":333,"context_line":"        segment \u003d objects.FailoverSegment.get_by_uuid("},{"line_number":334,"context_line":"            context, host.failover_segment_id)"},{"line_number":335,"context_line":"        if not segment.enabled:"},{"line_number":336,"context_line":"            update_data \u003d {"},{"line_number":337,"context_line":"                \u0027status\u0027: fields.NotificationStatus.IGNORED,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_44a868da","line":334,"range":{"start_line":333,"start_character":7,"end_line":334,"end_character":46},"updated":"2020-06-10 05:33:27.000000000","message":"I think you can use host.failover_segment.enabled directly at line #335 instead of getting failover segment again using objects.FailoverSegment.get_by_uuid.","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            notification.update(update_data)"},{"line_number":340,"context_line":"            notification.save()"},{"line_number":341,"context_line":"            msg \u003d (\u0027Notification %(notification_uuid)s of type: %(type)s \u0027"},{"line_number":342,"context_line":"                   \u0027is ignored, because the failover segment is disable.\u0027,"},{"line_number":343,"context_line":"                   {\u0027notification_uuid\u0027: notification.notification_uuid,"},{"line_number":344,"context_line":"                    \u0027type\u0027: notification.type})"},{"line_number":345,"context_line":"            raise exception.FailoverSegmentDisabled(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_84456018","line":342,"range":{"start_line":342,"start_character":64,"end_line":342,"end_character":71},"updated":"2020-06-10 05:33:27.000000000","message":"disabled","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                   \u0027is ignored, because the failover segment is disable.\u0027,"},{"line_number":343,"context_line":"                   {\u0027notification_uuid\u0027: notification.notification_uuid,"},{"line_number":344,"context_line":"                    \u0027type\u0027: notification.type})"},{"line_number":345,"context_line":"            raise exception.FailoverSegmentDisabled(msg)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        self._process_notification(context, notification)"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_e4525cde","line":345,"range":{"start_line":345,"start_character":28,"end_line":345,"end_character":51},"updated":"2020-06-10 05:33:27.000000000","message":"Notifications are processed asychronously  so I don\u0027t think this exception will ever reach controller. So you can simply log a warning message here.\n\nWhat should be the logging level? info or warning is debatable","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1c3a2a287efc36efc8e079a54e2f51d32472ac00","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        \"\"\"Processes the notification\"\"\""},{"line_number":331,"context_line":"        host \u003d objects.Host.get_by_uuid("},{"line_number":332,"context_line":"            context, notification.source_host_uuid)"},{"line_number":333,"context_line":"        segment \u003d objects.FailoverSegment.get_by_uuid("},{"line_number":334,"context_line":"            context, host.failover_segment_id)"},{"line_number":335,"context_line":"        if not host.failover_segment.enabled:"},{"line_number":336,"context_line":"            update_data \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_2c26e417","line":333,"updated":"2020-06-11 09:43:56.000000000","message":"pep8: F841 local variable \u0027segment\u0027 is assigned to but never used","commit_id":"8f53c9fd064c33d26203509b97efdedfbd1f21c4"}],"masakari/ha/api.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        segment.recovery_method \u003d segment_data.get(\u0027recovery_method\u0027)"},{"line_number":95,"context_line":"        segment.service_type \u003d segment_data.get(\u0027service_type\u0027)"},{"line_number":96,"context_line":"        segment.enabled \u003d strutils.bool_from_string("},{"line_number":97,"context_line":"            segment_data.get(\u0027enable\u0027, True), strict\u003dTrue)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            segment.create()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_64580cfa","line":97,"range":{"start_line":97,"start_character":30,"end_line":97,"end_character":36},"updated":"2020-06-10 05:33:27.000000000","message":"enabled","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"}],"masakari/notifications/objects/notification.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"b3d94bc3c9d9f8bb2da6b32eeb85c8d5b1fd52ef","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027enabled\u0027: (\u0027segment\u0027, \u0027enabled\u0027),"},{"line_number":31,"context_line":"    }"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    # Version 1.1: Add \u0027enable\u0027 field"},{"line_number":34,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf51134e_d5e4b93e","line":33,"range":{"start_line":33,"start_character":24,"end_line":33,"end_character":30},"updated":"2020-06-25 03:03:16.000000000","message":"enabled","commit_id":"a8b60bc2e1e5c9527481cf9346a1e8045657cc73"}],"masakari/objects/segment.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class FailoverSegment(base.MasakariPersistentObject, base.MasakariObject,"},{"line_number":31,"context_line":"                      base.MasakariObjectDictCompat):"},{"line_number":32,"context_line":"    # 1.0, init"},{"line_number":33,"context_line":"    # 1.1, add enabled filed"},{"line_number":34,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_843600e7","line":33,"range":{"start_line":33,"start_character":23,"end_line":33,"end_character":28},"updated":"2020-06-10 05:33:27.000000000","message":"nit: field","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"952339b74741034743e4b74a37944d246c2b69d5","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":39,"context_line":"        \u0027name\u0027: fields.StringField(),"},{"line_number":40,"context_line":"        \u0027service_type\u0027: fields.StringField(),"},{"line_number":41,"context_line":"        \u0027enabled\u0027: fields.BooleanField(),"},{"line_number":42,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":43,"context_line":"        \u0027recovery_method\u0027: fields.FailoverSegmentRecoveryMethodField(),"},{"line_number":44,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_6455acfa","line":41,"range":{"start_line":41,"start_character":9,"end_line":41,"end_character":16},"updated":"2020-06-10 05:33:27.000000000","message":"Since you are adding a new field, you will need to implement obj_make_compatible  method to make sure the data received by masakari engine running in older version get information in old version itself otherwise it would fail.\n\nI think this issue is master code for Host and Notification objects.\n\nReference code: https://github.com/openstack/tacker/blob/master/tacker/objects/vnf_package.py#L334","commit_id":"ff06c2305889039d25092b61d217eeda799bd786"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"b3d94bc3c9d9f8bb2da6b32eeb85c8d5b1fd52ef","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":40,"context_line":"        \u0027name\u0027: fields.StringField(),"},{"line_number":41,"context_line":"        \u0027service_type\u0027: fields.StringField(),"},{"line_number":42,"context_line":"        \u0027enabled\u0027: fields.BooleanField(),"},{"line_number":43,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":44,"context_line":"        \u0027recovery_method\u0027: fields.FailoverSegmentRecoveryMethodField(),"},{"line_number":45,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf51134e_550d49e6","line":42,"range":{"start_line":42,"start_character":38,"end_line":42,"end_character":41},"updated":"2020-06-25 03:03:16.000000000","message":"Set default value to True.","commit_id":"a8b60bc2e1e5c9527481cf9346a1e8045657cc73"}],"masakari/tests/unit/objects/test_segments.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1c3a2a287efc36efc8e079a54e2f51d32472ac00","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        mock_notify_about_segment_api.assert_has_calls(notify_calls)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":289,"context_line":"        segment_obj \u003d self._host_create_attributes2()"},{"line_number":290,"context_line":"        segment_obj \u003d segment.FailoverSegment(context\u003dself.context)"},{"line_number":291,"context_line":"        segment_obj.name \u003d \"foo-segment\""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_0c2160fd","line":288,"updated":"2020-06-11 09:43:56.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"8f53c9fd064c33d26203509b97efdedfbd1f21c4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1c3a2a287efc36efc8e079a54e2f51d32472ac00","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        self.assertIn(\u0027enabled\u0027, primitive[\u0027masakari_object.data\u0027])"},{"line_number":297,"context_line":"        primitive \u003d segment_obj.obj_to_primitive(\u00271.0\u0027)"},{"line_number":298,"context_line":"        self.assertNotIn(\u0027enabled\u0027, primitive[\u0027masakari_object.data\u0027])"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_6c20dcf8","line":299,"updated":"2020-06-11 09:43:56.000000000","message":"pep8: W391 blank line at end of file","commit_id":"8f53c9fd064c33d26203509b97efdedfbd1f21c4"}]}
