)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"1436ee8097b5757223ea68d47966a8046f90eb75","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix: cascading soft-delete race in segment deletion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a DB-level check inside the writer transaction that counts active notifications (new/running/error) for hosts in the segment."},{"line_number":10,"context_line":"If any exist, raises Conflict to prevent deletion"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Description: When a segment is deleted, hosts are cascade-deleted. But between the API-level recovery check and the DB delete, a"},{"line_number":13,"context_line":"new notification could arrive. The soft-deleted hosts would be invisible to recovery workflows."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Impact: Orphaned notifications referencing deleted hosts; recovery workflows fail"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I64a7d39496e137e4e11ae577e47d7abf7fe932ec"},{"line_number":18,"context_line":"Signed-off-by: Gomathi \u003cgomathig@cdac.in\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"127d1211_27cd4143","line":15,"range":{"start_line":9,"start_character":0,"end_line":15,"end_character":81},"updated":"2026-07-22 07:10:28.000000000","message":"Please wrap lines, as I requested in a different patch proposed by you.","commit_id":"4d58a5c2a49c5c4182575a90d03103362209ee16"}],"masakari/db/sqlalchemy/api.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a44bd5b0a881e082e2339eddc16df1859262186b","unresolved":true,"context_lines":[{"line_number":128,"context_line":"                                   are specified or if an invalid sort"},{"line_number":129,"context_line":"                                   direction is specified"},{"line_number":130,"context_line":"    \"\"\""},{"line_number":131,"context_line":"    # Determine direction to use for when adding default keys"},{"line_number":132,"context_line":"    default_dir_value \u003d default_dir"},{"line_number":133,"context_line":"    if sort_dirs and len(sort_dirs) !\u003d 0:"},{"line_number":134,"context_line":"        default_dir_value \u003d sort_dirs[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"124065fc_af816f92","side":"PARENT","line":131,"range":{"start_line":131,"start_character":4,"end_line":131,"end_character":61},"updated":"2026-07-17 01:28:10.000000000","message":"DO NOT REMOVE THESE COMMENTS","commit_id":"b6364924009e7ef45653fcc49ff896816fc21751"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a44bd5b0a881e082e2339eddc16df1859262186b","unresolved":true,"context_lines":[{"line_number":196,"context_line":"                                               marker\u003dmarker_row,"},{"line_number":197,"context_line":"                                               sort_dirs\u003dsort_dirs)"},{"line_number":198,"context_line":"    except db_exc.InvalidSortKey as e:"},{"line_number":199,"context_line":"        LOG.debug(\"Invalid sort key requested: %s\", e)"},{"line_number":200,"context_line":"        raise exception.InvalidSortKey()"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    return query.all()"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5db9f9_7c25f662","line":199,"range":{"start_line":199,"start_character":8,"end_line":199,"end_character":54},"updated":"2026-07-17 01:28:10.000000000","message":"I see the same change is made in multiple places but this looks totally unrelated","commit_id":"ff375ea8e59a6af917914d2fa235e4f22d294da3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"1436ee8097b5757223ea68d47966a8046f90eb75","unresolved":true,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    query \u003d query.filter("},{"line_number":332,"context_line":"        models.Notification.source_host_uuid.in_("},{"line_number":333,"context_line":"            select(inner_select.subquery())))"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    return query.first()[0] \u003e 0"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"571ac87b_5a1e251d","line":333,"range":{"start_line":333,"start_character":12,"end_line":333,"end_character":18},"updated":"2026-07-22 07:10:28.000000000","message":"Is this really needed ? I found a few other implementations and found similar ones without explicit select call. Is there any problem you faced without this ?","commit_id":"4d58a5c2a49c5c4182575a90d03103362209ee16"}],"masakari/tests/unit/test_softdelete.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"49133c2b7b022715ee133607adb52a5f3f854284","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 - Security Bug Fixes Test Suite"},{"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":4,"id":"339c102f_52b0753c","line":1,"range":{"start_line":1,"start_character":19,"end_line":1,"end_character":48},"updated":"2026-07-21 12:31:29.000000000","message":"A tool can\u0027t auth a commit.","commit_id":"6b1f5a495f8521db9f8abdfd97c3cf590dc48814"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"49133c2b7b022715ee133607adb52a5f3f854284","unresolved":true,"context_lines":[{"line_number":31,"context_line":"    \"\"\"Test that segment deletion checks for active notifications in DB.\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @mock.patch(\u0027masakari.db.sqlalchemy.api.model_query\u0027)"},{"line_number":34,"context_line":"    def test_delete_blocked_with_active_notifications(self, mock_query):"},{"line_number":35,"context_line":"        \"\"\"Segment delete should raise Conflict if active notifications"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        exist."}],"source_content_type":"text/x-python","patch_set":4,"id":"c264a818_f4dc2a8a","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":53},"updated":"2026-07-21 12:31:29.000000000","message":"Please add a real functional test to verify the behavior. This does not verify that the change is actually works as expected.","commit_id":"6b1f5a495f8521db9f8abdfd97c3cf590dc48814"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"1436ee8097b5757223ea68d47966a8046f90eb75","unresolved":true,"context_lines":[{"line_number":29,"context_line":"        super().setUp()"},{"line_number":30,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_failover_segment_delete_blocked_with_active_notifications(self):"},{"line_number":33,"context_line":"        segment_uuid \u003d uuidutils.generate_uuid()"},{"line_number":34,"context_line":"        host_uuid \u003d uuidutils.generate_uuid()"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7fa0b68b_44ff4dac","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":70},"updated":"2026-07-22 07:10:28.000000000","message":"Please add this test to masakari/tests/unit/db/test_db_api.py instead of creating a new file.","commit_id":"4d58a5c2a49c5c4182575a90d03103362209ee16"}]}
