ec6e8bd203651ad6a7a2aa5750a2226f5899f0a9
Commit Graph

6155 Commits

Author SHA1 Message Date
Yan Xiao
ec6e8bd203 common: add http exception handling for base storage server timing stats
The timing stats decorators are moved from utils to base_storage_server.py
to avoid a circular import of HTTPException.
Co-Authored-By: Alistair Coles <alistairncoles@gmail.com>
Change-Id: Idc4b52de0a04ebfc0e353162bd791d4e0e20eac3
2025年05月16日 17:22:58 -04:00
Yan Xiao
ab6e05922f Object-server: add labeled timing metrics for object REPLICATE request
Co-Authored-By: Shreeya Deshpande <shreeyad@nvidia.com>
Change-Id: I155572bc5f4d955c918c951d6d2af9dbbae0136d
2025年05月02日 11:33:43 -04:00
Zuul
076771462c Merge "Fix the inconsistent use of printing errors" 2025年05月01日 16:39:34 +00:00
James Nguyen
b07843e92e Fix the inconsistent use of printing errors
Make all statements using all caps (WARNING) and modify with print where there is stderr.write.
Fixes bug 1511139
Change-Id: I3b24c55d6ea07d9c2254f15a490fa336ad64c6c4
2025年04月30日 22:01:00 -05:00
Tim Burke
74030236ad tempauth: Support fernet tokens
Tempauth fernet tokens use a secret shared among all proxies to encrypt
user group information. Because they are encrypted, clients can neither
view nor edit this information; it is an opaque bearer token similar to
the existing memcached-backed tokens (just much longer). Note that
tokens still expire after the configured token_life.
Add a new set of config options of the form
 fernet_key_<keyid> = <32 url-safe base64-encoded bytes>
Any of the configured keys will be used to attempt to decrypt tokens
starting with "ftk" and extract group information.
Another new config option
 active_fernet_key_id = <keyid>
dictates which key should be used when minting tokens. Such tokens
will start with "ftk" to distinguish them from memcached-backed tokens
(which continue to start with "tk"). If active_fernet_key_id is not
configured, memcached-backed tokens continue to be used.
Together, these allow seamless transitions from memcached-backed tokens
to fernet tokens, as well as transitions from one fernet key to another:
 1. Add a new fernet_key_<keyid> entry.
 2. Ensure all proxies have the new config with fernet_key_<keyid>.
 3. Set active_fernet_key_id = <keyid>.
 4. Ensure all proxies have the new config with the new
 active_fernet_key_id.
