10150 Commits

Author SHA1 Message Date
Zuul
e6203384c2 Merge "Properly read py2 object metadata on py3" 2023-05-15 08:23:37 +00:00
Zuul
8f84aef700 Merge "disable requests_mock pytest plugin" 2023-05-12 19:57:03 +00:00
Clay Gerrard
9adc3ce425 disable requests_mock pytest plugin
While we use requests-mock, we don't need the pytest plugin.

Change-Id: If14e4d2c1af2efcbc99e9b6fe10973a7eb94d589
2023-05-10 14:45:33 -07:00
Zuul
5c2adc593e Merge "Sharder: add timing metrics for individual steps and total time spent." 2023-05-10 07:49:15 +00:00
Zuul
9baf1d623f Merge "more explicit catch" 2023-05-09 23:54:09 +00:00
Zuul
b669e32981 Merge "backend_ratelimit: Tighten blanket exception handling" 2023-05-09 21:51:48 +00:00
Clay Gerrard
01a998a451 more explicit catch
Change-Id: I9fdc74d26fd830f463c077c912cdcf00eaab1dfa
2023-05-09 15:32:02 -05:00
Zuul
89e2050d7f Merge "wsgi: Add keepalive_timeout option" 2023-05-09 02:56:09 +00:00
Tim Burke
9d98721e7c backend_ratelimit: Tighten blanket exception handling
As it was, it would hide issues in the logging or ratelimiter
implementations.

Change-Id: I9e557442401ef17b753f45b9e1cb181e71784ccf
2023-05-05 12:27:01 -07:00
Jianjian Huo
744e9a94af Sharder: add timing metrics for individual steps and total time spent.
Change-Id: Ie2a8e4eced6688e5a98aa37c3c7b0c13fd2ddeee
2023-05-03 22:12:26 -07:00
Tim Burke
7807540962 Properly read py2 object metadata on py3
Replicated, unencrypted metadata is written down differently on py2
vs py3, and has been since we started supporting py3. Fortunately,
we can inspect the raw xattr bytes to determine whether the pickle
was written using py2 or py3, so we can properly read legacy py2 meta
under py3 rather than hitting a unicode error.

Closes-Bug: #2012531
Change-Id: I5876e3b88f0bb1224299b57541788f590f64ddd4
2023-05-02 13:20:03 -07:00
Zuul
f99a6e5762 Merge "Log (Watchdog's) Timeouts with duration" 2023-05-01 06:27:27 +00:00
Zuul
b1dc6237c1 Merge "Don't monkey patch logging on import" 2023-04-28 22:44:29 +00:00
Zuul
e2682f4a83 Merge "Proxy: restructure cached listing shard ranges" 2023-04-28 22:44:26 +00:00
Zuul
38f1f2d33e Merge "proxy controller: always pass x-backend-* headers to backend" 2023-04-28 22:44:20 +00:00
Zuul
f9493d51f7 Merge "ECFragGetter: assume policy.fragment_size is non-zero" 2023-04-28 21:26:33 +00:00
Zuul
6f62758413 Merge "Make all config parsing case-sensitive" 2023-04-28 18:36:12 +00:00
Zuul
04082fe6fd Merge "ring: Centralize device normalization" 2023-04-28 17:36:37 +00:00
Chetan Mishra
84b995f275 Don't monkey patch logging on import
Previously swift.common.utils monkey patched logging.thread,
logging.threading, and logging._lock upon import with eventlet
threading modules, but that is no longer reasonable or necessary.

With py3, the existing logging._lock is not patched by eventlet,
unless the logging module is reloaded. The existing lock is not
tracked by the gc so would not be found by eventlet's
green_existing_locks().

Instead we group all monkey patching into utils function and apply
patching consistently across daemons and WSGI servers.

