)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"798fa18d7496de9fcfef8a9c7e98700060f4bf13","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Notification versioned object expects \u0027failover_segment_uuid\u0027 to"},{"line_number":10,"context_line":"be non-nullable, which causes a ValueError (500 Server Error) when"},{"line_number":11,"context_line":"retrieving a list of older notifications or notifications where this field"},{"line_number":12,"context_line":"is empty in the database."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch updates the field definition to allow nullable values,"},{"line_number":15,"context_line":"removes a duplicate field definition from the object, updates the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"0c991bbf_1ddf0a86","line":12,"range":{"start_line":11,"start_character":64,"end_line":12,"end_character":24},"updated":"2026-07-14 16:32:29.000000000","message":"Should we also update masakari.db.sqlalchemy.models.Notification ?","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"21eae58191f70190b7eb44f6f0fe2ca944e5b969","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Notification versioned object expects \u0027failover_segment_uuid\u0027 to"},{"line_number":10,"context_line":"be non-nullable, which causes a ValueError (500 Server Error) when"},{"line_number":11,"context_line":"retrieving a list of older notifications or notifications where this field"},{"line_number":12,"context_line":"is empty in the database."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch updates the field definition to allow nullable values,"},{"line_number":15,"context_line":"removes a duplicate field definition from the object, updates the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"ea04755d_7d646460","line":12,"range":{"start_line":11,"start_character":64,"end_line":12,"end_character":24},"in_reply_to":"0c991bbf_1ddf0a86","updated":"2026-09-01 09:40:45.000000000","message":"yeah, the column is declared as nullable in the model, but AFAIU the upgrade script does not define it as such... \n\nhttps://opendev.org/openstack/masakari/src/branch/master/masakari/db/sqlalchemy/migrations/versions/13adff5efb9a_extend_notification_table.py\n\nthus how the tables are created usually in OpenStack (running all migrations from empty DB, instead of instantiating from current schema), the actual column is still nullable, even though the SQLA model is not..\n\nFixed.","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"d869125957b762301abff070eeb38ad5efcf3be7","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Notification versioned object expects \u0027failover_segment_uuid\u0027 to"},{"line_number":10,"context_line":"be non-nullable, which causes a ValueError (500 Server Error) when"},{"line_number":11,"context_line":"retrieving a list of older notifications or notifications where this field"},{"line_number":12,"context_line":"is empty in the database."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch updates the field definition to allow nullable values,"},{"line_number":15,"context_line":"removes a duplicate field definition from the object, updates the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"ff5f0be8_b58a5add","line":12,"range":{"start_line":11,"start_character":64,"end_line":12,"end_character":24},"in_reply_to":"ea04755d_7d646460","updated":"2026-09-01 10:24:30.000000000","message":"correction - model declared column as non-nullable, but the migration script does not declare anything, which according to SQLA docs is the same as nullable\u003dTrue in this case (column has no primary key and no Identity https://docs.sqlalchemy.org/en/21/core/metadata.html#sqlalchemy.schema.Column.params.nullable )","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"798fa18d7496de9fcfef8a9c7e98700060f4bf13","unresolved":true,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch updates the field definition to allow nullable values,"},{"line_number":15,"context_line":"removes a duplicate field definition from the object, updates the"},{"line_number":16,"context_line":"object version to 1.2, and includes corresponding unit tests to verify"},{"line_number":17,"context_line":"the fix."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: #2150102"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"a50f555c_3058f356","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":21},"updated":"2026-07-14 16:32:29.000000000","message":"You should bump the version to 1.3 iiuc.","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"21eae58191f70190b7eb44f6f0fe2ca944e5b969","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch updates the field definition to allow nullable values,"},{"line_number":15,"context_line":"removes a duplicate field definition from the object, updates the"},{"line_number":16,"context_line":"object version to 1.2, and includes corresponding unit tests to verify"},{"line_number":17,"context_line":"the fix."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: #2150102"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fc2b86f3_4edcac9b","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":21},"in_reply_to":"a50f555c_3058f356","updated":"2026-09-01 09:40:45.000000000","message":"Done","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0cd01250f46b491a7c065b1e9904546d025a64ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4faf86b0_2cb47e1b","updated":"2026-07-17 14:22:09.000000000","message":"Some of my previous comments are not yet addressed. Please consider marking the comments \"Done\" once your update addresses these.","commit_id":"a2e300d87e62690708f808c124199c61e9648446"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"21eae58191f70190b7eb44f6f0fe2ca944e5b969","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e5bc4af1_e537cc78","updated":"2026-09-01 09:40:45.000000000","message":"We\u0027ve struck the same bug on upgrade to Gazpacho","commit_id":"8191dda4022b5d7496f08f913fc0cd09b605b0c6"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"97bd467d63d69aaf57efd8b9b4001e5797c7fdd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"c7da2d6e_c15d140f","updated":"2026-09-02 07:08:49.000000000","message":"lgtm","commit_id":"8191dda4022b5d7496f08f913fc0cd09b605b0c6"}],"masakari/objects/notification.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"798fa18d7496de9fcfef8a9c7e98700060f4bf13","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        \u0027type\u0027: fields.NotificationTypeField(),"},{"line_number":49,"context_line":"        \u0027payload\u0027: fields.DictOfStringsField(),"},{"line_number":50,"context_line":"        \u0027status\u0027: fields.NotificationStatusField(),"},{"line_number":51,"context_line":"        # NOTE(ShilpaSD): This field shouldn\u0027t be stored in db."},{"line_number":52,"context_line":"        # The recovery workflow details read from the \u0027notification_driver\u0027"},{"line_number":53,"context_line":"        # will be set to this field."},{"line_number":54,"context_line":"        \u0027recovery_workflow_details\u0027: fields.ListOfObjectsField("},{"line_number":55,"context_line":"            \u0027NotificationProgressDetails\u0027, default\u003d[]),"},{"line_number":56,"context_line":"        \u0027failover_segment_uuid\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"851e6ed4_5a125ba8","side":"PARENT","line":53,"range":{"start_line":51,"start_character":8,"end_line":53,"end_character":36},"updated":"2026-07-14 16:32:29.000000000","message":"why is this removed ?","commit_id":"b6364924009e7ef45653fcc49ff896816fc21751"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"21eae58191f70190b7eb44f6f0fe2ca944e5b969","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \u0027type\u0027: fields.NotificationTypeField(),"},{"line_number":49,"context_line":"        \u0027payload\u0027: fields.DictOfStringsField(),"},{"line_number":50,"context_line":"        \u0027status\u0027: fields.NotificationStatusField(),"},{"line_number":51,"context_line":"        # NOTE(ShilpaSD): This field shouldn\u0027t be stored in db."},{"line_number":52,"context_line":"        # The recovery workflow details read from the \u0027notification_driver\u0027"},{"line_number":53,"context_line":"        # will be set to this field."},{"line_number":54,"context_line":"        \u0027recovery_workflow_details\u0027: fields.ListOfObjectsField("},{"line_number":55,"context_line":"            \u0027NotificationProgressDetails\u0027, default\u003d[]),"},{"line_number":56,"context_line":"        \u0027failover_segment_uuid\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa9bff6_a73ea59f","side":"PARENT","line":53,"range":{"start_line":51,"start_character":8,"end_line":53,"end_character":36},"in_reply_to":"851e6ed4_5a125ba8","updated":"2026-09-01 09:40:45.000000000","message":"comment re-instated","commit_id":"b6364924009e7ef45653fcc49ff896816fc21751"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"798fa18d7496de9fcfef8a9c7e98700060f4bf13","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        \u0027payload\u0027: fields.DictOfStringsField(),"},{"line_number":50,"context_line":"        \u0027status\u0027: fields.NotificationStatusField(),"},{"line_number":51,"context_line":"        \u0027failover_segment_uuid\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(),"},{"line_number":53,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027recovery_workflow_details\u0027: fields.ListOfObjectsField("},{"line_number":55,"context_line":"            \u0027NotificationProgressDetails\u0027, default\u003d[]),"},{"line_number":56,"context_line":"        \u0027message\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":8,"id":"905bfc08_665346a6","line":53,"range":{"start_line":52,"start_character":0,"end_line":53,"end_character":58},"updated":"2026-07-14 16:32:29.000000000","message":"IIRC these are not needed as long as these are defined in the parent. Did you see any actual problem caused by this ?","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"21eae58191f70190b7eb44f6f0fe2ca944e5b969","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \u0027payload\u0027: fields.DictOfStringsField(),"},{"line_number":50,"context_line":"        \u0027status\u0027: fields.NotificationStatusField(),"},{"line_number":51,"context_line":"        \u0027failover_segment_uuid\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(),"},{"line_number":53,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027recovery_workflow_details\u0027: fields.ListOfObjectsField("},{"line_number":55,"context_line":"            \u0027NotificationProgressDetails\u0027, default\u003d[]),"},{"line_number":56,"context_line":"        \u0027message\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":8,"id":"dcf2dfe1_e79a7173","line":53,"range":{"start_line":52,"start_character":0,"end_line":53,"end_character":58},"in_reply_to":"905bfc08_665346a6","updated":"2026-09-01 09:40:45.000000000","message":"Done","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"}],"masakari/tests/unit/objects/test_notification_failover_segment.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import uuid"},{"line_number":2,"context_line":"from datetime import datetime"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from masakari.objects import notification"}],"source_content_type":"text/x-python","patch_set":1,"id":"e4328ffd_33a20224","line":1,"updated":"2026-07-07 06:53:12.000000000","message":"linters: H102: Apache 2.0 license header not found","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import uuid"},{"line_number":2,"context_line":"from datetime import datetime"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from masakari.objects import notification"}],"source_content_type":"text/x-python","patch_set":1,"id":"7fbf5ded_a2f23970","line":1,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import uuid"},{"line_number":2,"context_line":"from datetime import datetime"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from masakari.objects import notification"},{"line_number":5,"context_line":"from masakari.tests.unit import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"68e3a858_2e433def","line":2,"updated":"2026-07-07 06:53:12.000000000","message":"linters: H306: imports not in alphabetical order (uuid, datetime.datetime)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import uuid"},{"line_number":2,"context_line":"from datetime import datetime"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from masakari.objects import notification"},{"line_number":5,"context_line":"from masakari.tests.unit import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"e3cfd49f_be255f84","line":2,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: H306: imports not in alphabetical order (uuid, datetime.datetime)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    def test_notification_has_failover_segment_uuid_field(self):"},{"line_number":12,"context_line":"        \"\"\"Verify notification object has failover_segment_uuid field.\"\"\""},{"line_number":13,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, "},{"line_number":14,"context_line":"                      notification.Notification.fields)"},{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e23e2a71_2705c660","line":13,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W291 trailing whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    def test_notification_has_failover_segment_uuid_field(self):"},{"line_number":12,"context_line":"        \"\"\"Verify notification object has failover_segment_uuid field.\"\"\""},{"line_number":13,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, "},{"line_number":14,"context_line":"                      notification.Notification.fields)"},{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c8083eb_2a797d03","line":13,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W291 trailing whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":12,"context_line":"        \"\"\"Verify notification object has failover_segment_uuid field.\"\"\""},{"line_number":13,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, "},{"line_number":14,"context_line":"                      notification.Notification.fields)"},{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a0a5333_40603403","line":15,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":12,"context_line":"        \"\"\"Verify notification object has failover_segment_uuid field.\"\"\""},{"line_number":13,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, "},{"line_number":14,"context_line":"                      notification.Notification.fields)"},{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7eee4aa9_c753d952","line":15,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":19,"context_line":"        "},{"line_number":20,"context_line":"        notif_dict \u003d {"},{"line_number":21,"context_line":"            \u0027id\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f53b218_bd5f4d0b","line":18,"updated":"2026-07-07 06:53:12.000000000","message":"linters: M302: timeutils.utcnow() must be used instead of datetime.utcnow()","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":19,"context_line":"        "},{"line_number":20,"context_line":"        notif_dict \u003d {"},{"line_number":21,"context_line":"            \u0027id\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"40b8eb04_6362c802","line":18,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: M302: timeutils.utcnow() must be used instead of datetime.utcnow()","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":19,"context_line":"        "},{"line_number":20,"context_line":"        notif_dict \u003d {"},{"line_number":21,"context_line":"            \u0027id\u0027: 1,"},{"line_number":22,"context_line":"            \u0027notification_uuid\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"264ead0d_b970b469","line":19,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":19,"context_line":"        "},{"line_number":20,"context_line":"        notif_dict \u003d {"},{"line_number":21,"context_line":"            \u0027id\u0027: 1,"},{"line_number":22,"context_line":"            \u0027notification_uuid\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fcab4dee_07ffb7c7","line":19,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":31,"context_line":"            \u0027updated_at\u0027: None,"},{"line_number":32,"context_line":"        }"},{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "}],"source_content_type":"text/x-python","patch_set":1,"id":"6c76542a_971735c3","line":33,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":31,"context_line":"            \u0027updated_at\u0027: None,"},{"line_number":32,"context_line":"        }"},{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "}],"source_content_type":"text/x-python","patch_set":1,"id":"296cc21c_b997663c","line":33,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        }"},{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"6b0d37ff_12e6d62d","line":35,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        }"},{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"3d569f36_eae9fb2f","line":35,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        # ✅ Use dict(notif.items()) instead of .to_dict()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ac1b5c98_154d08fe","line":36,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W291 trailing whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        # ✅ Use dict(notif.items()) instead of .to_dict()"}],"source_content_type":"text/x-python","patch_set":1,"id":"448bcf5c_3be61683","line":36,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W291 trailing whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        # ✅ Use dict(notif.items()) instead of .to_dict()"},{"line_number":40,"context_line":"        result \u003d dict(notif.items())"},{"line_number":41,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, result)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c98e4cff_c07c2715","line":38,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        # ✅ Use dict(notif.items()) instead of .to_dict()"},{"line_number":40,"context_line":"        result \u003d dict(notif.items())"},{"line_number":41,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, result)"}],"source_content_type":"text/x-python","patch_set":1,"id":"213541d9_56a3b62f","line":38,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, result)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"9812131f_8b9afcc9","line":44,"updated":"2026-07-07 06:53:12.000000000","message":"linters: E501 line too long (81 \u003e 79 characters)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, result)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"084b3c60_f91c1c61","line":44,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"},{"line_number":48,"context_line":"            \u0027id\u0027: 2,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ec6dc471_f42793c9","line":45,"updated":"2026-07-07 06:53:12.000000000","message":"linters: M302: timeutils.utcnow() must be used instead of datetime.utcnow()","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"},{"line_number":48,"context_line":"            \u0027id\u0027: 2,"}],"source_content_type":"text/x-python","patch_set":1,"id":"255b4827_e1a677d8","line":45,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: M302: timeutils.utcnow() must be used instead of datetime.utcnow()","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"},{"line_number":48,"context_line":"            \u0027id\u0027: 2,"},{"line_number":49,"context_line":"            \u0027notification_uuid\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"d2ede79a_fa0dbd2b","line":46,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"},{"line_number":48,"context_line":"            \u0027id\u0027: 2,"},{"line_number":49,"context_line":"            \u0027notification_uuid\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"45adf151_a1ae6888","line":46,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027generated_time\u0027: now,"},{"line_number":53,"context_line":"            \u0027payload\u0027: {\u0027event\u0027: \u0027STOPPED\u0027},"},{"line_number":54,"context_line":"            \u0027source_host_uuid\u0027: str(uuid.uuid4()),"},{"line_number":55,"context_line":"            \u0027failover_segment_uuid\u0027: None,  # ✅ Explicitly test the bug scenario"},{"line_number":56,"context_line":"            \u0027status\u0027: \u0027new\u0027,"},{"line_number":57,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":58,"context_line":"            \u0027updated_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fdf10603_58fc826b","line":55,"updated":"2026-07-07 06:53:12.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027generated_time\u0027: now,"},{"line_number":53,"context_line":"            \u0027payload\u0027: {\u0027event\u0027: \u0027STOPPED\u0027},"},{"line_number":54,"context_line":"            \u0027source_host_uuid\u0027: str(uuid.uuid4()),"},{"line_number":55,"context_line":"            \u0027failover_segment_uuid\u0027: None,  # ✅ Explicitly test the bug scenario"},{"line_number":56,"context_line":"            \u0027status\u0027: \u0027new\u0027,"},{"line_number":57,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":58,"context_line":"            \u0027updated_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c8a6381e_b4f253c2","line":55,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":58,"context_line":"            \u0027updated_at\u0027: None,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        "},{"line_number":61,"context_line":"        # This will pass cleanly once nullable\u003dTrue is added"},{"line_number":62,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":63,"context_line":"        self.assertIsNone(notif.failover_segment_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6ec61fa4_1720c18d","line":60,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":58,"context_line":"            \u0027updated_at\u0027: None,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        "},{"line_number":61,"context_line":"        # This will pass cleanly once nullable\u003dTrue is added"},{"line_number":62,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":63,"context_line":"        self.assertIsNone(notif.failover_segment_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"755da623_d94ed4dc","line":60,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"}]}