This is similar to the key-rotation process for the encryption feature,
except that old keys may be pruned following a token_life period.
Additionally, opportunistically compress groups before minting tokens.
Compressed tokens will begin with "zftk" but otherwise behave just like
"ftk" tokens.
Change-Id: I0bdc98765d05e91f872ef39d4722f91711a5641f
2025年04月25日 14:49:12 -07:00
Zuul
64bd1acb9e Merge "Clarify that get_ppid is Linux-only" 2025年04月23日 23:20:34 +00:00
Clay Gerrard
1ca073ce1d Let WSGI know the length
... so that eventlet.wsgi will include Connection: close headers on
Expect: 100-continue error responses from s3api and make aws clients
less unhappy.
eventlet.wsgi likes to check for hasattr('__len__', resp) when setting
connection close on expect-100 errors, but uses 'content-length' in
headers when deciding on chunked-transfer.
When we know the length we can support either interface. Also we can
imporove s3api to return error responses with the content-length known.
Change-Id: Ic504841714bd607cb9733b2de5126092a79c1094
2025年04月18日 11:27:35 -05:00
Zuul
fd9ceecc50 Merge "s3request: refactor to introduce SigChecker classes" 2025年04月17日 13:23:47 +00:00
Alistair Coles
ab5c742e2b s3api: make MPU part error response message same as S3
Change-Id: I60f0b36633c2a348933fd45d348d76b256fca57a
2025年04月16日 12:16:00 +01:00
Alistair Coles
a93e420d32 s3request: refactor to introduce SigChecker classes
Previously the SigV4Mixin would override S3Request signature checking
methods. This patch refactors the signature checking into sigv2 and
sigv4 helper classes i.e. moves towards composition rather than
inheritance.
No behavioural changes are intended with this patch.
Co-Authored-By: Tim Burke <tim.burke@gmail.com>
Co-Authored-By: Thibault Person <thibault.person@ovhcloud.com>
Change-Id: Icaf86181c3bf7804c5176db48d2de5e2fc6f24d2
2025年04月15日 18:29:25 +01:00
Zuul
449096011f Merge "tests: Remove BaseFakeStatsdClient.get_increment_counts" 2025年04月09日 16:57:06 +00:00
Zuul
7bef99cfd1 Merge "tests: add LabeledStatsdClient sample_rate kwarg coverage" 2025年04月09日 11:23:21 +00:00
Alistair Coles
37a25b340d tests: Remove BaseFakeStatsdClient.get_increment_counts
The method is redundant and confusingly named. Since the
Related-Change it actually returns the aggregate value of counters,
not just the count of calls made to the increment method alone.
Related-Change: I4d8a4b530465b587caced4362eb9178507701cef
Change-Id: I52585567a177f58e0f110785b44f8d238b2ac54d
2025年04月08日 22:04:12 +00:00
Clay Gerrard
563c1ca656 DRY out AbstractStatsdClient public methods
Both the StatsdClient and LabeledStatsdClient implemented all of the
public interface methods for an AbstractStatsdClient. Even though the
implementations are identical the interfaces themselves were made
different WRT the "last" positional arg if provided.
This change puts the identical implementations of the public interface
in the AbstractStatsdClient class with a generic interface. For
backwards compat with the existing public interface on the
legacy-StatsdClient we have to make the old signature explicit - but we
can transparently call into the common implementation.
For consistency with legacy-Statsdclient and better docstrings this
change also "fixes" the signature for the new LabeledStatsdClient public
interface methods so they explicitly state labels must always be passed
in as a kwarg to avoid confusion accidentally passing in
`sample_rate=<dict>` or `label=<float>` as a positional arg.
Drive-by: as a side-effect of consolidating the implementations there
was now only one place to extend a fix in the FakeStatedClient interface
so that tests who assert StatsdClient method calls don't have to read
like the UUT also called some *other* public StatsdClient method; which
also cleaned up some Fake helpers that deal specifically with counters.
Drive-by: fix stub return value TypeError in a _get_hashes mock that was
caught by better faking. N.B. it doesn't matter how statsd would have
handled 'metric:None|c' because it was only a test bug.
Change-Id: I4d8a4b530465b587caced4362eb9178507701cef
2025年04月08日 17:03:43 -05:00
Clay Gerrard
ed0ef35713 tests: add LabeledStatsdClient sample_rate kwarg coverage
Add test coverage for passing sample_rate to LabeledStatsdClient
methods.
Drive-by: clean up and tighten some existing StatsdClient unit tests to
share a CommonBaseTestsMixin, as was expedient perhaps to the chagrin of
the co-author.
Related-Change: I115ffb1dc601652a979895d7944e011b951a91c1
Co-Authored-By: Alistair Coles <alistairncoles@gmail.com>
Change-Id: I68a24d9467e58994abbac82a5e741f5bb578976c
2025年04月08日 14:15:42 -05:00
Alistair Coles
769e482ea8 tests: provide FakeLabeledStatsdClient for debug
Drive by: FakeStatsdClient.send_calls was not used and is removed.
Change-Id: Ib8bfff8d46ae81b017aff05aad80afe421e6828a
2025年04月04日 16:40:40 +01:00
Clay Gerrard
0e2791a88a Remove deprecated statsd label_mode
Hopefully if we never do a release that supports signalfx no one will
ever use it and we won't have to maintain it.
Drive-by: refactor label model dispatch to fix a weird bug where a
config name could be a class attribute and blow up weird.
Change-Id: I2c67b59820c5ca094077bf47628426f4b0445ba0
2025年04月04日 13:02:37 +01:00
Tim Burke
7e5235894b stats: API for native labeled metrics
Introduce a LabeledStatsdClient API; no callers yet.
Include three config options:
 - statsd_label_mode, which specifies which label format to use
 - statsd_emit_legacy, which dictates whether to emit old-style
 metrics dotted metrics
 - statsd_user_label_<name> = <value>, which supports user defined
 labels in restricted ASCII characters
