)]}'
{"id":"openstack%2Ffreezer-api~1006687","triplet_id":"openstack%2Ffreezer-api~master~I31fb2b53a111019cbf27f32f169106bec9846aeb","project":"openstack/freezer-api","branch":"master","attention_set":{"39044":{"account":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"last_update":"2026-09-22 07:53:11.000000000","reason":"A robot voted negatively on a label"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"I31fb2b53a111019cbf27f32f169106bec9846aeb","subject":"Poll for jobs through a client record endpoint","status":"NEW","created":"2026-09-22 07:12:05.000000000","updated":"2026-09-24 15:25:10.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":false,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"77844e822384e67f4f646951baba25727c46942f","_number":1006687,"virtual_id_number":1006687,"owner":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":-1,"date":"2026-09-24 15:16:57.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":-1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-22 07:26:51.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-09-22 07:53:11.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"272db1504ce09434640a62069d729db3c566679e","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"date":"2026-09-22 07:12:05.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"5f71c2a4924887b19be1023c3e5287c3c5ab435d","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"date":"2026-09-22 07:14:44.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"b3457355eb85711bb33446cf80d279e2b0abdaac","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-22 07:26:51.000000000","message":"Patch Set 2:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/ccc1d7628c3f41a7b07ba503fa97e15d\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/42f7e2b4ad2146d39f10fc6dca7943ef : SUCCESS in 5m 00s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/e9b09e0cdb394a668e01936e7ae23c95 : SUCCESS in 5m 42s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/530dcc4d09a04d9f9e4bd32bb0ac781b : SUCCESS in 9m 46s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"132c00448d697589afdd2326496b0c3e0577ae09","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-22 07:53:11.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/b0f8338009724b49b1e47e68696f06ae\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/1513f78800794c45995d59b2757d4246 : FAILURE in 6m 03s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/10ce9b00bb374eaea498ee041b874eee : SUCCESS in 3m 02s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/a32b934e47a448bf8af71392a2e1cd69 : SUCCESS in 3m 34s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/cc5670d03fa64debaee93b994c403cb8 : SUCCESS in 4m 05s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/3dbd1a6a16d64920a1b0a264f8732594 : SUCCESS in 3m 42s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/d544bb50ed0c486d98f429eaddcd8f4a : SUCCESS in 3m 39s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/f76e2bbc37424b73bfbc7fd59b515e44 : SUCCESS in 4m 07s\n- openstack-tox-pylint https://zuul.opendev.org/t/openstack/build/1c6041cd8c6a4410969b7b71e3069cc3 : SUCCESS in 3m 03s\n- freezer-tempest-basic https://zuul.opendev.org/t/openstack/build/3b4ac956880d4a499758b8f4085316f4 : FAILURE in 34m 29s\n- freezer-tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/af9f9a71d91f4f6dac8953e1a7203ab4 : FAILURE in 35m 33s","accounts_in_message":[],"_revision_number":2},{"id":"a865c7c1aa20e1727fcbdfcbe68e50e3347319cd","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"date":"2026-09-24 10:42:57.000000000","message":"Uploaded patch set 3.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"4b6c5b7173a0f5cb891126ad2c206ce609608d8d","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-24 11:00:59.000000000","message":"Patch Set 3:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/1c34b0a59c64479db5207f82d896741c\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/a2b563d184fd4beabd4fd72d71cae2ff : SUCCESS in 4m 57s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/2aeeba269b4147f391d2b35e663377b0 : SUCCESS in 10m 06s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"67e8fda4b1ddff4e103f8da5037a22e6174515c6","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-24 11:21:42.000000000","message":"Patch Set 3: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/c2febc7ea8df4975b0364eea141413f6\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/197c57f5233a4acbba656fa9ec62979f : SUCCESS in 4m 08s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/12ccc00cfed946ff8e174c5500329ad6 : SUCCESS in 3m 21s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/79210ef5149e4838b510d18ded20ab15 : SUCCESS in 3m 27s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/20f7d01232204e9a8493591f60e720b4 : SUCCESS in 7m 34s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/cda5520fb65c4175840139d965c226db : SUCCESS in 3m 23s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/0607dff8b604475b8cb26cc8881ebce6 : SUCCESS in 2m 49s\n- openstack-tox-pylint https://zuul.opendev.org/t/openstack/build/a7be92f8456143c3bdf334186e0c7824 : SUCCESS in 5m 01s\n- freezer-tempest-basic https://zuul.opendev.org/t/openstack/build/eddf945efa8c4d8dbea4d42acb4d351a : FAILURE in 25m 12s\n- freezer-tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/517113c9011e49c081850d6e42e0bf85 : FAILURE in 34m 40s","accounts_in_message":[],"_revision_number":3},{"id":"6b3cdfc276b2e38374104bde706b0e34059babef","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"date":"2026-09-24 14:34:13.000000000","message":"Uploaded patch set 4: New patch set was added with same tree, parent tree, and commit message as Patch Set 3.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":4},{"id":"ed4766776a810d19ecd4e0b13ef5df2332f7fe25","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-24 15:16:57.000000000","message":"Patch Set 4: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/3f147bce158846f6b10e2642f0b769a6\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/4785be6703d9483ebcb368fb67bf1a36 : SUCCESS in 3m 19s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/f57ef072e99f48238cbbe28ce43e2746 : SUCCESS in 3m 37s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/7746dc3cc3bb459c8eb88b1e89e346bb : SUCCESS in 4m 01s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/36c6aa9828eb475e98a442c2b0b7326b : SUCCESS in 5m 53s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/e9d00492ee94418bac81b3a8d6930880 : SUCCESS in 5m 30s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/2b91338772264e24b0c2242414d23794 : SUCCESS in 3m 29s\n- openstack-tox-pylint https://zuul.opendev.org/t/openstack/build/cb85b0ae19254b6b8e2565b4755289db : SUCCESS in 4m 05s\n- freezer-tempest-basic https://zuul.opendev.org/t/openstack/build/5cbf38caede84cd39b90c5382953e81b : FAILURE in 36m 29s\n- freezer-tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/830a85f6a40c4406a07b423ee40167dd : FAILURE in 18m 11s","accounts_in_message":[],"_revision_number":4},{"id":"77844e822384e67f4f646951baba25727c46942f","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-24 15:25:10.000000000","message":"Patch Set 4:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/743aee676c20412490cead700041005f\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/f9daecf9bea148759f47e3567a77e564 : SUCCESS in 5m 32s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/12f4717d5a80448c935b6cf9eece4cb3 : SUCCESS in 8m 49s (non-voting)","accounts_in_message":[],"_revision_number":4}],"current_revision_number":4,"current_revision":"1d8b9d0e2745882bbc1fd2f82b57b17983aebf88","revisions":{"08e17d008518758b66a4807483e2af9dfdef6ba8":{"kind":"REWORK","_number":1,"created":"2026-09-22 07:12:05.000000000","uploader":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"ref":"refs/changes/87/1006687/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/freezer-api","ref":"refs/changes/87/1006687/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/1"}}},"commit":{"parents":[{"commit":"303c76cdf4e8af055ff4b101a112187406d4df01","subject":"Validate a job against every scheduler of its client","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/303c76cdf4e8af055ff4b101a112187406d4df01"}]}],"author":{"name":"Alicja Filipek","email":"alicja.filipek@cleura.com","date":"2026-09-21 14:06:14.000000000","tz":120},"committer":{"name":"Alicja Filipek","email":"alicja.filipek@cleura.com","date":"2026-09-21 14:11:09.000000000","tz":120},"subject":"Record client liveness on the job poll","message":"Record client liveness on the job poll\n\nA scheduler already asks for its jobs every [scheduler] interval\nseconds, so that request is now also what proves it is alive. Nothing\nneeds a second request or a second timer.\n\nGET /v2/{project_id}/jobs takes two optional query parameters: the\nuuid the scheduler was given at registration, naming the record it\nfetches for, and from_freezer_cli. Both are needed to record anything,\nand the client library sends from_freezer_cli\u003dtrue by default, so\nlisting jobs from a scheduler\u0027s own host cannot make that scheduler\nlook alive. A request carrying neither lists jobs as before.\n\nThe write is handed to a small bounded worker pool, so fetching work\nnever waits on the database. A stamp that fails or cannot be queued is\ndropped and logged; the next poll corrects the record.\n\nBoth drivers refuse a uuid held by more than one record rather than\nreporting one scheduler alive on another\u0027s poll. Only a bug can\nproduce that, but the column carries no unique index: soft-deleted\nrows keep their uuid.\n\nImplements: blueprint client-heartbeat\nChange-Id: I31fb2b53a111019cbf27f32f169106bec9846aeb\nSigned-off-by: Alicja Filipek \u003calicja.filipek@cleura.com\u003e\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/08e17d008518758b66a4807483e2af9dfdef6ba8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/08e17d008518758b66a4807483e2af9dfdef6ba8"}]},"branch":"refs/heads/master"},"294da953ae74c6d4ea65a08bdfa24b97ff250eae":{"kind":"REWORK","_number":2,"created":"2026-09-22 07:14:44.000000000","uploader":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"ref":"refs/changes/87/1006687/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/freezer-api","ref":"refs/changes/87/1006687/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/2"}}},"commit":{"parents":[{"commit":"303c76cdf4e8af055ff4b101a112187406d4df01","subject":"Validate a job against every scheduler of its client","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/303c76cdf4e8af055ff4b101a112187406d4df01"}]}],"author":{"name":"Alicja Filipek","email":"alicja.filipek@cleura.com","date":"2026-09-21 14:06:14.000000000","tz":120},"committer":{"name":"Alicja Filipek","email":"alicja.filipek@cleura.com","date":"2026-09-22 07:14:25.000000000","tz":120},"subject":"Record client liveness on the job poll","message":"Record client liveness on the job poll\n\nA scheduler already asks for its jobs every [scheduler] interval\nseconds, so that request is now also what proves it is alive. Nothing\nneeds a second request or a second timer.\n\nGET /v2/{project_id}/jobs takes two optional query parameters: the\nuuid the scheduler was given at registration, naming the record it\nfetches for, and from_freezer_cli. Both are needed to record anything,\nand the client library sends from_freezer_cli\u003dtrue by default, so\nlisting jobs from a scheduler\u0027s own host cannot make that scheduler\nlook alive. A request carrying neither lists jobs as before.\n\nThe write is handed to a small bounded worker pool, so fetching work\nnever waits on the database. A stamp that fails or cannot be queued is\ndropped and logged; the next poll corrects the record.\n\nBoth drivers refuse a uuid held by more than one record rather than\nreporting one scheduler alive on another\u0027s poll. Only a bug can\nproduce that, but the column carries no unique index: soft-deleted\nrows keep their uuid.\n\nImplements: blueprint client-heartbeat\nChange-Id: I31fb2b53a111019cbf27f32f169106bec9846aeb\nSigned-off-by: Alicja Filipek \u003calicja.filipek@cleura.com\u003e\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/294da953ae74c6d4ea65a08bdfa24b97ff250eae"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/294da953ae74c6d4ea65a08bdfa24b97ff250eae"}]},"branch":"refs/heads/master"},"5cc0f8e747f8f85ad05fff6743aa1192b3627d1b":{"kind":"REWORK","_number":3,"created":"2026-09-24 10:42:57.000000000","uploader":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"ref":"refs/changes/87/1006687/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/freezer-api","ref":"refs/changes/87/1006687/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/3"}}},"commit":{"parents":[{"commit":"7b646dccab09c617ce0c275c513c17082de49121","subject":"Validate a job against every scheduler of its client","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/7b646dccab09c617ce0c275c513c17082de49121"}]}],"author":{"name":"Alicja Filipek","email":"alicja.filipek@cleura.com","date":"2026-09-23 07:03:05.000000000","tz":120},"committer":{"name":"Alicja Filipek","email":"alicja.filipek@cleura.com","date":"2026-09-24 10:42:16.000000000","tz":120},"subject":"Poll for jobs through a client record endpoint","message":"Poll for jobs through a client record endpoint\n\nA scheduler already asks for its jobs every [scheduler] interval\nseconds, so that request is now also what proves it is alive: no second\nrequest and no second timer.\n\nGET /v2/{project_id}/clients/{uuid}/poll answers the jobs of the client\nthe record belongs to and records that the record was heard from, on\nthe first page only, so paging a long list still costs one write. The\nrecord is named by uuid because a client_id names the cluster; answered\n404, a scheduler registers again. The write is handed to a bounded\nworker pool, so fetching work never waits on it and a lost stamp costs\none interval.\n\nGET /jobs is untouched and records nothing, so it stays how people,\nscripts and older schedulers read jobs.\n\nThe endpoint carries its own clients:poll rule, and a central record is\npolled under clients:poll_central, the rule that guards registering one.\n\nThe client_id narrows the query in the database rather than being added\nto the caller\u0027s search. Falcon wants one name for a path field two\nroutes share, hence client_ref.\n\nImplements: blueprint client-heartbeat\nChange-Id: I31fb2b53a111019cbf27f32f169106bec9846aeb\nSigned-off-by: Alicja Filipek \u003calicja.filipek@cleura.com\u003e\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/5cc0f8e747f8f85ad05fff6743aa1192b3627d1b"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/5cc0f8e747f8f85ad05fff6743aa1192b3627d1b"}]},"branch":"refs/heads/master"},"1d8b9d0e2745882bbc1fd2f82b57b17983aebf88":{"kind":"NO_CHANGE","_number":4,"created":"2026-09-24 14:34:13.000000000","uploader":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"ref":"refs/changes/87/1006687/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/freezer-api","ref":"refs/changes/87/1006687/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/freezer-api refs/changes/87/1006687/4"}}},"commit":{"parents":[{"commit":"088a19d8ebb30f824adec7cfc56b35340abfe59b","subject":"Validate a job against every scheduler of its client","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/088a19d8ebb30f824adec7cfc56b35340abfe59b"}]}],"author":{"name":"Alicja Filipek","email":"alicja.filipek@cleura.com","date":"2026-09-23 07:03:05.000000000","tz":120},"committer":{"name":"Alicja Filipek","email":"alicja.filipek@cleura.com","date":"2026-09-24 14:29:29.000000000","tz":120},"subject":"Poll for jobs through a client record endpoint","message":"Poll for jobs through a client record endpoint\n\nA scheduler already asks for its jobs every [scheduler] interval\nseconds, so that request is now also what proves it is alive: no second\nrequest and no second timer.\n\nGET /v2/{project_id}/clients/{uuid}/poll answers the jobs of the client\nthe record belongs to and records that the record was heard from, on\nthe first page only, so paging a long list still costs one write. The\nrecord is named by uuid because a client_id names the cluster; answered\n404, a scheduler registers again. The write is handed to a bounded\nworker pool, so fetching work never waits on it and a lost stamp costs\none interval.\n\nGET /jobs is untouched and records nothing, so it stays how people,\nscripts and older schedulers read jobs.\n\nThe endpoint carries its own clients:poll rule, and a central record is\npolled under clients:poll_central, the rule that guards registering one.\n\nThe client_id narrows the query in the database rather than being added\nto the caller\u0027s search. Falcon wants one name for a path field two\nroutes share, hence client_ref.\n\nImplements: blueprint client-heartbeat\nChange-Id: I31fb2b53a111019cbf27f32f169106bec9846aeb\nSigned-off-by: Alicja Filipek \u003calicja.filipek@cleura.com\u003e\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/1d8b9d0e2745882bbc1fd2f82b57b17983aebf88"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/freezer-api/commit/1d8b9d0e2745882bbc1fd2f82b57b17983aebf88"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
