e7bb2a3855258f3c59d947de288b0b22f79c949b
Commit Graph

11081 Commits

This Branch
This Branch
All Branches
Author SHA1 Message Date
Tim Burke
e13f4abcd7 tests: Skip some tests if crc32c is not available
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: I2e2a4e2c448319e6531372ae06ab81eb58edc57e
2025年08月29日 11:16:04 -07:00
Tim Burke
21325988df CI: Remove a bunch of unnecessary bindep profiles
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: I26be3752b8c67b7a6a0a9c75571a44f3827cbb90
2025年08月28日 14:10:35 -07:00
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
2025年08月28日 14:10:32 -07:00
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
2025年08月28日 14:09:56 -07:00
Tim Burke
a18fb08b48 Switch py39 jobs to use py3-constraints.txt
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: I6fb806d299fc30f6ceaeba78cf3a810298e94f26
2025年08月28日 14:09:56 -07:00
Zuul
e10c2bafcb Merge "proxy-logging: create field for access_user_id" 2025年08月26日 03:43:46 +00:00
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
2025年08月26日 01:14:37 +00:00
Tim Burke
aa3a4eeb27 docs: Fix python3 package names
Closes-Bug: #2120783
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: Id175329d717bb4959def8b43765fec668aa26696
2025年08月22日 09:02:01 -07:00
Zuul
457af40c9b Merge "s3api compat tests: stop asserting DisplayName in Owner" 2025年08月22日 15:51:48 +00:00
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>
2025年08月22日 14:42:34 +01:00
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
2025年08月21日 08:42:05 -07:00
Zuul
dfab57be74 Merge "Revert "Remove unused MANIFEST.in"" 2025年08月20日 21:08:31 +00:00
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
2025年08月19日 09:43:51 -07:00
Zuul
28a56e3f1b Merge "zuul: run py3.13 unit tests in the gate" 2025年08月16日 03:18:30 +00:00
Zuul
c1d34baa78 Merge "Timestamp: fix inconsistent raw and normal values" 2025年08月15日 18:45:52 +00:00
Zuul
fa3a75b73d Merge "checksum.py: fail gracefully if pyeclib is broken" 2025年08月15日 14:44:44 +00:00
Tim Burke
de81a844f3 Revert "Remove unused MANIFEST.in"
This reverts commit 33b89492eb.
Reason for revert: Some packaging workflows still need this.
Closes-Bug: #2120590
Signed-off-by: Matthew Oliver <matt@oliver.net.au>
Change-Id: I5cfb8e6412adea30a1a21ce20f6a72c30dfbfac3
2025年08月15日 12:00:17 +10:00
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>
2025年08月14日 15:41:38 +01:00
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>
2025年08月14日 15:33:50 +01:00
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>
2025年08月14日 11:14:41 +01:00
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>
2025年08月13日 13:39:29 +01:00
Zuul
bdb052b59b Merge "ssync-receiver: terminate session if subreq read times out" 2025年08月11日 19:06:40 +00:00
Zuul
044ba6c40f Merge "Ring v2 follow-up" 2025年08月08日 04:34:42 +00:00
Tim Burke
683218c523 Ring v2 follow-up
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: I75bd005a4a3bc79c1bd8f8fa1153a64059970865
2025年08月07日 18:54:11 -07:00
Zuul
c8d00108a6 Merge "Fix another way mw may encouter invalid swift paths" 2025年08月07日 00:06:31 +00:00
Zuul
d535833b0b Merge "crypto: Fix traceback on non-utf8, non-swift paths" 2025年08月06日 21:10:22 +00:00
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>
2025年08月06日 14:53:43 -05:00
Zuul
ee432f03ac Merge "ring: Introduce a v2 ring format" 2025年08月05日 07:44:41 +00:00
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>
2025年08月04日 15:01:30 +01:00
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
2025年07月31日 14:52:53 -07:00
Zuul
220f791466 Merge "Clarify why there's a ShardRange.__hash__" 2025年07月31日 20:32:31 +00:00
Zuul
4e32b2d5d0 Merge "diskfile: Stop including traceback on quarantine" 2025年07月31日 00:08:19 +00:00
Zuul
f39133055f Merge "sharder: make gap and overlap warning logs shorter" 2025年07月28日 21:53:26 +00:00
Zuul
2e8338240f Merge "Fix recursion error in account_quota middleware" 2025年07月25日 16:23:14 +00:00
Christian Schwede
06a6329793 Fix recursion error in account_quota middleware
There is an infinite loop if multiple quota limits are set and exceeded,
eventually resulting in a 500 response due to a RecursionError ("maximum
recursion depth exceeded").
The issue is the delayed rejection, required to support container_acls.
If any quota is exceeded the middleware needs to return directly,
without proceeding to check other quota settings.
The fix is basically to add a "return self.app". However, there is quite
some redundant code, thus moving this into its own method.
Another test with multiple exceeded quotas has been added, which is
failing without the bugfix.
Closes-Bug: #2118758
Change-Id: I49ec4c5f6c83f36ce1d38f2f1687081c71488286
Signed-off-by: Christian Schwede <cschwede@redhat.com>
2025年07月25日 09:12:41 +00:00
Alistair Coles
fd342b9190 sharder: make gap and overlap warning logs shorter
Previously, when the audit process detected gaps and/or overlaps in a
DB's shard ranges, it would log a warning that included a list of all
impacted shard ranges. The log message can grow long when there are
gaps or overlaps involving many shard ranges: so long that syslog
might raise an OSError (Message too long).
This patch shortens these log warning messages to only include a count
of the number of gaps and/or overlaps. The count may still be useful
to observe how a problem has developed over time. The detailed
information is better accessed using the swift-manage-shard-ranges
repair command.
Change-Id: I055c40395807708de60882f53652d9533a495d09
Signed-off-by: Alistair Coles <alistairncoles@gmail.com>
2025年07月23日 15:01:14 +01:00
Tim Burke
ae062f8b09 ring: Introduce a v2 ring format
There's a bunch of moving pieces here:
- Add a new RingWriter class.
 Stick it in a new swift.common.ring.io module. You *can* use it like
 the old gzip file, but you can also define named sections which can
 be referenced later on read. Section names may be arbitrary strings,
 but the "swift/" prefix is reserved for upstream use. Sections must
 contain a single length-value encoded BLOB. If sections are used, an
 additional BLOB is written at the end containing a JSON section-index,
 followed by an uncompressed offset for the index.
 Move RingReader to ring/io.py, too.
- Clean up some ring metadata handling:
 - Drop MD5 tracking in RingReader. It was brittle at best anyway, and
 nothing uses it. YAGNI
 - Fix size/raw_size attributes when loading only metadata.
- Add the ability to seek within RingReaders, though you need to know
 what you're doing and only seek to flush points.
- Let RingBuilder objects change how wide their replica2part2dev_id
 arrays are. Add a dev_id_bytes key to serialized ring metadata.
 dev_id_bytes may be either 2 or 4, but 4 requires v2 rings. We
 considered allowing dev_id_bytes of 1, but dropped it as unnecessary
 complexity for a niche use case.
- swift-ring-builder version subcommand added, which takes a ring. This
 lets operators see the serialization format of a ring on disk:
 $ swift-ring-builder object.ring.gz version
 object.ring.gz: Serialization version: 2 (2-byte IDs), build version: 54
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: Ia0ac4ea2006d8965d7fdb6659d355c77386adb70
2025年07月21日 11:37:15 -07:00
Zuul
e75e93f11c Merge "Drop support for old pickled rings" 2025年07月21日 09:23:35 +00:00
Tim Burke
0417979ca5 Drop support for old pickled rings
We stopped writing pickled rings more than twelve years ago. Any
cluster that was going to upgrade from then has, or can pick any of
the multitude of intermediary releases to pause at and push rings.
We can also safely assume that regions will be present for devices;
that change is nearly as old.
As a side-effect, clean up some old tests that did nonsense things
like having 7 assignments per row for a part-power-2 ring.
UpgradeImpact: remove ability to read rings written by swift <1.7.0
circa 2012
Related-Change: I799b9a4c894d54fb16592443904ac055b2638e2d
Related-Change: Ifefbb839cdcf033e6c9201fadca95224c7303a29
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: Ic8322b18d51b40f586cb217a0d1b2f345e1d8df6
2025年07月18日 18:29:20 +00:00
Zuul
8af485775a Merge "s3api: Add support for crc64nvme checksum calculation" 2025年07月18日 04:32:37 +00:00
Zuul
a1f7a1e82d Merge "s3api: add more assertions w.r.t. S3 checksum BadDigest" 2025年07月16日 17:32:52 +00:00
Alistair Coles
404e1f2732 s3api: Add support for crc64nvme checksum calculation
Add anycrc as a soft dependency in case ISA-L isn't available.
Plus we'll want it later: when we start writing down checksums,
we'll need it to combine per-part checksums for MPUs.
Like with crc32c, we won't provide any pure-python version as the
CPU-intensiveness could present a DoS vector. Worst case, we 501
as before.
Co-Authored-By: Tim Burke <tim.burke@gmail.com>
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: Ia05e5677a8ca89a62b142078abfb7371b1badd3f
Signed-off-by: Alistair Coles <alistairncoles@gmail.com>
2025年07月16日 17:51:31 +01:00
Zuul
d9115f24d6 Merge "s3api: add compat test sending too much body with checksum" 2025年07月16日 16:24:08 +00:00
Zuul
2fc9209d47 Merge "s3api: Validate additional checksums on upload" 2025年07月15日 18:48:52 +00:00
Alistair Coles
61c0bfcf95 s3api: add more assertions w.r.t. S3 checksum BadDigest
Assert that BadDigest responses due to checksum mismatch do not include
the expected or computed values.
Change-Id: Iaffa02c3c02fa3bc6922f51ecf28a39f4b24ccf2
Signed-off-by: Alistair Coles <alistairncoles@gmail.com>
2025年07月11日 10:47:11 +01:00
Alistair Coles
351ee72790 s3api: add compat test sending too much body with checksum
Adds a test that verifies extra body content beyond the content-length
is ignored provided that the checksum value matches that of the
content-length bytes.
Add comment to explain why this is the case.
Drive-by: add clarifying comment to unit test.
Change-Id: I8f198298a817be47223e2f45fbc48a6f393b3bef
Signed-off-by: Alistair Coles <alistairncoles@gmail.com>
2025年07月11日 10:43:48 +01:00
Tim Burke
be56c1e258 s3api: Validate additional checksums on upload
See https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
for some background.
This covers both "normal" objects and part-uploads for MPUs. Note that
because we don't write down any client-provided checksums during
initiate-MPU calls, we can't do any verification during complete-MPU
calls.
crc64nvme checksums are not yet supported; clients attempting to use
them will get back 501s.
Adds crt as a boto3 extra to test-requirements. The extra lib provides
crc32c and crc64nvme checksum support in boto3.
Co-Authored-By: Ashwin Nair <ashnair@nvidia.com>
Co-Authored-By: Alistair Coles <alistairncoles@gmail.com>
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Signed-off-by: Alistair Coles <alistairncoles@gmail.com>
Change-Id: Id39fd71bc59875a5b88d1d012542136acf880019
2025年07月11日 09:33:59 +01:00
OpenStack Proposal Bot
de579d63d7 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
Change-Id: I9a31eda60da71ff9f9db8b32b517338e99896667
Signed-off-by: OpenStack Proposal Bot <openstack-infra@lists.openstack.org>
Generated-By: openstack/openstack-zuul-jobs:roles/prepare-zanata-client/files/common_translation_update.sh
2025年07月09日 03:48:00 +00:00
Zuul
1428eb3b58 Merge "Fix traceback in invalidate_hash" 2025年07月07日 19:15:51 +00:00
Zuul
364cc6556f Merge "s3api: fix multi-upload BadDigest error" 2025年07月01日 22:33:33 +00:00