Co-Authored-By: yanxiao@nvidia.com
Co-Authored-By: alistairncoles@gmail.com
Change-Id: I115ffb1dc601652a979895d7944e011b951a91c1
2025年04月03日 14:26:08 -04:00
Tim Burke
688656a096 Clarify that get_ppid is Linux-only
Change-Id: I5a0fa398901895de30ce979e22ef65fbd299656f
2025年03月12日 22:49:30 -07:00
Zuul
3f59cef644 Merge "Make FakeSwiftCall.DUMMY_VALUE a bespoke singleton" 2025年03月11日 15:53:18 +00:00
Zuul
5074410a9d Merge "linkat: Raise error if we run out of retries" 2025年03月07日 22:21:36 +00:00
Zuul
63155d1117 Merge "cors-tests: Default S3_ENDPOINT sensibly" 2025年03月07日 22:19:00 +00:00
Alistair Coles
2f74376e7e Make FakeSwiftCall.DUMMY_VALUE a bespoke singleton
In test assertion failure messages the DUMMY_VALUE would be shown as
<object object ...> which is not immediately recognisable as the dummy
value..
This change makes the DUMMY_VALUE show as
<test.unit.common.middleware.helpers.FakeSwiftDummyValue object ...>.
Change-Id: I73fac245c65c48d45e4919c6f15688d482148407
Related-Change: I332ce724aa10287800cbec8ca21aacc3bbd3c22a
2025年03月07日 13:04:27 +00:00
Alistair Coles
0cdd3915c4 Fix FakeSwiftCall partial env copy for None values
None values in the request environ should be copied, not replaced with
the dummy value.
Related-Change: I332ce724aa10287800cbec8ca21aacc3bbd3c22a
Change-Id: Id78ac1cac833f9284946cd364b3f95341afcb235
2025年03月07日 12:52:21 +00:00
Zuul
6d3a2c1345 Merge "Remove dependency on mock" 2025年03月07日 10:57:46 +00:00
Tim Burke
cfa0094eb4 cors-tests: Default S3_ENDPOINT sensibly
If it's not provided, don't assume localhost; use the scheme/netloc
from OS_STORAGE_URL.
Change-Id: I0877099cb044cf8aaaeb6af0b4e1332fac00b10b
2025年03月06日 17:10:04 -08:00
Zuul
8f2fd0bc1c Merge "tests: Fix keystoneclient import" 2025年03月06日 23:42:02 +00:00
Zuul
f0093a6a74 Merge "FakeSwift: more encapsulation of request properties" 2025年03月06日 22:22:27 +00:00
Tim Burke
08a6db1357 tests: Fix keystoneclient import
Related-Change: I86bcd7a2373cf1e7213cb716888307306b7bb50d
Change-Id: I0056bfc78f9c89b1c458943ee446499d21667fac
2025年03月06日 13:10:16 -08:00
Tim Burke
62cb4736ed Remove dependency on mock
Change-Id: I9044e49ff30b092a97b75fa7fa133016d17cde37
2025年03月06日 12:35:43 -08:00
Zuul
5554f432f5 Merge "tests: Allow configuring normalized_urls = false" 2025年03月06日 12:22:54 +00:00
Zuul
8b862e66c1 Merge "tests: Reference test.functional.normalized_urls directly" 2025年03月06日 12:22:51 +00:00
Zuul
d4d57a7a7d Merge "Remove __future__ imports" 2025年03月06日 11:25:38 +00:00
Zuul
5219b5ef14 Merge "Stop using cgi.parse_header" 2025年03月05日 22:47:06 +00:00
Tim Burke
11422a3957 tests: Allow configuring normalized_urls = false
Previously, we weren't converting it to a boolean, but left it as
a truth-y string.
Change-Id: Ia0349d991435492ac9d80c36c5b1123b9e310db6
2025年03月05日 12:57:05 -08:00
Tim Burke
3db28d41f1 tests: Reference test.functional.normalized_urls directly
... rather than importing it before it's been read in setup_package and
never getting any updated value.
Related-Change: I699d664bcef6754aac4ec6877830e745b764342f
Change-Id: I48faabc5b59f94a47dfeb871f13ddbcbaa20d349
2025年03月05日 12:57:05 -08:00
Tim Burke
bae8cd0db8 Remove __future__ imports
Change-Id: Ibd3d5f83fcd31d78447a894ff4426e3e1b62e5a8
2025年03月05日 12:50:21 -08:00
Tim Burke
c390c637d1 Stop using cgi.parse_header
With py311 we started seeing warnings like
 DeprecationWarning: 'cgi' is deprecated and slated for removal
 in Python 3.13