Co-Authored-By: Clay Gerrard <clay.gerrard@gmail.com>
Co-Authored-By: Alistair Coles <alistairncoles@gmail.com>
Closes-Bug: #1380815
Change-Id: I6f35ad41414898fb7dc5da422f524eb52ff2940f
2023-04-28 08:57:35 -07:00
Clay Gerrard
8d23dd8ac6 Log (Watchdog's) Timeouts with duration
... and clean up WatchDog start a little.

If this pattern proves useful we could consider extending it.

Change-Id: Ia85f9321b69bc4114a60c32a7ad082cae7da72b3
2023-04-28 10:14:01 -05:00
Clay Gerrard
ab03e057d7 Make all config parsing case-sensitive
This effects both daemon config parsing and paste-deploy config parsing
when using conf.d.  When the WSGI servers were loaded from a flat file
they have always been case-sensitive.  This difference was surprising
(who wants anything case-insensitive?) and potentially dangerous for
values like RECLAIM_AGE.

UpgradeImpact:

Previously the option keys in swift's configuration .ini files were
sometimes parsed in a case-insensitive manner, so you could use
CLIENT_TIMEOUT and the daemons would recognize you meant client_timeout.
Now upper-case or mixed-case option names, such as CLIENT_TIMEOUT or
Client_Timeout, will be ignored.

Change-Id: Idd8e552d9fe98b84d7cee1adfa431ea3ae93345d
2023-04-28 10:03:59 -05:00
Zuul
b61602b70c Merge "docs: Fix broken paste/pastedeploy links" 2023-04-28 11:37:10 +00:00
Zuul
80770eb57b Merge "tests: Fix config numbers in test_versioning_with_metadata_replication" 2023-04-28 11:37:07 +00:00
Zuul
31e51b3f85 Merge "Error logs changed for ChunkWriteTimeout" 2023-04-28 11:37:04 +00:00
Shreeya Deshpande
9dfbac7c4d Error logs changed for ChunkWriteTimeout
The log message phrase 'ChunkWriteTimeout fetching fragments'
implies that the timeout has occurred
while getting a fragment (from the backend object server)
when in fact the timeout has occurred
waiting to yield the fragment to the app iter.
Hence, changing message to 'ChunkWriteTimeout feeding fragments'

Change-Id: Ic0813e6a9844da1130091d27e3dbe272ea871d11
2023-04-27 23:21:04 +00:00
Tim Burke
88941ebe46 tests: Fix config numbers in test_versioning_with_metadata_replication
Closes-Bug: #2017021
Change-Id: If422f99a77245b35ab755857f9816c1e401a4e22
2023-04-27 15:20:07 -07:00
Tim Burke
716ae48eb8 docs: Fix broken paste/pastedeploy links
Closes-Bug: #2016463
Change-Id: Id500a2429b7412823970a06e3e82b1d1646c70b8
2023-04-27 13:52:55 -07:00
Zuul
3b89fbebd9 Merge "tests for wsgi/daemon config parsing" 2023-04-27 19:02:31 +00:00
Zuul
b5a2453ed7 Merge "ECFragGetter: simplify iter_bytes_from_response_part" 2023-04-27 01:13:13 +00:00
Zuul
6d272c4dc0 Merge "CI: Use [tox]requires to pin virtualenv" 2023-04-26 22:37:23 +00:00
Tim Burke
b8f0a0ed5c ring: Centralize device normalization
This puts replication info in antique rings loaded with metadata_only=True.

Closes-Bug: #1696837
Change-Id: Idf263a7f7a984a1307bd74040ac8f8bb1651bc79
2023-04-26 15:35:58 -07:00
Tim Burke
0518c60235 CI: Use [tox]requires to pin virtualenv
Using an antiquated distro to keep us on an EOL'ed version of python
that *just so happens* to have had support dropped for it around the
same time virtualenv removed the ability to create py27 environments
doesn't seem like the right way to address the problem.

Make sure we also include the tox<4 pin that we're using project-wide
so we don't get some nonsense about "Multiple top-level packages
discovered in a flat-layout".

Related-Change: https://review.opendev.org/c/openstack/swift/+/881035
Change-Id: I32a161e555179ca34d306ac37e4097611853e36b
2023-04-26 11:40:03 -07:00
Alistair Coles
50c4ea032d ECFragGetter: assume policy.fragment_size is non-zero
Simplify ECFragGetter by removing code that guards against the policy
fragment_size being None or zero.

Policy fragment_size must be > 0: the fragment_size is based on the
ec_segment_size, which is verified as > 0 when constructing an EC
policy. This is asserted by test_parse_storage_policies in
test.unit.common.test_storage_policy.TestStoragePolicies.

Also, rename client_chunk_size to fragment_size for clarity.

Change-Id: Ie1efaab3bd0510275d534b5c023cb73c98bec90d
2023-04-26 11:33:41 +01:00
Alistair Coles
0f95870c51 ECFragGetter: simplify iter_bytes_from_response_part
Refactor and add some targeted unit tests. No behavioral change.

Change-Id: I153528b8a1709f3756c261cf3eb2acfd5de10f9c
2023-04-26 11:32:47 +01:00
Zuul
9f75279739 Merge "Assert ChunkWriteTimeout errors are logged" 2023-04-25 13:31:33 +00:00
Alistair Coles
61b6ec2633 Assert ChunkWriteTimeout errors are logged
The test claimed to assert that ChunkWriteTimeouts are logged, but
the test would in fact pass if the timeouts were not logged.

Change-Id: Ic9d119858397e8aeccaf7f89487f9e62f16ee453
2023-04-25 11:36:01 +01:00
Zuul
0a970d0736 Merge "Extract some closures to methods" 2023-04-24 19:49:03 +00:00
Zuul
aaab0e0ad4 Merge "Use instance attr instead of non-local" 2023-04-24 17:27:17 +00:00
Clay Gerrard
74fc18d90d Extract some closures to methods
Change-Id: Ia87caebc9a3c70602209daeda97fc588f4bafc76
2023-04-24 15:26:13 +01:00
Clay Gerrard
0a2bfe981f Use instance attr instead of non-local
Change-Id: I3d5981cfc8799c45817b24fdaecc6cbbc0534ec8
2023-04-24 15:02:07 +01:00
Zuul
029c921871 Merge "docs: Clean up cross-domain doc formatting; call out CWE-942" 2023-04-21 17:30:09 +00:00
Zuul
0672b0ed0b Merge "tests: Fix test_cleanup_ondisk_files_commit_window" 2023-04-21 17:30:06 +00:00
Tim Burke
105727bc89 tests: Fix test_cleanup_ondisk_files_commit_window
`much_older` has to be much older than `older`, or the test gets
flakey. See

- test_cleanup_ondisk_files_reclaim_non_data_files,
- test_cleanup_ondisk_files_reclaim_with_data_files, and
- test_cleanup_ondisk_files_reclaim_with_data_files_legacy_durable

for a more standard definition of "much_older".

Closes-Bug: #2017024
Change-Id: I1eaa501827f4475ddc0c20d82cf0a6d4a5e98f75
2023-04-20 12:51:06 -07:00
Tim Burke
bfc1386279 CI: fix lower-constraints job
Switch from focal back to bionic so tox gets installed with py36. This
ensures that we get virtualenv<20.18.0 so we can still create py27
environments (support for which was dropped in virtualenv==20.22.0).

Note that this also means we can drop our tox<4 pin, as newer tox does
not support py36, either.

Change-Id: Ia2b3cc4f719347705dec15f1fc97d982e72bfb34
2023-04-20 10:45:55 -07:00
Alistair Coles
e19a165a7b proxy controller: always pass x-backend-* headers to backend
X-Backend-* headers were previously passed to the backend server with
only a subset of all request types:

* all object requests
* container GET, HEAD
* account GET, HEAD

In these cases, X-Backend-* headers were transferred to backend
requests implicitly as a consequence of *all* the headers in the
request that the proxy is handling being copied to the backend
request.

With this change, X-Backend-* headers are explicitly copied from the
request that the proxy is handling to the backend request, for every
request type.

Note: X-Backend-* headers are typically added to a request by the
proxy app or middleware, prior to creating a backend request.
X-Backend-* headers are removed from client requests by the gatekeeper
middleware, so clients cannot send X-Backend-* headers to backend
servers. An exception is an InternalClient that does not have
gatekeeper middleware, deliberately so that internal daemons such as
the sharder can send X-Backend-* headers to the backend servers.

Also, BaseController.generate_request_headers() is fixed to prevent
accessing a None type when transfer is True but the orig_req is None.

Change-Id: I05fb9a3e1c98d96bbe01da2ee28474e0f57297e6
2023-04-19 12:08:28 +01:00
Tim Burke
ed1f5193e5 docs: Clean up cross-domain doc formatting; call out CWE-942
Change-Id: I7ab605d48972e8dc06e630d160c745baeea91355
2023-04-19 12:03:27 +01:00
Tim Burke
469c38e9fb wsgi: Add keepalive_timeout option
Clients sometimes hold open connections "just in case" they might later
pipeline requests. This can cause issues for proxies, especially if
operators restrict max_clients in an effort to improve response times
for the requests that *do* get serviced.

Add a new keepalive_timeout option to give proxies a way to drop these
established-but-idle connections without impacting active connections
(as may happen when reducing client_timeout). Note that this requires
eventlet 0.33.4 or later.

Change-Id: Ib5bb84fa3f8a4b9c062d58c8d3689e7030d9feb3
2023-04-18 11:49:05 -07:00
Zuul
4b6f54d063 Merge "ssync: Round-trip offsets in meta/ctype Timestamps" 2023-04-18 00:01:42 +00:00
Zuul
b9a3c77bb5 Merge "tests: Fix PriorityQueue import" 2023-04-17 21:35:21 +00:00
Jianjian Huo
71d507f8e1 Proxy: restructure cached listing shard ranges
Updating shard range cache has been restructured and upgraded to v2
which only persist the essential attributes in memcache (see
Related-Change). This is the following patch to restructure the
listing shard ranges cache for object listing in the same way.

UpgradeImpact
=============
The cache key for listing shard ranges in memcached is renamed
from 'shard-listing/<account>/<container>' to
'shard-listing-v2/<account>/<container>', and cache data is
changed to be a list of [lower bound, name]. As a result, this
will invalidate all existing listing shard ranges stored in the
memcache cluster.

Co-Authored-By: Alistair Coles <alistairncoles@gmail.com>
Related-Change: If98af569f99aa1ac79b9485ce9028fdd8d22576b
Change-Id: I54a32fd16e3d02b00c18b769c6f675bae3ba8e01
2023-04-17 09:49:26 -07:00