a9a1ea41375caf38f49efae9959ab029f433560d
11051 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
Zuul
|
a9a1ea4137 | Merge "Adds --skip-commits to s-m-s-r" | ||
|
Zuul
|
e5d44d669a | Merge "proxy: use cooperative tokens to coalesce updating shard range requests into backend" | ||
|
Christian Ohanaja
|
ba1ab9d11c |
Adds --skip-commits to s-m-s-r
This patch replaces --force-commits with a --skip-commits flag in swift-manage-shard-ranges to determine when to commit object updates. Change-Id: I6de041f5c12dca2618d22d1271efe242b2f35258 Signed-off-by: Christian Ohanaja <cohanaja@nvidia.com> |
||
|
Jianjian Huo
|
d9883d0834 |
proxy: use cooperative tokens to coalesce updating shard range requests into backend
The cost of memcache misses could be deadly. For example, when updating shard range cache query miss, PUT requests would have to query the backend to figure out which shard to upload the objects. And when a lot of requests are sending to the backend at the same time, this could easily overload the root containers and cause a lot of 500/503 errors; and when proxy-servers receive responses of all those 200 backend shard range queries, they could in turn try to write the same shard range data into memcached servers at the same time, and cause memcached to return OOM failures too. We have seen cache misses frequently to updating shard range cache in production, due to Memcached out-of-memory and cache evictions. To cope with those kind of situations, a memcached based cooperative token mechanism can be added into proxy-server to coalesce lots of in-flight backend requests into a few: when updating shard range cache misses, only the first few of requests will get global cooperative tokens and then be able to fetch updating shard ranges from backend container servers. And the following cache miss requests will wait for cache filling to finish, instead of all querying the backend container servers. This will prevent a flood of backend requests to overload both container servers and memcached servers. Drive-by fix: when memcache is not available, object controller will only need to retrieve a specific shard range from the container server to send the update request to. Co-Authored-By: Clay Gerrard <clay.gerrard@gmail.com> Co-Authored-By: Tim Burke <tim.burke@gmail.com> Co-Authored-By: Yan Xiao <yanxiao@nvidia.com> Co-Authored-By: Shreeya Deshpande <shreeyad@nvidia.com> Signed-off-by: Jianjian Huo <jhuo@nvidia.com> Change-Id: I38c11b7aae8c4112bb3d671fa96012ab0c44d5a2 |
||
|
Zuul
|
dd23020c30 | Merge "common: add memcached based cooperative token mechanism." | ||
|
ashnair
|
d353f15fac |
account-broker: add resilient path property with lazy cache
Add a path property for AccountBroker and use lazy, resilient _populate_instance_cache(). Use None attrs as flags, avoid broad try/except in path, and retry if cache population fails. Change-Id: Ic7c2aa878caf039b29abb900b4f491130be3d8a8 Signed-off-by: ashnair <ashnair@nvidia.com> |
||
|
Jianjian Huo
|
707a65ab3c |
common: add memcached based cooperative token mechanism.
Memcached based cooperative token is a improved version of ghetto lock, see the description of ghetto lock at here: https://github.com/memcached/memcached/wiki/ProgrammingTricks It's used to avoid the thundering herd situation which many caching users face: given a cache item that is popular and difficult to recreate, in the event of cache misses, users could end up with hundreds (or thousands) of processes slamming the backend database at the same time in an attempt to refill the same cache content. This thundering herd problem not only often leads to unresponsive backend; and also those writes into memcached cause premature cache eviction under memory pressure. With cooperative token, when lots of in-flight callers try to get the cached item specified by key from memcache and get cache misses, only the first few query requests (limited by by ``num_tokens``) will be able get the cooperative tokens by creating or incrementing an internal memcache key, and then those callers with tokens can send backend requests to fetch data from backend servers and be able to set data into memcache; all other cache miss requests without a token should wait for cache filling to finish, instead of all querying the backend servers at the same time. Co-Authored-By: Tim Burke <tim.burke@gmail.com> Co-Authored-By: Clay Gerrard <clay.gerrard@gmail.com> Co-Authored-By: Yan Xiao <yanxiao@nvidia.com> Co-Authored-By: Alistair Coles <alistairncoles@gmail.com> Signed-off-by: Jianjian Huo <jhuo@nvidia.com> Change-Id: I50ff92441c2f2c49b3034644aba59930e8a99589 |
||
|
Christian Ohanaja
|
b035ed1385 |
add Christian O to AUTHORS
Change-Id: Id2ab5c00182516a744fd9e8b8e89f7232a433222 Signed-off-by: Christian Ohanaja <cohanaja@nvidia.com> |
||
|
Zuul
|
92dd03ed77 | Merge "diskfile: Fix UnboundLocalError during part power increase" | ||
|
Zuul
|
4cacaa968f | Merge "test: do not create timestamp collision unnecessarily" | ||
|
Zuul
|
d0a3b1b016 | Merge "test: fix module state pollution" | ||
|
Zuul
|
f3e98aa710 | Merge "tests: simplify TestGlobalSetupObjectReconstructor setUp" | ||
|
Zuul
|
2142861146 | Merge "cleaning up and fixing some links" | ||
|
Clay Gerrard
|
7b05356bd0 |
test: do not create timestamp collision unnecessarily
Change-Id: Ib6bf702e38495e52e3b2f5ca95ed17c519018474 Signed-off-by: Clay Gerrard <clay.gerrard@gmail.com> |
||
|
Clay Gerrard
|
815393dff4 |
test: fix module state pollution
The disable_fallocate function provided in common.utils doesn't really have a way to undo it - it's tested independently in test_utils. It shouldn't be used on test_diskfile or else test_utils fallocate tests will fail afterwards. Change-Id: I6ffa97b39111ba25f85ba7cfde21440d975dc760 Signed-off-by: Clay Gerrard <clay.gerrard@gmail.com> |
||
|
Alistair Coles
|
c26c7b8edd |
tests: simplify TestGlobalSetupObjectReconstructor setUp
Change-Id: I0168ab113fdda60ed858ed0928356699399d4044 Signed-off-by: Alistair Coles <alistairncoles@gmail.com> |
||
|
Christian Ohanaja
|
bd27fc6baf |
cleaning up and fixing some links
Verified every changed link works by building and testing manually Change-Id: I4bb6cc238d4e567e3edc6c15a58d4a5f9a41e273 Signed-off-by: Christian Ohanaja <cohanaja@nvidia.com> |
||
| 63eeb005bd |
Update master for stable/2025.2
Add file to the reno documentation build to show release notes for stable/2025.2. Use pbr instruction to increment the minor version number automatically so that master versions are higher than the versions on stable/2025.2. Sem-Ver: feature Change-Id: I3ab48efc8208b791bfdf5ac24d098b8e236d7031 Signed-off-by: OpenStack Release Bot <infra-root@openstack.org> Generated-By: openstack/project-config:roles/copy-release-tools-scripts/files/release-tools/add_release_note_page.sh |
|||
|
Tim Burke
|
397f94c73b |
diskfile: Fix UnboundLocalError during part power increase
Closes-Bug: #2122543 Co-Authored-By: Clay Gerrard <clay.gerrard@gmail.com> Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I8a2a96394734899ee48e1d9264bf3908968c51a8 |
||
|
Tim Burke
|
82cb5a5d78 |
AUTHORS/CHANGELOG for 2.36.0
Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I9c86383ed3d35657a7e88fa9cdc6a94559e5ca372.36.0 |
||
|
Tim Burke
|
e13f4abcd7 |
tests: Skip some tests if crc32c is not available
Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I2e2a4e2c448319e6531372ae06ab81eb58edc57e |
||
|
Tim Burke
|
21325988df |
CI: Remove a bunch of unnecessary bindep profiles
Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I26be3752b8c67b7a6a0a9c75571a44f3827cbb90 |
||
|
Tim Burke
|
3db8e2d05f |
Clean up some py36 infra
- Drop py36 versions from py3-constraints.txt - Remove py36 tox environment Forgot to do this when we dropped py36 support. Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I0233e1dd036b9a420c815fec3c9632d2967b934e |
||
|
Tim Burke
|
1ed7b71bb5 |
Update py3-constraints.txt
We're starting to see projects drop py39 support; seems as good a time as any for an update. Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I481efbd2627e517edf49f3025b3399a86d1b4f3e |
||
|
Tim Burke
|
a18fb08b48 |
Switch py39 jobs to use py3-constraints.txt
Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I6fb806d299fc30f6ceaeba78cf3a810298e94f26 |
||
|
Zuul
|
e10c2bafcb | Merge "proxy-logging: create field for access_user_id" | ||
|
Vitaly Bordyug
|
32eaab20b1 |
proxy-logging: create field for access_user_id
Added the new field to be able to log the access key during the s3api calls, while reserving the field to be filled with auth relevant information in case of other middlewares. Added respective code to the tempauth and keystone middlewares. Since s3api creates a copy of the environ dict for the downstream request object when translating the s3req.to_swift_req the environ dict that is seen/modifed in other mw module is not the same instance seen in proxy-logging - using mutable objects get transfered into the swift_req.environ. Change the assert in test_proxy_logging from "the last field" to the index 21 in the interests of maintainability. Also added some regression tests for object, bucket and s3 v4 apis and updated the documentation with the details about the new field. Signed-off-by: Vitaly Bordyug <vbordug@gmail.com> Change-Id: I0ce4e92458e2b05a4848cc7675604c1aa2b64d64 |
||
|
Tim Burke
|
aa3a4eeb27 |
docs: Fix python3 package names
Closes-Bug: #2120783 Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: Id175329d717bb4959def8b43765fec668aa26696 |
||
|
Zuul
|
457af40c9b | Merge "s3api compat tests: stop asserting DisplayName in Owner" | ||
|
Alistair Coles
|
c4cc83c5e7 |
s3api compat tests: stop asserting DisplayName in Owner
S3 stopped returning DisplayNamme in the Owner field of object listings [1], so the tests need to stop asserting that it is present. Further work is needed to drop DisplayName from the Swift s3api responses [2]. [1] https://docs.aws.amazon.com/AmazonS3/latest/API/API_Owner.html [2] https://bugs.launchpad.net/swift/+bug/2120622 Change-Id: Ia915a65313394910c74ae826c912b5549e833a7b Signed-off-by: Alistair Coles <alistairncoles@gmail.com> |
||
|
Tim Burke
|
81df05a9c4 |
checksums: Ignore broken pyeclib installs
The RuntimeError gives more of a hint than the TypeError, but we haven't really solved the issue. If there's a busted pyeclib install, it's safe to assume it won't have ISA-L alongside it; just proceed assuming it's not available. Closes-Bug: #2120591 Related-Change: I64a85eb739fb72efe41f1ee829e463167246b793 Co-Authored-By: Alistair Coles <alistairncoles@gmail.com> Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I2791566b208327b1fb536fb56a363337ab3f3941 |
||
|
Zuul
|
dfab57be74 | Merge "Revert "Remove unused MANIFEST.in"" | ||
|
Tim Burke
|
4d2426591e |
CI: Stop using bionic
In order to continue testing on py37, start using pyenv to install it. Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: Ida8be4477116d3b44e3d7b470a183d2298e2d3d5 |
||
|
Zuul
|
28a56e3f1b | Merge "zuul: run py3.13 unit tests in the gate" | ||
|
Zuul
|
c1d34baa78 | Merge "Timestamp: fix inconsistent raw and normal values" | ||
|
Zuul
|
fa3a75b73d | Merge "checksum.py: fail gracefully if pyeclib is broken" | ||
|
Tim Burke
|
de81a844f3 |
Revert "Remove unused MANIFEST.in"
This reverts commit
|
||
|
Alistair Coles
|
7f3e761295 |
zuul: run py3.13 unit tests in the gate
The related change added a py3.13 job tho the check pipeline but not the gate. This patch adds it to the gate too. Change-Id: Ie7e676e7bb2e5f975b560c083432ce6814d38252 Related-Change: Ib797f73134c8fa5ef0dc66aeddf06adfa50ed7d4 Signed-off-by: Alistair Coles <alistairncoles@gmail.com> |
||
|
Alistair Coles
|
5b2e4e00c1 |
ssync unit test: fix intermittent failure
ssync unit tests would sometimes fail when making assertions about the ssync receiver log messages. Test runner output would show that the messages were eventually being logged. However, the assertions could be made before the ssync receiver request thread had completed. A trampoline had been previously been used to workaround this, but that is clearly insufficient. The author found that increasing the trampoline interval would help reduce the rate of failures, but not eliminate them. This patch introduces a custom GreenPool for the unit test wsgi object server so that tests can deterministically wait for the receiver request handling thread to exit before making assertions. Closes-Bug: #212065 Change-Id: I09ad8bb1becae46a78902d1d384a9f27a3d54b38 Signed-off-by: Alistair Coles <alistairncoles@gmail.com> |
||
|
Alistair Coles
|
74274ec8bc |
checksum.py: fail gracefully if pyeclib is broken
If pyeclib dist is missing files then the isal loading would blow up with "TypeError: 'NoneType' object is not iterable". This patch changes that to a RuntimeError with a more useful message. Change-Id: I64a85eb739fb72efe41f1ee829e463167246b793 Closes-Bug: #2120591 Signed-off-by: Alistair Coles <alistairncoles@gmail.com> |
||
|
Alistair Coles
|
93b88540dc |
Timestamp: fix inconsistent raw and normal values
Previously it was possible for a Timestamp to have inconsistent raw
and normal values. For example:
>>> ts1 = Timestamp(1755077566.523385)
>>> (ts1.normal, ts1.raw, (~ts1).normal)
('1755077566.52339', 175507756652338, '8244922433.47661')
This results in the invert function not being reliably reversible:
(~(~ts1)).normal
'1755077566.52338'
The cause is that the normal value is based on Timestamp.timestamp
which preserves the precision of the value given to the constructor,
whereas the invert function uses the limited precision raw value.
This patch forces Timestamp.timestamp to have the limited precision
value of Timestamp.raw.
Change-Id: I4e7fd6078aae3f284628303f20ced66aa702c466
Signed-off-by: Alistair Coles <alistairncoles@gmail.com>
|
||
|
Zuul
|
bdb052b59b | Merge "ssync-receiver: terminate session if subreq read times out" | ||
|
Zuul
|
044ba6c40f | Merge "Ring v2 follow-up" | ||
|
Tim Burke
|
683218c523 |
Ring v2 follow-up
Signed-off-by: Tim Burke <tim.burke@gmail.com> Change-Id: I75bd005a4a3bc79c1bd8f8fa1153a64059970865 |
||
|
Zuul
|
c8d00108a6 | Merge "Fix another way mw may encouter invalid swift paths" | ||
|
Zuul
|
d535833b0b | Merge "crypto: Fix traceback on non-utf8, non-swift paths" | ||
|
Clay Gerrard
|
a770881b59 |
Fix another way mw may encouter invalid swift paths
Related-Change-Id: I8c342c4751ba3ca682efd152e90e396e9f8eb851 Change-Id: I9df32c5aae4e681d488419f36982ffc36589d50a Signed-off-by: Clay Gerrard <clay.gerrard@gmail.com> |
||
|
Zuul
|
ee432f03ac | Merge "ring: Introduce a v2 ring format" | ||
|
Tim Burke
|
1dc3307eaf |
ssync-receiver: terminate session if subreq read times out
If a PUT subrequest body iterator times out while the object server is reading it, the object server will handle the timeout and return a 500 response to the ssync receiver. Previously, the ssync receiver would attempt to drain the remainder of the subrequest body iterator and then resume reading the next subrequest from the SSYNC body. However, the attempt to drain the subrequest iterator would fail (silently) because the timeout had already caused the iterator to exit. The ssync receiver would therefore treat any remaining subrequest body as the preamble to the next subrequest. This remaining subrequest body content was likely to cause the protocol parsing to fail, but in the worst case could be erroneously interpreted as a valid subrequest. (The exact failure mechanism depends on what state the eventlet.wsgi.Input is left in when the timeout fired.) This patch ensures that the ssync receiver will terminate processing an SSYNC request if an exception occurs while reading a subrequest body. Closes-Bug: #2115991 Change-Id: I585e8a916d947c3da8d7c0e8a85cf0a8ab85f7f0 Co-authored-by: Tim Burke <tim.burke@gmail.com> Signed-off-by: Alistair Coles <alistairncoles@gmail.com> |
||
|
Tim Burke
|
86a1acc9e3 |
crypto: Fix traceback on non-utf8, non-swift paths
fetch_crypto_keys can fail like
get_keys(): from callback: 'utf-8' codec can't encode character '\udcc0' in position 1: surrogates not allowed:
Traceback (most recent call last):
File ".../swift/common/middleware/crypto/crypto_utils.py", line 166, in get_keys
keys = fetch_crypto_keys(key_id=key_id)
File ".../swift/common/middleware/crypto/keymaster.py", line 148, in fetch_crypto_keys
keys['container'] = self.keymaster.create_key(
File ".../swift/common/middleware/crypto/keymaster.py", line 322, in create_key
path = path.encode('utf-8')
UnicodeEncodeError: 'utf-8' codec can't encode character '\udcc0' in position 1: surrogates not allowed
This doesn't fix *all* non-utf8 paths, but
- it was easy enough to avoid the non-swift ones, which have been seen
in prod, and
- there's ample precedent in other middlewares for checking API version.
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: I8c342c4751ba3ca682efd152e90e396e9f8eb851
|