)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"323b96d04763333bbd64ed298c013ff082e15969","unresolved":true,"context_lines":[{"line_number":10,"context_line":"workers (PeriodicWorker instances with worker_process_count\u003d0) in a"},{"line_number":11,"context_line":"single process to reduce memory use on constrained nodes. A previous"},{"line_number":12,"context_line":"attempt wrapped all thread workers unconditionally, but that broke"},{"line_number":13,"context_line":"RpcWorker instances added by service plugins such as L3 and metering"},{"line_number":14,"context_line":"(LP#2154192)."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Introduce _prepare_periodic_workers() to classify plugin workers before"},{"line_number":17,"context_line":"starting them:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9e22a4a2_17648b60","line":14,"range":{"start_line":13,"start_character":0,"end_line":14,"end_character":13},"updated":"2026-05-25 18:29:22.000000000","message":"ya so currently if you have both enabled you will get 2 rpc workers\n\nis that intended or can the l3 and meterign plugisn share a single rpc worker?","commit_id":"4700fdc5ec84aa30ca58681e4fb29093922e6d28"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f45808fe83823a8ca6ca2a1e9ab9832154b99f21","unresolved":false,"context_lines":[{"line_number":10,"context_line":"workers (PeriodicWorker instances with worker_process_count\u003d0) in a"},{"line_number":11,"context_line":"single process to reduce memory use on constrained nodes. A previous"},{"line_number":12,"context_line":"attempt wrapped all thread workers unconditionally, but that broke"},{"line_number":13,"context_line":"RpcWorker instances added by service plugins such as L3 and metering"},{"line_number":14,"context_line":"(LP#2154192)."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Introduce _prepare_periodic_workers() to classify plugin workers before"},{"line_number":17,"context_line":"starting them:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"b6acbee3_a5185745","line":14,"range":{"start_line":13,"start_character":0,"end_line":14,"end_character":13},"in_reply_to":"9e22a4a2_17648b60","updated":"2026-05-26 07:18:12.000000000","message":"Each plugin will create its own RPCWorker client. However, checking again the code, these workers are explicitly created with `worker_process_count\u003d0`. They can be wrapper inside the `AllServicesNeutronWorker` class and be executed inside one single process.\n\nLet me push a new PS.","commit_id":"4700fdc5ec84aa30ca58681e4fb29093922e6d28"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8c90ffebda138ea75f731b785a84bb97cdb5606b","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Closes-Bug: #2154192"},{"line_number":28,"context_line":"Signed-off-by: Rodolfo Alonso Hernandez \u003cralonsoh@redhat.com\u003e"},{"line_number":29,"context_line":"Change-Id: Ia9d319fbbf8047e756da555db3f52a3f9a704392"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"251df0ef_a13106b0","line":29,"updated":"2026-05-28 02:09:06.000000000","message":"Just curious if there is a Claude attribution? Not that you can\u0027t generate good code on your own :)","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0876c4dd144994538def666b045305a5aead3d41","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Closes-Bug: #2154192"},{"line_number":28,"context_line":"Signed-off-by: Rodolfo Alonso Hernandez \u003cralonsoh@redhat.com\u003e"},{"line_number":29,"context_line":"Change-Id: Ia9d319fbbf8047e756da555db3f52a3f9a704392"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"957819d5_498f9048","line":29,"in_reply_to":"251df0ef_a13106b0","updated":"2026-05-28 06:30:24.000000000","message":"In particular the tests, these are fantastic and not mine. I\u0027ll update the commit message.","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"472279277f098cdb485b46404bb7f6fd7be03a48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"80c549b3_37bad0cb","updated":"2026-05-26 10:39:39.000000000","message":"This implementation, wrapping all the workers with `worker_process_count\u003d0` inside `AllServicesNeutronWorker`, only allows the first `wait` call to be called. Once done, it block any further processing.","commit_id":"d5182de4378d1a8630bd78e91294e3087a52d0a9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8c90ffebda138ea75f731b785a84bb97cdb5606b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"af0c6de7_52f88d0a","updated":"2026-05-28 02:09:06.000000000","message":"I\u0027m fine with this, and think all my comments are nits.","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9fd63c897c5f77d904cbaca97da2f6bea98a3b71","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"26b4f7ba_1359713a","updated":"2026-05-28 09:54:55.000000000","message":"Looks ok, I dropped into devstack also","commit_id":"4bc5833176bc70ec67aa25e3ebedf42f7f15e373"}],"neutron/service.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"323b96d04763333bbd64ed298c013ff082e15969","unresolved":true,"context_lines":[{"line_number":305,"context_line":"        prepared_workers.append("},{"line_number":306,"context_line":"            AllServicesNeutronWorker(groupable_workers)"},{"line_number":307,"context_line":"        )"},{"line_number":308,"context_line":"    return prepared_workers"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"def start_periodic_workers():"}],"source_content_type":"text/x-python","patch_set":1,"id":"e4e6fdbe_44d9cc23","line":308,"updated":"2026-05-25 18:29:22.000000000","message":"i mentioned this on irc but ill methion it here again for visablity\n\n\ni think what you have proposed abovoe is better then what i propose but shoudl the worker count be hardcoded like it currently is or is this something that operator woudl want to tweak?  i.e. shoudl each plugin that can run perodic have a dedicated cofnig option for this?","commit_id":"4700fdc5ec84aa30ca58681e4fb29093922e6d28"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f45808fe83823a8ca6ca2a1e9ab9832154b99f21","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        prepared_workers.append("},{"line_number":306,"context_line":"            AllServicesNeutronWorker(groupable_workers)"},{"line_number":307,"context_line":"        )"},{"line_number":308,"context_line":"    return prepared_workers"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"def start_periodic_workers():"}],"source_content_type":"text/x-python","patch_set":1,"id":"185a838e_bddf7a40","line":308,"in_reply_to":"e4e6fdbe_44d9cc23","updated":"2026-05-26 07:18:12.000000000","message":"The way to execute a periodic worker in a single process is to define it (statically) with `worker_process_count\u003e0`.\n\nIn particular, the `BGPWorker` needs to be updated to worker_process_count\u003d1, something I need to do in this patch.\n\nI need also to document how the periodic workers service works.","commit_id":"4700fdc5ec84aa30ca58681e4fb29093922e6d28"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8c90ffebda138ea75f731b785a84bb97cdb5606b","unresolved":true,"context_lines":[{"line_number":302,"context_line":"            continue"},{"line_number":303,"context_line":"        if worker.worker_process_count \u003d\u003d 0:"},{"line_number":304,"context_line":"            groupable_workers.append(worker)"},{"line_number":305,"context_line":"        elif worker.worker_process_count \u003e 0:"},{"line_number":306,"context_line":"            individual_workers.append(worker)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    prepared_workers \u003d list(individual_workers)"}],"source_content_type":"text/x-python","patch_set":7,"id":"24581f95_fcce9cae","line":305,"updated":"2026-05-28 02:09:06.000000000","message":"Just thinking out loud, and don\u0027t think we need to worry about it, but should we check somewhere that caller\u0027s aren\u0027t trying to set this to \u003c0 ? It will probably generate a traceback well before we get here.","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0876c4dd144994538def666b045305a5aead3d41","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            continue"},{"line_number":303,"context_line":"        if worker.worker_process_count \u003d\u003d 0:"},{"line_number":304,"context_line":"            groupable_workers.append(worker)"},{"line_number":305,"context_line":"        elif worker.worker_process_count \u003e 0:"},{"line_number":306,"context_line":"            individual_workers.append(worker)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    prepared_workers \u003d list(individual_workers)"}],"source_content_type":"text/x-python","patch_set":7,"id":"309a2e03_8b12b0d6","line":305,"in_reply_to":"24581f95_fcce9cae","updated":"2026-05-28 06:30:24.000000000","message":"Let me push a follow-up patch to consider this.","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5c1d7a682ff24131f8450a6ade38f91ebfd9acde","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            continue"},{"line_number":303,"context_line":"        if worker.worker_process_count \u003d\u003d 0:"},{"line_number":304,"context_line":"            groupable_workers.append(worker)"},{"line_number":305,"context_line":"        elif worker.worker_process_count \u003e 0:"},{"line_number":306,"context_line":"            individual_workers.append(worker)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    prepared_workers \u003d list(individual_workers)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bca0ba70_3d92daa8","line":305,"in_reply_to":"309a2e03_8b12b0d6","updated":"2026-05-28 06:46:42.000000000","message":"--\u003e https://review.opendev.org/c/openstack/neutron-lib/+/990424","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"}],"neutron/tests/common/worker_lifecycle.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8c90ffebda138ea75f731b785a84bb97cdb5606b","unresolved":true,"context_lines":[{"line_number":59,"context_line":"            result[\u0027completion\u0027] \u003d MethodCompletion.RETURNED"},{"line_number":60,"context_line":"        except Exception as exc:"},{"line_number":61,"context_line":"            result[\u0027exception\u0027] \u003d exc"},{"line_number":62,"context_line":"            result[\u0027completion\u0027] \u003d MethodCompletion.RETURNED"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    thread \u003d threading.Thread(target\u003d_target, daemon\u003dTrue)"},{"line_number":65,"context_line":"    thread.start()"}],"source_content_type":"text/x-python","patch_set":7,"id":"56c34598_4e862e00","line":62,"updated":"2026-05-28 02:09:06.000000000","message":"nit: I guess this could be before the try/except since it\u0027s the same both ways, but it\u0027s only a test","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0876c4dd144994538def666b045305a5aead3d41","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            result[\u0027completion\u0027] \u003d MethodCompletion.RETURNED"},{"line_number":60,"context_line":"        except Exception as exc:"},{"line_number":61,"context_line":"            result[\u0027exception\u0027] \u003d exc"},{"line_number":62,"context_line":"            result[\u0027completion\u0027] \u003d MethodCompletion.RETURNED"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    thread \u003d threading.Thread(target\u003d_target, daemon\u003dTrue)"},{"line_number":65,"context_line":"    thread.start()"}],"source_content_type":"text/x-python","patch_set":7,"id":"21f07c9b_b2abef64","line":62,"in_reply_to":"56c34598_4e862e00","updated":"2026-05-28 06:30:24.000000000","message":"I have to tell Claude off for doing that.","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8c90ffebda138ea75f731b785a84bb97cdb5606b","unresolved":true,"context_lines":[{"line_number":65,"context_line":"    thread.start()"},{"line_number":66,"context_line":"    thread.join(timeout)"},{"line_number":67,"context_line":"    if thread.is_alive():"},{"line_number":68,"context_line":"        return MethodCompletion.BLOCKED, None"},{"line_number":69,"context_line":"    return result[\u0027completion\u0027], result[\u0027exception\u0027]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"716a0a38_a51eb43c","line":68,"updated":"2026-05-28 02:09:06.000000000","message":"nit: This could just set result[\u0027completion\u0027] to BLOCKED I guess and return below, but only a test","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0876c4dd144994538def666b045305a5aead3d41","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    thread.start()"},{"line_number":66,"context_line":"    thread.join(timeout)"},{"line_number":67,"context_line":"    if thread.is_alive():"},{"line_number":68,"context_line":"        return MethodCompletion.BLOCKED, None"},{"line_number":69,"context_line":"    return result[\u0027completion\u0027], result[\u0027exception\u0027]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"4a6b2920_89561c24","line":68,"in_reply_to":"716a0a38_a51eb43c","updated":"2026-05-28 06:30:24.000000000","message":"Done","commit_id":"fe53b5731d78bbb9231ab7d7ae3bce9714167ade"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"60a589c112d60c10ddf8c8f460b01bf210e1aa25","unresolved":true,"context_lines":[{"line_number":65,"context_line":"    thread.join(timeout)"},{"line_number":66,"context_line":"    if thread.is_alive():"},{"line_number":67,"context_line":"        result[\u0027completion\u0027] \u003d MethodCompletion.BLOCKED"},{"line_number":68,"context_line":"        result[\u0027exception\u0027] \u003d None"},{"line_number":69,"context_line":"    return result[\u0027completion\u0027], result[\u0027exception\u0027]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"74eb2431_51ac79a0","line":68,"updated":"2026-05-28 16:28:04.000000000","message":"nit: This should have already been None based on L54 init but doesn\u0027t hurt anything","commit_id":"4bc5833176bc70ec67aa25e3ebedf42f7f15e373"}]}