The recommended replacement isn't quite up to snuff (doesn't handle
multiple parameters), but we already have a reasonably close replacement.
Add a "loose" mode to parse_content_type to make it suitable when there
may be a slash in a parameter token. Add a new utils.parse_header function
that takes advantage of the parse_content_type "loose" mode.
Closes-Bug: #2084472
Change-Id: Ie281ff90796f2d68840952c95669f264480b1b4c
2025年03月05日 15:43:42 +00:00
Tim Burke
0a8ecbc554 py3: Fix unicode-header-name handling in bufferedhttp
We need to parse additional headers earlier, before stdlib tries to
establish message framing.
Now, TestReconstructorRebuildUTF8 can pass on py3.
Closes-Bug: #2097030
Co-Authored-By: Alistair Coles <alistairncoles@gmail.com>
Related-Change: https://review.opendev.org/c/openstack/swift/+/662546
Change-Id: I6aa16fda9285c9fc3816da6fbff2615bd14a020c
2025年03月03日 10:41:34 -08:00
Clay Gerrard
34bb743b04 linkat: Raise error if we run out of retries
Change-Id: Iae07ec8d38cd747f8bfffa3c08b423bee4b6623c
2025年03月03日 10:16:46 -08:00
Alistair Coles
e4cc228ed0 Refactor some file-like iters as utils.InputProxy subclasses
There's a few places where bespoke file-like wrapper classes have been
implemented. The common methods are now inherited from
utils.InputProxy.
Make utils.FileLikeIter tolerate size=None to mean the same as size=-1
so that it is consistent with the behavior of other input streams.
Fix docstrings in FileLikeIter.
Depends-On: https://review.opendev.org/c/openstack/requirements/+/942845
Change-Id: I20741ab58b0933390dc4679c3e6b2d888857d577
2025年02月26日 10:40:26 -08:00
Zuul
7140633925 Merge "tests: Allow more configuration for S3 cross-compat tests" 2025年02月20日 22:58:31 +00:00
Zuul
1fa687ec20 Merge "slo_test: make x-delete-after consistent in func test" 2025年02月20日 20:39:07 +00:00
Zuul
9723f99250 Merge "tests: More simplification of s3api test bucket naming" 2025年02月20日 20:16:50 +00:00
ashnair
e0d66f3ebf slo_test: make x-delete-after consistent in func test
Related-Change-Id: Ia1d8d9085bad5c6df744a4551eef9dcf56e6e261
Change-Id: I6c5bb824d7145c25faf37fd1fa575cedf05e499a
2025年02月20日 18:58:12 +00:00
Zuul
97cc335d54 Merge "tests: Remove a couple more py2 code paths" 2025年02月20日 18:28:30 +00:00
Alistair Coles
adc7760ed5 tests: More simplification of s3api test bucket naming
Change-Id: Ie59f11874daf9f166a699fa904581830942163a9
Related-Change: I02efba463a8263ca44be511c025c6c6bfbc57334
2025年02月20日 18:15:25 +00:00
Tim Burke
605c701235 tests: Remove a couple more py2 code paths
Change-Id: Ia754021714a8ed3d5d6010a946c558552821fbe4
2025年02月20日 07:32:47 -08:00
Zuul
57f2732f9f Merge "s3api: Simplify HashingInput signature" 2025年02月20日 12:05:18 +00:00
Tim Burke
b49941c9b8 s3api: Simplify HashingInput signature
It's always called with sha256 and raises sha256-specific errors;
we don't need to pretend to support arbitrary hashes.
Change-Id: Icff79ded067084249080e3e6f555429261eb0af0
2025年02月19日 16:54:35 -08:00