)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":34076,"name":"Jakub Darmach","email":"jakub@stackhpc.com","username":"darmach"},"change_message_id":"ad8b78cd90fc712242e206529854825e1170926f","unresolved":true,"context_lines":[{"line_number":20,"context_line":"This change has been made backwards compatibile, so an old"},{"line_number":21,"context_line":"magnum-api RPC request will be processed correctly even if initialise"},{"line_number":22,"context_line":"was not called."},{"line_number":23,"context_line":"A new magnum-api should not be used with an old magnun-conductor as"},{"line_number":24,"context_line":"the initialize message can not be processed."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Closes-Bug: #2078390"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"d5bb922b_61583097","line":23,"range":{"start_line":23,"start_character":48,"end_line":23,"end_character":54},"updated":"2024-11-13 11:03:27.000000000","message":"NIT: slight typo: magnun-conductor in last sentence of the commit message","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"867bb02cee44b6ad14e4f0cc1e260fd16b681345","unresolved":false,"context_lines":[{"line_number":20,"context_line":"This change has been made backwards compatibile, so an old"},{"line_number":21,"context_line":"magnum-api RPC request will be processed correctly even if initialise"},{"line_number":22,"context_line":"was not called."},{"line_number":23,"context_line":"A new magnum-api should not be used with an old magnun-conductor as"},{"line_number":24,"context_line":"the initialize message can not be processed."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Closes-Bug: #2078390"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"05f507a0_20b573ec","line":23,"range":{"start_line":23,"start_character":48,"end_line":23,"end_character":54},"in_reply_to":"d5bb922b_61583097","updated":"2024-12-11 22:35:51.000000000","message":"Done","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"d441f278a6eb9b222e169288e07380f045afcf21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"13970b9d_c6d3cb46","updated":"2024-09-04 02:19:54.000000000","message":"recheck","commit_id":"0f01cbac14c9da70fc784329ef9e2d7c5885c584"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"f9f68d3b45c7f246a071a1630546873793078d39","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e2a4bdda_22a00ec7","updated":"2024-09-11 11:05:19.000000000","message":"recheck tox timeout","commit_id":"229d99baa9599b49dd6593df78facd1f9f6e2a22"},{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"e8838824e2940f1c0ce40f496fc2158a77b7f256","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3778cbea_f41efc96","updated":"2024-11-13 14:11:57.000000000","message":"Do we really need RPC for this?  Couldn\u0027t we just get away with just doing this on the API layer and remove the extra noisy the conductor is handling?","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"},{"author":{"_account_id":34076,"name":"Jakub Darmach","email":"jakub@stackhpc.com","username":"darmach"},"change_message_id":"ad8b78cd90fc712242e206529854825e1170926f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1499146d_6014bbe2","updated":"2024-11-13 11:03:27.000000000","message":"Looks fine overall, I was mostly nitpicking 😊","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"fbe844de5d42ad90f24a3d36656c700dd4e23a94","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"5c33b2df_54148792","in_reply_to":"3778cbea_f41efc96","updated":"2024-11-27 08:37:54.000000000","message":"how would we achieve that? do you mean a newer version of the same API call that changes the create call to a synchronous one?","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"273a79cfb4e914f333e8a3ac11623a1cb68b5060","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"efa844d3_b2860014","in_reply_to":"5c33b2df_54148792","updated":"2024-12-11 22:30:51.000000000","message":"Yeah, I agree Mohammed - there\u0027s a whole set of these that could be done on the API layer without sending over RPC to the conductor. It adds a fair bit of latency.\n\nIt\u0027s a bit too much scope creep to resolve that pattern in this bugfix, I acknowledge I\u0027m adding to the problem. I\u0027d definitely like to review all these sometime but this isn\u0027t the patchset.","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"},{"author":{"_account_id":39166,"name":"Matthias Harzer","email":"matthias.harzer@inovex.de","username":"matthiasharzer"},"change_message_id":"1a1274e766631c496db09248b224387d45d3a9e7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"25ae76a2_2b0d2fb2","updated":"2026-08-18 07:12:13.000000000","message":"Hi! I am currently running into the issue, that reading a newly created cluster yields a 404 right after it has been created. This patch looks very promising for fixing this issue but has been inactive for a while.\nIf required, I can rebase and address the remaining open comments to get this fix shipped soon!","commit_id":"1b39be36995d2e58a415fe5aa55c89aaf5ebd830"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"5ea7f1db8ddf63e8fee5a9b263e047bb8e13022a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"8184fd2a_a3631c7e","in_reply_to":"25ae76a2_2b0d2fb2","updated":"2026-08-18 09:45:33.000000000","message":"Please do, it would be ideal if you could test that patch if it fixes your problem.","commit_id":"1b39be36995d2e58a415fe5aa55c89aaf5ebd830"},{"author":{"_account_id":39166,"name":"Matthias Harzer","email":"matthias.harzer@inovex.de","username":"matthiasharzer"},"change_message_id":"cae1ce91bd7de41d59da8e136c9beb6f3c443fcb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"ab9a9dd1_c96eb1dc","in_reply_to":"8184fd2a_a3631c7e","updated":"2026-08-18 13:19:25.000000000","message":"I rebased the patch and tested it with the devstack. With those changes, I never hit a 404 after creating a cluster (from about 10 attempts), compared to nearly every time before applying the patch.","commit_id":"1b39be36995d2e58a415fe5aa55c89aaf5ebd830"}],"magnum/api/controllers/v1/cluster.py":[{"author":{"_account_id":34076,"name":"Jakub Darmach","email":"jakub@stackhpc.com","username":"darmach"},"change_message_id":"ad8b78cd90fc712242e206529854825e1170926f","unresolved":true,"context_lines":[{"line_number":566,"context_line":"        # This allows our API to reply with a valid uuid from the moment the"},{"line_number":567,"context_line":"        # POST returns. Otherwise, the uuid doesn\u0027t become valid until the"},{"line_number":568,"context_line":"        # cluster_create RPC is processed."},{"line_number":569,"context_line":"        pecan.request.rpcapi.cluster_initialize(new_cluster,"},{"line_number":570,"context_line":"                                                master_count, node_count)"},{"line_number":571,"context_line":"        # Send a second async RPC to trigger actual cluster creation."},{"line_number":572,"context_line":"        created_cluster \u003d api_utils.get_resource(\u0027Cluster\u0027, new_cluster.uuid)"},{"line_number":573,"context_line":"        pecan.request.rpcapi.cluster_create_async(created_cluster,"},{"line_number":574,"context_line":"                                                  master_count, node_count,"}],"source_content_type":"text/x-python","patch_set":11,"id":"686aa246_6b951716","line":571,"range":{"start_line":569,"start_character":0,"end_line":571,"end_character":0},"updated":"2024-11-13 11:03:27.000000000","message":"I understand that we didn\u0027t try any exception in here previously, as create request was sent asynchronously. After this change, however, would it be useful to except here if initialize request failed?","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"},{"author":{"_account_id":39166,"name":"Matthias Harzer","email":"matthias.harzer@inovex.de","username":"matthiasharzer"},"change_message_id":"cae1ce91bd7de41d59da8e136c9beb6f3c443fcb","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        # This allows our API to reply with a valid uuid from the moment the"},{"line_number":567,"context_line":"        # POST returns. Otherwise, the uuid doesn\u0027t become valid until the"},{"line_number":568,"context_line":"        # cluster_create RPC is processed."},{"line_number":569,"context_line":"        pecan.request.rpcapi.cluster_initialize(new_cluster,"},{"line_number":570,"context_line":"                                                master_count, node_count)"},{"line_number":571,"context_line":"        # Send a second async RPC to trigger actual cluster creation."},{"line_number":572,"context_line":"        created_cluster \u003d api_utils.get_resource(\u0027Cluster\u0027, new_cluster.uuid)"},{"line_number":573,"context_line":"        pecan.request.rpcapi.cluster_create_async(created_cluster,"},{"line_number":574,"context_line":"                                                  master_count, node_count,"}],"source_content_type":"text/x-python","patch_set":11,"id":"0357b08c_58ce564f","line":571,"range":{"start_line":569,"start_character":0,"end_line":571,"end_character":0},"in_reply_to":"686aa246_6b951716","updated":"2026-08-18 13:19:25.000000000","message":"Done","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"}],"magnum/conductor/handlers/cluster_conductor.py":[{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"b6a3a74cd9af85056ffb668ea09e466968430a07","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        osc \u003d clients.OpenStackClients(context)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        # Backwards compatibility with older magnum-api RPC messages."},{"line_number":68,"context_line":"        if not hasattr(cluster, \u0027_obj_status\u0027):"},{"line_number":69,"context_line":"            self.cluster_initialize(context, cluster,"},{"line_number":70,"context_line":"                                    master_count, node_count,"},{"line_number":71,"context_line":"                                    create_timeout)"}],"source_content_type":"text/x-python","patch_set":4,"id":"18bfb34d_ef1334ab","line":68,"updated":"2024-09-11 11:23:30.000000000","message":"curious why you chose to use this, does cluster.status not work?","commit_id":"229d99baa9599b49dd6593df78facd1f9f6e2a22"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"28a02c514f0bf8efff2e1d4703e3aa898bdc4a12","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        osc \u003d clients.OpenStackClients(context)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        # Backwards compatibility with older magnum-api RPC messages."},{"line_number":68,"context_line":"        if not hasattr(cluster, \u0027_obj_status\u0027):"},{"line_number":69,"context_line":"            self.cluster_initialize(context, cluster,"},{"line_number":70,"context_line":"                                    master_count, node_count,"},{"line_number":71,"context_line":"                                    create_timeout)"}],"source_content_type":"text/x-python","patch_set":4,"id":"8d5a3a3b_6c313217","line":68,"in_reply_to":"18bfb34d_ef1334ab","updated":"2024-09-22 23:42:21.000000000","message":"I\u0027ve revisited this, and moved the logic into a function.\n\nWhen accessing `cluster.status` on an uninitialized cluster class it attempts a lazy load in oslo versioned objects. This was entering a recursive exception due to the subsequent access of cluster.uuid which was also entering the lazy load.\n\nI\u0027ve now removed the `cluster.uuid` access from the lazy load function, so we can safely check `cluster.nodegroups` to identify if the cluster had been initialized.","commit_id":"229d99baa9599b49dd6593df78facd1f9f6e2a22"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b866a4a61a7707a4536b44d5e44d2eabe1539bd5","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def cluster_create(self, context, cluster, master_count, node_count,"},{"line_number":70,"context_line":"                       create_timeout):"},{"line_number":71,"context_line":"        LOG.debug(\u0027cluster_conductor cluster_create\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Backwards compatibility with older magnum-api RPC messages."},{"line_number":74,"context_line":"        if not self._is_cluster_initialized(cluster):"}],"source_content_type":"text/x-python","patch_set":16,"id":"eb3602b6_bd95f2d0","line":71,"updated":"2026-08-18 19:23:21.000000000","message":"Do we need that debug?","commit_id":"c8336106c86399b4b28c7969229c6c83b5d67b83"}],"magnum/objects/cluster.py":[{"author":{"_account_id":34076,"name":"Jakub Darmach","email":"jakub@stackhpc.com","username":"darmach"},"change_message_id":"ad8b78cd90fc712242e206529854825e1170926f","unresolved":true,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":333,"context_line":"        if attrname not in LAZY_LOADED_ATTRS:"},{"line_number":334,"context_line":"            # Note(dalees): We can\u0027t use self.uuid here as it may call"},{"line_number":335,"context_line":"            #               obj_load_attr and raise the same object error."},{"line_number":336,"context_line":"            raise exception.ObjectError("},{"line_number":337,"context_line":"                action\u003d\u0027obj_load_attr\u0027, obj_name\u003dself.name,"}],"source_content_type":"text/x-python","patch_set":11,"id":"b0d28a02_e8fec013","line":334,"range":{"start_line":334,"start_character":14,"end_line":334,"end_character":18},"updated":"2024-11-13 11:03:27.000000000","message":"nit: would be nice to change Note to uppercase NOTE","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"867bb02cee44b6ad14e4f0cc1e260fd16b681345","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":333,"context_line":"        if attrname not in LAZY_LOADED_ATTRS:"},{"line_number":334,"context_line":"            # Note(dalees): We can\u0027t use self.uuid here as it may call"},{"line_number":335,"context_line":"            #               obj_load_attr and raise the same object error."},{"line_number":336,"context_line":"            raise exception.ObjectError("},{"line_number":337,"context_line":"                action\u003d\u0027obj_load_attr\u0027, obj_name\u003dself.name,"}],"source_content_type":"text/x-python","patch_set":11,"id":"e6a38558_489d59b2","line":334,"range":{"start_line":334,"start_character":14,"end_line":334,"end_character":18},"in_reply_to":"b0d28a02_e8fec013","updated":"2024-12-11 22:35:51.000000000","message":"Done","commit_id":"cb3beaf8c0e101fc6d55798b9b017324e733996a"}],"magnum/tests/unit/api/controllers/v1/test_cluster.py":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b866a4a61a7707a4536b44d5e44d2eabe1539bd5","unresolved":true,"context_lines":[{"line_number":679,"context_line":"        cluster.create()"},{"line_number":680,"context_line":"        return cluster"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def _simulate_cluster_create(self, cluster, master_count, node_count,"},{"line_number":683,"context_line":"                                 create_timeout):"},{"line_number":684,"context_line":"        return cluster"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"a69a9fd2_ef5e53ec","line":682,"updated":"2026-08-18 19:23:21.000000000","message":"This is now doing nothing","commit_id":"c8336106c86399b4b28c7969229c6c83b5d67b83"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b866a4a61a7707a4536b44d5e44d2eabe1539bd5","unresolved":true,"context_lines":[{"line_number":735,"context_line":"    def test_create_cluster_set_project_id_and_user_id(self):"},{"line_number":736,"context_line":"        bdict \u003d apiutils.cluster_post_data()"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        def _simulate_rpc_cluster_create(cluster, master_count, node_count,"},{"line_number":739,"context_line":"                                         create_timeout):"},{"line_number":740,"context_line":"            self.assertEqual(self.context.project_id, cluster.project_id)"},{"line_number":741,"context_line":"            self.assertEqual(self.context.user_id, cluster.user_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"e8f21704_822d6322","line":738,"updated":"2026-08-18 19:23:21.000000000","message":"This needs updates as well","commit_id":"c8336106c86399b4b28c7969229c6c83b5d67b83"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b866a4a61a7707a4536b44d5e44d2eabe1539bd5","unresolved":true,"context_lines":[{"line_number":924,"context_line":"        self.assertEqual(202, response.status_int)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def test_create_cluster_with_no_timeout(self):"},{"line_number":927,"context_line":"        def _simulate_rpc_cluster_create(cluster, master_count, node_count,"},{"line_number":928,"context_line":"                                         create_timeout):"},{"line_number":929,"context_line":"            self.assertEqual(60, create_timeout)"},{"line_number":930,"context_line":"            cluster.create()"}],"source_content_type":"text/x-python","patch_set":16,"id":"d4a02f09_534876c5","line":927,"updated":"2026-08-18 19:23:21.000000000","message":"And this","commit_id":"c8336106c86399b4b28c7969229c6c83b5d67b83"}]}
