)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38311,"name":"Sooyoung Kim","display_name":"Sooyoung Kim","email":"sykim.etri@gmail.com","username":"sykim-etri"},"change_message_id":"cb78b2bc1a1a1b4c3bb3bd2a735177449383829f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"039c3174_1d80e82c","updated":"2025-11-10 08:03:24.000000000","message":"Thanks for the review and comments.\nI’ve replied to each comment and clarified the rationale behind the session handling changes.\n\nIn summary:\n- The session logic follows Cinder’s pattern to resolve the issues seen with session_for_read()/write().\n- Functions like _quota_usage_create() are called by the other function, which already runs under a writer context, so adding @main_context_manager.writer isn’t necessary.\n\nPlease let me know if further clarification or adjustment is needed.","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"}],"cyborg/db/sqlalchemy/api.py":[{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"18faa13f4a7351962e775f31caa6d024711b33f3","unresolved":true,"context_lines":[{"line_number":35,"context_line":"from cyborg.db import api"},{"line_number":36,"context_line":"from cyborg.db.sqlalchemy import models"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"_CONTEXT \u003d threading.local()"},{"line_number":39,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"main_context_manager \u003d enginefacade.transaction_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"35706f85_eb03f3b4","side":"PARENT","line":38,"updated":"2025-11-10 02:36:42.000000000","message":"this change is contrary to Magnum https://review.opendev.org/c/openstack/magnum/+/935986?","commit_id":"e408b4c1b7e233a954da1ab5b6119014f8d95b26"},{"author":{"_account_id":38311,"name":"Sooyoung Kim","display_name":"Sooyoung Kim","email":"sykim.etri@gmail.com","username":"sykim-etri"},"change_message_id":"cb78b2bc1a1a1b4c3bb3bd2a735177449383829f","unresolved":true,"context_lines":[{"line_number":35,"context_line":"from cyborg.db import api"},{"line_number":36,"context_line":"from cyborg.db.sqlalchemy import models"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"_CONTEXT \u003d threading.local()"},{"line_number":39,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"main_context_manager \u003d enginefacade.transaction_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"e022c819_1a2107f8","side":"PARENT","line":38,"in_reply_to":"35706f85_eb03f3b4","updated":"2025-11-10 08:03:24.000000000","message":"The change follows the pattern from Cinder rather than Magnum, since Cyborg has been encountering issues with the current session_for_read()/write() usage.\nThe Cinder-style session handling provides better stability and avoids transaction conflicts we’ve observed in Cyborg.","commit_id":"e408b4c1b7e233a954da1ab5b6119014f8d95b26"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"18faa13f4a7351962e775f31caa6d024711b33f3","unresolved":true,"context_lines":[{"line_number":939,"context_line":"            with_for_update().all()"},{"line_number":940,"context_line":"        return {row.resource: row for row in rows}"},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"    def _quota_usage_create(self, project_id, resource, until_refresh,"},{"line_number":943,"context_line":"                            in_use, reserved, session\u003dNone):"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"        quota_usage_ref \u003d models.QuotaUsage()"}],"source_content_type":"text/x-python","patch_set":1,"id":"e6a3ee38_ba39fb9d","line":942,"updated":"2025-11-10 02:36:42.000000000","message":"need @main_context_manager.writer?","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"},{"author":{"_account_id":38311,"name":"Sooyoung Kim","display_name":"Sooyoung Kim","email":"sykim.etri@gmail.com","username":"sykim-etri"},"change_message_id":"cb78b2bc1a1a1b4c3bb3bd2a735177449383829f","unresolved":true,"context_lines":[{"line_number":939,"context_line":"            with_for_update().all()"},{"line_number":940,"context_line":"        return {row.resource: row for row in rows}"},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"    def _quota_usage_create(self, project_id, resource, until_refresh,"},{"line_number":943,"context_line":"                            in_use, reserved, session\u003dNone):"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"        quota_usage_ref \u003d models.QuotaUsage()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7d6f904c_9b978372","line":942,"in_reply_to":"e6a3ee38_ba39fb9d","updated":"2025-11-10 08:03:24.000000000","message":"The actual DB operation is handled by the quota_reserve(), which already runs under a writer context, so adding @main_context_manager.writer isn’t necessary here.","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"18faa13f4a7351962e775f31caa6d024711b33f3","unresolved":true,"context_lines":[{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        return quota_usage_ref"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"    def _reservation_create(self, uuid, usage, project_id, resource, delta,"},{"line_number":956,"context_line":"                            expire, session\u003dNone):"},{"line_number":957,"context_line":"        usage_id \u003d usage[\u0027id\u0027] if usage else None"},{"line_number":958,"context_line":"        reservation_ref \u003d models.Reservation()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9bfaa6c5_222adbc2","line":955,"updated":"2025-11-10 02:36:42.000000000","message":"ditto","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"},{"author":{"_account_id":38311,"name":"Sooyoung Kim","display_name":"Sooyoung Kim","email":"sykim.etri@gmail.com","username":"sykim-etri"},"change_message_id":"cb78b2bc1a1a1b4c3bb3bd2a735177449383829f","unresolved":true,"context_lines":[{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        return quota_usage_ref"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"    def _reservation_create(self, uuid, usage, project_id, resource, delta,"},{"line_number":956,"context_line":"                            expire, session\u003dNone):"},{"line_number":957,"context_line":"        usage_id \u003d usage[\u0027id\u0027] if usage else None"},{"line_number":958,"context_line":"        reservation_ref \u003d models.Reservation()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9c99cb1b_463e6295","line":955,"in_reply_to":"9bfaa6c5_222adbc2","updated":"2025-11-10 08:03:24.000000000","message":"The actual DB operation is handled by the quota_reserve(), which already runs under a writer context, so adding @main_context_manager.writer isn’t necessary here.","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"18faa13f4a7351962e775f31caa6d024711b33f3","unresolved":true,"context_lines":[{"line_number":965,"context_line":"        reservation_ref.save(session\u003dsession)"},{"line_number":966,"context_line":"        return reservation_ref"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    def _get_reservation_resources(self, context, reservation_ids):"},{"line_number":969,"context_line":"        \"\"\"Return the relevant resources by reservations.\"\"\""},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"        reservations \u003d model_query(context, models.Reservation). \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"308386ab_b2b481bb","line":968,"updated":"2025-11-10 02:36:42.000000000","message":"need @main_context_manager.reader?","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"},{"author":{"_account_id":38311,"name":"Sooyoung Kim","display_name":"Sooyoung Kim","email":"sykim.etri@gmail.com","username":"sykim-etri"},"change_message_id":"cb78b2bc1a1a1b4c3bb3bd2a735177449383829f","unresolved":true,"context_lines":[{"line_number":965,"context_line":"        reservation_ref.save(session\u003dsession)"},{"line_number":966,"context_line":"        return reservation_ref"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    def _get_reservation_resources(self, context, reservation_ids):"},{"line_number":969,"context_line":"        \"\"\"Return the relevant resources by reservations.\"\"\""},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"        reservations \u003d model_query(context, models.Reservation). \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"9cd6e74b_0194cc81","line":968,"in_reply_to":"308386ab_b2b481bb","updated":"2025-11-10 08:03:24.000000000","message":"The actual DB operation is handled by the reservation_commit(), which already runs under a writer context, so adding @main_context_manager.writer isn’t necessary here.","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"18faa13f4a7351962e775f31caa6d024711b33f3","unresolved":true,"context_lines":[{"line_number":974,"context_line":"            all()"},{"line_number":975,"context_line":"        return {r.resource for r in reservations}"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def _quota_reservations(self, session, context, reservations):"},{"line_number":978,"context_line":"        \"\"\"Return the relevant reservations.\"\"\""},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        # Get the listed reservations"}],"source_content_type":"text/x-python","patch_set":1,"id":"c01ab127_9d829fd3","line":977,"updated":"2025-11-10 02:36:42.000000000","message":"need @main_context_manager.writer?","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"},{"author":{"_account_id":38311,"name":"Sooyoung Kim","display_name":"Sooyoung Kim","email":"sykim.etri@gmail.com","username":"sykim-etri"},"change_message_id":"cb78b2bc1a1a1b4c3bb3bd2a735177449383829f","unresolved":true,"context_lines":[{"line_number":974,"context_line":"            all()"},{"line_number":975,"context_line":"        return {r.resource for r in reservations}"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def _quota_reservations(self, session, context, reservations):"},{"line_number":978,"context_line":"        \"\"\"Return the relevant reservations.\"\"\""},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        # Get the listed reservations"}],"source_content_type":"text/x-python","patch_set":1,"id":"55b5f192_011044c1","line":977,"in_reply_to":"c01ab127_9d829fd3","updated":"2025-11-10 08:03:24.000000000","message":"The actual DB operation is handled by the reservation_commit(), which already runs under a writer context, so adding @main_context_manager.writer isn’t necessary here.","commit_id":"75467de9f767fe552c891a262891f62b38f63ab6"}]}
