)]}'
{"id":"openstack%2Fswift~1001761","triplet_id":"openstack%2Fswift~feature%2Fthreaded~Iab9673ea8daf51e34e33676d9c127a9695e41361","project":"openstack/swift","branch":"feature/threaded","topic":"eventlet-removal","hashtags":[],"change_id":"Iab9673ea8daf51e34e33676d9c127a9695e41361","subject":"obj: use the known object size to end a read without an extra read()","status":"NEW","created":"2026-08-21 07:26:39.000000000","updated":"2026-08-28 16:36:18.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"work_in_progress":true,"has_review_started":true,"meta_rev_id":"07186f47d6a8238de264a1ad6f4a506a7e82567f","_number":1001761,"virtual_id_number":1001761,"owner":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-08-21 09:09:37.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-08-21 09:09:37.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":"2f5b0add5ad77f3f6f4315f41634d79d84829d8c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"date":"2026-08-21 07:26:39.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"95d1c162d319f976fe7bca6e6e10822345c20df5","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-21 09:09:37.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/7b73e60b031d478189aa1d3460ab1d46\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/1463d86dc6eb4bd58b659ab8ef138689 : SUCCESS in 11m 00s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/4494e7319af043aab68958ec409ee7b0 : SUCCESS in 8m 31s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/cd638a59d6e44f9e96a270ea7a12d32b : SUCCESS in 13m 06s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/626d1c25bb7044b4966d26933b820dc8 : SUCCESS in 21m 06s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/6bde9c652a534264a8b57101dffa7a4c : SUCCESS in 21m 38s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/c9506f85e78a48a0b67a70a5078696d0 : SUCCESS in 7m 35s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/0a05eaa4de08448280135b71bcbbd433 : SUCCESS in 26m 31s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/0e6ef94162244911b20face3dec23764 : SUCCESS in 22m 39s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/7b15dde7831a4b6a8ed9a9b10f40d346 : SUCCESS in 26m 37s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/ae447f92eeac4e2cb4822c51e2349f7c : SUCCESS in 21m 23s\n- swift-tox-py3-no-eventlet https://zuul.opendev.org/t/openstack/build/517ebaa3f71047e2940963c3076e8cd5 : SUCCESS in 23m 30s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/3993c8fa0efd40ddb2d02e4bf2c5bba4 : SUCCESS in 16m 11s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/ada4cfda956344f5be0da7b7e54ec2ee : SUCCESS in 15m 49s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/69a59e1c0a304327bc22b5354f45ae4a : SUCCESS in 11m 16s\n- swift-tox-func-no-eventlet-py312 https://zuul.opendev.org/t/openstack/build/cabb86554b0440939840241eaa8858e3 : SUCCESS in 12m 08s\n- swift-tox-func-py39-centos-9-stream https://zuul.opendev.org/t/openstack/build/03d78a4d5b7c4432896540f543f03940 : SUCCESS in 12m 17s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/5610b44f462e440f991fe6a9b3d0fdbc : SUCCESS in 5m 39s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/da32ffc4a9ce4f89a220941c52b4057b : FAILURE in 10m 08s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/2d20c56800e64b3eb6a62ca4eaf2a4e4 : SUCCESS in 10m 50s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/1e223801581a4e64b436b4ad5d6b7d38 : SUCCESS in 1h 03m 17s\n- swift-probetests-no-eventlet-centos-9-stream https://zuul.opendev.org/t/openstack/build/d200bffbac6640df885610d93502c1ba : SUCCESS in 54m 55s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/6ed4b4e01c1348cbaf739060818e7309 : SUCCESS in 12m 22s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/74ee35f968484270be59ba201586eec7 : SUCCESS in 5m 34s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/240ea28256f6402295517b9997766161 : SUCCESS in 27m 24s\n\nWarning:\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.","accounts_in_message":[],"_revision_number":1},{"id":"2e492e888a2eb97dcc04e1dcc72baab1dafe2c1f","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-21 10:23:43.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/387f5588e6e74e9a8f91d0ebea5fd6bf\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/424d874dd28642b8bea326ef66923728 : SUCCESS in 1h 17m 47s","accounts_in_message":[],"_revision_number":1},{"id":"07186f47d6a8238de264a1ad6f4a506a7e82567f","tag":"autogenerated:gerrit:setWorkInProgress","author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"date":"2026-08-28 16:36:18.000000000","message":"Set Work In Progress","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"83b86dcc48b12f3f2dcd68cb3a9d0c1ca6509766","revisions":{"83b86dcc48b12f3f2dcd68cb3a9d0c1ca6509766":{"kind":"REWORK","_number":1,"created":"2026-08-21 07:26:39.000000000","uploader":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"ref":"refs/changes/61/1001761/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/61/1001761/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/61/1001761/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/61/1001761/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/61/1001761/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/61/1001761/1"}}},"commit":{"parents":[{"commit":"3e7771d6d009ca99db53b8894d398b1429266963","subject":"Add a without-eventlet probe test job","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/3e7771d6d009ca99db53b8894d398b1429266963"}]}],"author":{"name":"Christian Schwede","email":"cschwede@mailbox.org","date":"2026-08-20 14:27:09.000000000","tz":120},"committer":{"name":"Christian Schwede","email":"cschwede@mailbox.org","date":"2026-08-21 07:17:02.000000000","tz":120},"subject":"obj: use the known object size to end a read without an extra read()","message":"obj: use the known object size to end a read without an extra read()\n\nDiskFileReader._inner_iter() reads disk_chunk_size at a time until read()\nreturns b\u0027\u0027. That empty read only exists to spot EOF, and it is not the\nonly wasted one: a 16 KiB object read in 64 KiB chunks costs three reads\nwhere one would do.\n\nThe reader already knows the size. _obj_size is statbuf.st_size, checked\nagainst the metadata Content-Length at open, so reading that many bytes\nfrom the current offset is exactly reading to EOF. Track what is left,\nsize the last read to it and stop at zero. Ranged reads work out too, as\nthe remaining count starts from the seek offset.\n\nCorruption detection is unchanged: a short file still leaves\n_bytes_read !\u003d _obj_size for close() to quarantine on, and a long one is\nalready quarantined by open(). Without _obj_size the old loop is used.\n\nMeasured on an object server (16 KiB GET, concurrency 1, 420 requests):\nread 4.00 -\u003e 2.00 syscalls per request. Shared code, so eventlet gains\nthe same.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Iab9673ea8daf51e34e33676d9c127a9695e41361\nSigned-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e\n(cherry picked from commit fd7e781d8252d22ebfc8ef6fa4bc942285ad7a74)\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/83b86dcc48b12f3f2dcd68cb3a9d0c1ca6509766"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/83b86dcc48b12f3f2dcd68cb3a9d0c1ca6509766"}]},"branch":"refs/heads/feature/threaded"}},"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":""}}}]}
