)]}'
{"skyline_apiserver/api/v1/metadata.py":[{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"3677a77be68ebbd65da68a4f8762b4ba12c3e0f9","unresolved":true,"context_lines":[{"line_number":69,"context_line":"    if not body.metadata:"},{"line_number":70,"context_line":"        raise HTTPException("},{"line_number":71,"context_line":"            status_code\u003dstatus.HTTP_400_BAD_REQUEST,"},{"line_number":72,"context_line":"            detail\u003d\"metadata dict boş olamaz\","},{"line_number":73,"context_line":"        )"},{"line_number":74,"context_line":"    session \u003d generate_session(profile)"},{"line_number":75,"context_line":"    return metadata_client.set_server_metadata("}],"source_content_type":"text/x-python","patch_set":2,"id":"26e3a775_021cf5db","line":72,"range":{"start_line":72,"start_character":20,"end_line":72,"end_character":44},"updated":"2026-05-14 00:36:55.000000000","message":"Keep use English for world wide understanding","commit_id":"1683999c5b74c0f7f1503f1f1d9b7df46504d3bf"}],"skyline_apiserver/client/openstack/metadata.py":[{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"3677a77be68ebbd65da68a4f8762b4ba12c3e0f9","unresolved":true,"context_lines":[{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            ns_filtered \u003d list(all_ns_names)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        for ns_name in ns_filtered:"},{"line_number":71,"context_line":"            detail_resp \u003d session.get("},{"line_number":72,"context_line":"                f\"{endpoint}/v2/metadefs/namespaces/{ns_name}\","},{"line_number":73,"context_line":"                params\u003d{\"resource_type\": \"OS::Nova::Server\"},"},{"line_number":74,"context_line":"            )"},{"line_number":75,"context_line":"            detail_resp.raise_for_status()"},{"line_number":76,"context_line":"            result.append(normalize_namespace(detail_resp.json()))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        return result"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e6669837_b888ab20","line":76,"range":{"start_line":70,"start_character":0,"end_line":76,"end_character":66},"updated":"2026-05-14 00:36:55.000000000","message":"This is an implementation where the frontend issues one request while the backend performs N downstream API calls, so the time complexity / cost (in terms of backend work and latency) is relatively high. Why choose this approach? Is it mainly to make the frontend rendering nicer?","commit_id":"1683999c5b74c0f7f1503f1f1d9b7df46504d3bf"},{"author":{"_account_id":38847,"name":"Nursena Bitirgen","display_name":"Nursena Bitirgen","email":"nursena.bitirgen@cern.ch","username":"senabibi"},"change_message_id":"117668efe7b5a3e8f07ff6b00eba0f08d75a3a70","unresolved":true,"context_lines":[{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            ns_filtered \u003d list(all_ns_names)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        for ns_name in ns_filtered:"},{"line_number":71,"context_line":"            detail_resp \u003d session.get("},{"line_number":72,"context_line":"                f\"{endpoint}/v2/metadefs/namespaces/{ns_name}\","},{"line_number":73,"context_line":"                params\u003d{\"resource_type\": \"OS::Nova::Server\"},"},{"line_number":74,"context_line":"            )"},{"line_number":75,"context_line":"            detail_resp.raise_for_status()"},{"line_number":76,"context_line":"            result.append(normalize_namespace(detail_resp.json()))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        return result"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"731a6388_bfb2fe10","line":76,"range":{"start_line":70,"start_character":0,"end_line":76,"end_character":66},"in_reply_to":"e6669837_b888ab20","updated":"2026-05-26 07:00:37.000000000","message":"The list endpoint doesn\u0027t include property details, we fetch each namespace individually to keep the frontend logic simple.","commit_id":"1683999c5b74c0f7f1503f1f1d9b7df46504d3bf"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"3677a77be68ebbd65da68a4f8762b4ba12c3e0f9","unresolved":true,"context_lines":[{"line_number":101,"context_line":"         - Keys not included in the request will remain unchanged."},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":"    try:"},{"line_number":104,"context_line":"        nc \u003d utils.nova_client("},{"line_number":105,"context_line":"            session\u003dsession,"},{"line_number":106,"context_line":"            region\u003dprofile.region,"},{"line_number":107,"context_line":"            global_request_id\u003dglobal_request_id,"},{"line_number":108,"context_line":"        )"},{"line_number":109,"context_line":"        server \u003d nc.servers.get(server_id)"},{"line_number":110,"context_line":"        nc.servers.set_meta(server, metadata)"},{"line_number":111,"context_line":"        return {\"server_id\": server_id, \"metadata\": metadata, \"status\": \"ok\"}"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    except Unauthorized as e:"},{"line_number":114,"context_line":"        raise HTTPException(status_code\u003dstatus.HTTP_401_UNAUTHORIZED, detail\u003dstr(e))"}],"source_content_type":"text/x-python","patch_set":2,"id":"4c7809a9_4fd86970","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":77},"updated":"2026-05-14 00:36:55.000000000","message":"This doesn\u0027t seem to involve any additional logic. I suggest directly passing through the OpenStack API instead of encapsulating it within the apiserver.","commit_id":"1683999c5b74c0f7f1503f1f1d9b7df46504d3bf"},{"author":{"_account_id":38847,"name":"Nursena Bitirgen","display_name":"Nursena Bitirgen","email":"nursena.bitirgen@cern.ch","username":"senabibi"},"change_message_id":"117668efe7b5a3e8f07ff6b00eba0f08d75a3a70","unresolved":true,"context_lines":[{"line_number":101,"context_line":"         - Keys not included in the request will remain unchanged."},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":"    try:"},{"line_number":104,"context_line":"        nc \u003d utils.nova_client("},{"line_number":105,"context_line":"            session\u003dsession,"},{"line_number":106,"context_line":"            region\u003dprofile.region,"},{"line_number":107,"context_line":"            global_request_id\u003dglobal_request_id,"},{"line_number":108,"context_line":"        )"},{"line_number":109,"context_line":"        server \u003d nc.servers.get(server_id)"},{"line_number":110,"context_line":"        nc.servers.set_meta(server, metadata)"},{"line_number":111,"context_line":"        return {\"server_id\": server_id, \"metadata\": metadata, \"status\": \"ok\"}"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    except Unauthorized as e:"},{"line_number":114,"context_line":"        raise HTTPException(status_code\u003dstatus.HTTP_401_UNAUTHORIZED, detail\u003dstr(e))"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c553bda_ffe6afd3","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":77},"in_reply_to":"4c7809a9_4fd86970","updated":"2026-05-26 07:00:37.000000000","message":"I followed the existing pattern in the codebase, just like we do in glance.py, nova.py, and cinder.py by wrapping the SDK calls. This wrapper handles session injection and maps SDK exceptions to consistent HTTP responses, which keeps the router layer clean.","commit_id":"1683999c5b74c0f7f1503f1f1d9b7df46504d3bf"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"3677a77be68ebbd65da68a4f8762b4ba12c3e0f9","unresolved":true,"context_lines":[{"line_number":134,"context_line":"            region\u003dprofile.region,"},{"line_number":135,"context_line":"            global_request_id\u003dglobal_request_id,"},{"line_number":136,"context_line":"        )"},{"line_number":137,"context_line":"        server \u003d nc.servers.get(server_id)"},{"line_number":138,"context_line":"        return dict(server.metadata)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    except Unauthorized as e:"},{"line_number":141,"context_line":"        raise HTTPException(status_code\u003dstatus.HTTP_401_UNAUTHORIZED, detail\u003dstr(e))"}],"source_content_type":"text/x-python","patch_set":2,"id":"be3b424c_bc9b007a","line":138,"range":{"start_line":137,"start_character":0,"end_line":138,"end_character":36},"updated":"2026-05-14 00:36:55.000000000","message":"This doesn\u0027t seem to involve any additional logic. I suggest directly passing through the OpenStack API instead of encapsulating it within the apiserver.","commit_id":"1683999c5b74c0f7f1503f1f1d9b7df46504d3bf"},{"author":{"_account_id":38847,"name":"Nursena Bitirgen","display_name":"Nursena Bitirgen","email":"nursena.bitirgen@cern.ch","username":"senabibi"},"change_message_id":"117668efe7b5a3e8f07ff6b00eba0f08d75a3a70","unresolved":true,"context_lines":[{"line_number":134,"context_line":"            region\u003dprofile.region,"},{"line_number":135,"context_line":"            global_request_id\u003dglobal_request_id,"},{"line_number":136,"context_line":"        )"},{"line_number":137,"context_line":"        server \u003d nc.servers.get(server_id)"},{"line_number":138,"context_line":"        return dict(server.metadata)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    except Unauthorized as e:"},{"line_number":141,"context_line":"        raise HTTPException(status_code\u003dstatus.HTTP_401_UNAUTHORIZED, detail\u003dstr(e))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3dcccb23_67df1fc6","line":138,"range":{"start_line":137,"start_character":0,"end_line":138,"end_character":36},"in_reply_to":"be3b424c_bc9b007a","updated":"2026-05-26 07:00:37.000000000","message":"Just like previous one followed the same pattern as set_server_metadata. This wrapper handles sessions and errors consistently.","commit_id":"1683999c5b74c0f7f1503f1f1d9b7df46504d3bf"}]}
