83528de7432cca17b3a03367422f9342c4a336b5
10741 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
Chinemerem
|
83528de743 |
Make OldestAsyncPendingTracker timestamp float
Previously, the OldestAsyncPendingTracker timestamp was stored as a string. This change updates it to be stored as a float. UpgradeImpact: This will require an additional change to the recon parsers in order to process the timestamp as a float. Change-Id: Iba43783e880e0860357ba8b9f0a11f28abf87555 |
||
|
Alistair Coles
|
ffbf17e47c |
Fix duplicate prefix in exception logging
This patch fixes a bug in the Related-Change that causes a prefix to be added twice at the start of an 'exception' log message. Previously, PrefixLoggerAdapter.exception would forward to the wrapped LogAdapter.exception, and not call back to PrefixLoggerAdapter.process. The prefix therefore needed to be added in both PrefixLoggerAdapter.exception and PrefixLoggerAdapter.process (for other log level methods). SwiftLogAdapter.exception *does* call back to SwiftLogAdapter.process, and so since the Related-Change it is not necessary to add the prefix in both the SwiftLogAdapter.exception and SwiftLogAdapter.process methods. Related-Change: I8988c0add6bb4a65cc8be38f0bf527f141aac48a Change-Id: Ia6e1f007989b0ef455b8dca8155b386a3fd9e8e1 |
||
|
Zuul
|
aac4c14574 | Merge "Differentiate unlinks and outdated unlinks" | ||
|
Zuul
|
89815389d5 | Merge "probe tests: Set default timeout for subprocesses" | ||
|
Tim Burke
|
32fbf9eaae |
probe tests: Set default timeout for subprocesses
There's an upstream eventlet bug that seems to cause process hangs during an atexit hook; unfortunately, that means that every time we call "once" in probe tests, we can hang indefinitely waiting for a process that won't terminate. See https://github.com/eventlet/eventlet/issues/989 Now, wait with a timeout; if it pops, kill the offending process and hope for the best. Do this by patching out subprocess.Popen.wait, but only in probe tests -- this ensures that we won't impact any real systems, while also ensuring a broad coverage of probe tests (as opposed to, say, plumbing some new wait_timeout kwarg into all the Manager call sites). Closes-Bug: #2088027 Change-Id: I8983eafbb575d73d1654c354815a7de7ae141873 |
||
|
Zuul
|
71696d3a83 | Merge "Remove PrefixLoggerAdapter and SwiftLoggerAdapter" | ||
|
Shreeya Deshpande
|
f88efdb4df |
Remove PrefixLoggerAdapter and SwiftLoggerAdapter
In order to modernize swift's statsd configuration we're working to separate it from logging. This change is a pre-requisite for the Related-Change in order to simplfy the stdlib base logger instance wrapping in a single extended SwiftLogAdapter (previously LogAdapter) which supports all the features swift's servers/daemons need from our logger instance interface. Related-Change-Id: I44694b92264066ca427bb96456d6f944e09b31c0 Change-Id: I8988c0add6bb4a65cc8be38f0bf527f141aac48a |
||
|
Zuul
|
1d69f04d58 | Merge "probe tests: Run relinker via subprocess" | ||
|
Zuul
|
90f75e33b7 | Merge "reconciler: Record queue-clean-up later than old-policy-clean-up" | ||
|
Tim Burke
|
b262b16d55 |
probe tests: Run relinker via subprocess
Otherwise, test-run state (eventlet.tpool initialization, in particular) can bleed over and cause hangs. Closes-Bug: #2088026 Change-Id: I4f7dd0755b8dc8806d9b9046ac192d94ca705383 |
||
|
Zuul
|
309b906df8 | Merge "Prevent installation with pyeclib 1.6.2 and 1.6.3" | ||
|
Tim Burke
|
3a43242e79 |
reconciler: Record queue-clean-up later than old-policy-clean-up
Previously, queue-clean-up would use the same timestamp/offset as the tombstone written down in the old policy to clean up now-moved data. This could lead to bad behaviors, as the reconciler-written tombstone could itself be enqueued to be reconciled, at the same timestamp. If that happened, replication would never bring the DB replicas to consistency, causing the reconciler to get different answers for whether there was work to do. Now, add an extra offset bump between the tombstone in the old policy and queue-clean-up. Also add an extra offset to the moved data in the new policy, to keep it one ahead of queue-clean-up. New ordering looks like: - data/ts in old policy at t0 (as well as queue entry time to move it) - tombstone in old policy at t0_1 - queue clean-up time at t0_2 - moved data/ts in new policy at t0_3 Closes-Bug: #2028175 Change-Id: Ib0dda0d338f48336d18d3d817a0c5994e201042e |
||
|
Zuul
|
7662cde704 | Merge "Add oldest failed async pending tracker" | ||
|
Tim Burke
|
e954712cef |
Prevent installation with pyeclib 1.6.2 and 1.6.3
Their binary wheels may crash python on older processors. Related-Change: https://review.opendev.org/c/openstack/pyeclib/+/933338 Depends-On: https://review.opendev.org/c/openstack/requirements/+/934074 Change-Id: Ibc5b96421721e8e0a257acd06fdbfa5d82907bea |
||
|
Zuul
|
97c5deae87 | Merge "slo: add more functional tests for copying" | ||
|
Zuul
|
38556600d7 | Merge "docs: add new utils modules to source doc" | ||
|
Alistair Coles
|
639251d4c5 |
slo: add more functional tests for copying
Add functional tests for copying from an SLO using PUT requests with an x-copy-from header. Add functional tests for copying from an SLO using part-number parameter. Change-Id: Ic40c4b104b11de9ab09485e82543521b37ea1daa |
||
|
Chinemerem
|
0a5348eb48 |
Add oldest failed async pending tracker
In the past we have had some async pendings that repeatedly fail for months at a time. This patch adds an OldestAsyncPendingTracker class which manages the tracking of the oldest async pending updates for each account-container pair. This class maintains timestamps for pending updates associated with account-container pairs. It evicts the newest pairs when the max_entries is reached. It supports retrieving the N oldest pending updates or calculating the age of the oldest pending update. Change-Id: I6d9667d555836cfceda52708a57a1d29ebd1a80b |
||
|
Zuul
|
baeef85178 | Merge "CI: Bring check/gate in line with PTI for 2025.1" | ||
|
Zuul
|
5ee1e72c0b | Merge "object-expirer: add round_robin_cache_size option" | ||
|
Zuul
|
6221e5d8c1 | Merge "test-expirer: call tracking & exception stubs" | ||
|
Chinemerem
|
39e4ae3076 |
Differentiate unlinks and outdated unlinks
This commit differentiates async pendings that are unlinked due to a successful object update (unlinks)from those async pendings that are unlinked due to a newer async_pending existing for the same object (outdated_unlinks). Change-Id: I66e16207f3e368248617fc7ed3c6b5c80c54b1b5 |
||
|
Clay Gerrard
|
df22032d79 |
object-expirer: add round_robin_cache_size option
Drive-Bys: * DRY out redundent configuration examples in expiring objects overview documentation. * Add missing delay_reaping man page docs. Co-Authored-By: Alistair Coles <alistairncoles@gmail.com> Change-Id: I8879dbd13527233c878dff764ec411ce9619ee39 |
||
|
Clay Gerrard
|
31ef443715 |
test-expirer: call tracking & exception stubs
This change enhances the FakeInteralClient to make it easier to use the existing stubs to test error handling behaviors and make assertions about the behaviors. Co-Authored-By: Alistair Coles <alistairncoles@gmail.com> Change-Id: Ib652a752ba91dbc791eef2a1d6940bcb0d16e36a |
||
|
Tim Burke
|
e9e10b5ede |
CI: Bring check/gate in line with PTI for 2025.1
Move py311 to experimental, as py312 is now the highest required version. Also swap py39 and py38 jobs between experimental and check/gate; we probably should have done that for 2024.1 -- oh well. See also: - https://opendev.org/openstack/openstack-zuul-jobs/commit/3d6a033e - https://opendev.org/openstack/openstack-zuul-jobs/commit/05389d5c Change-Id: I418acfaeca20c93fa19b0f32a95bc53953efe183 |
||
|
Tim Burke
|
a8ad97f838 |
CI: Drag forward more constraints
Previously, we'd install the lowest (mostly common) denominator of deps for our func-py3 jobs. This left us not testing up-to-date deps for many python versions, though, and could even prevent us from testing on new python versions entirely. For example, py312 cannot install greenlet 2.0.2, the last version to support py36; this caused gate failures when OpenStack as a whole tried to run Swift's func tests on Ubuntu 24.04. Change-Id: I0e55d8b4c5ed520c0aad8cc952a9fa1683905356 |
||
|
Tim Burke
|
c3f1ed3df1 |
CI: Move a bunch of func test jobs from py38 to py312
Change-Id: I8c65c7829fbe167e0c79239d577c38e90b93b5cf |
||
|
Alistair Coles
|
c877efb7ec |
docs: add new utils modules to source doc
Some submodules have previously been broken out of the utils module. This patch adds automodule directives for the new modules to the source documentation. Change-Id: I985205fda95f01d226e81dcbfe0d6dbbb5b69c96 Related-Change: Ic4b5005e3efffa8dba17d91a41e46d5c68533f9a |
||
|
Zuul
|
288677695d | Merge "Rename obj to path" | ||
|
Chinemerem
|
b084744d02 |
Rename obj to path
In our updater we define `obj = '/%s/%s/%s' % (acct, cont, update['obj'])` which is a path, not an object. This commit renames the variable appropriately Change-Id: I218fa6759df9af84002420a66a721740c0039003 |
||
|
Tim Burke
|
b2386b9947 |
s3api: Stop upper-casing request-method for signatures
The AWS behaviour is weird: if I have my client signer always use the casing that will be sent on the wire, I reliably get back 405s, but if my client signer always converts to upper-case despite sending lower-case on the wire, it's roughly a coin toss for whether I get back a 405 or a 403 (with the string-to-sign indicating that the server was expecting lower-case). This is true for both v2 and v4 signatures, both in headers and in query params. Logically, though, it seems like using what's on the wire *ought* to be the way to go, and AWS's consistency in that case lends some credibility. Unfortunately, that breaks an existing functional test unless awscrt is installed, as boto3 (or botocore? somebody) will upper-case the request method by default, but trusts awscrt to handle things if available. So skip the part of the test that uses a lower-cased request method if we can't import awscrt. Change-Id: Ia6cacc51b2744986e703469f9e5215209194de8a |
||
|
Tim Burke
|
0fdb93c980 |
CI: use py36 constraints for py38
Now that openstack/constraints has dropped support for py38, we have to manage constraints ourselves. Change-Id: I9046c6ea91c98f15c4c491ce3de4a5aaf682f6f5 |
||
|
Clay Gerrard
|
7a6dc095b4 |
functest: do not use account2 unless needed
Change-Id: I224e8706f1ee72b718e35a25ea417a1cf3a35938 |
||
|
Anish Kachinthaya
|
4f69ab3c5d |
fix x-open-expired 404 on HEAD?part-number reqs
Fixes a bug with the x-open-expired feature where our magic header does not get copied when refetching all manifests that causes 404 on HEAD requests with part-number=N query parameter since the object-server returns an empty response body and the proxy needs to refetch. The fix also applies to segment GET requests if the segments have expired. Change-Id: If0382d433f73cc0333bb4d0319fe1487b7783e4c |
||
|
Zuul
|
8ded39bccd | Merge "logging: Add UPDATE to valid http methods" | ||
|
Zuul
|
a427d2754f | Merge "trivial: Default value for EUCLEAN" | ||
|
Zuul
|
a2e8cf08d5 | Merge "FakeSwift: capture unexpected calls" | ||
|
Zuul
|
4098e075f5 | Merge "Object-expirer: continue to process next container on listing errors" | ||
|
Alistair Coles
|
056b2afbd7 |
FakeSwift: capture unexpected calls
Previously FakeSwift would raise a KeyError for a call that had no matching registered response *before* capturing the call. This prevents tests reliably asserting that only expected calls have been made. In particular, if the code being tested handles the KeyError gracefully then it was possible to write quite reasonable test assertions that passed despite unexpected calls being made. Tests in test/unit/container/test_reconciler.py seem to rely on this behaviour, so this patch adds a capture_unexpected_calls option for FakeSwift which defauts to True. This allows the reconciler tests to opt out of the new stricter call capturing. Change-Id: Idc6b6b5a2b665538e861700f5d0996fc39368f5b |
||
|
Tim Burke
|
d0b190f64a |
trivial: Default value for EUCLEAN
Apparently errno.EUCLEAN is not available on OS X, which can complicate running unit tests. Change-Id: Iaa3d7756949b4a67d4afe8a53b242ed9f41e9374 |
||
|
Tim Burke
|
14ce84b64c |
CI: bump up arm64 timeouts (again)
Of the last 100 successful runs, the average runtime has been ~4800s -- we still get too many timeouts. Change-Id: Ic5ba02198d51f938605787281488efccb25c0242 |
||
|
Tim Burke
|
351b3aed4a |
CI: Move most arm64 jobs to experimental pipeline
We've seen significant delays in the arm pipeline lately, with some changes waiting nine or more hours for jobs to run. We should do what we can to alleviate demand for arm64 nodes; I'm not sure any other projects have four arm jobs on every change. Change-Id: I7929ec3b856d90201c4cc4bf201e634446d3ad88 |
||
|
Tim Burke
|
02465e267a |
CI: update upper-bound on arm64 unit tests
If py38 and py312 pass, it is reasonable to assume py39, py310, and py311 would, too. Change-Id: Iefbfafe7c1005c9843a97d54c05398d4f0a3d2b0 |
||
|
Tim Burke
|
ef8764cb06 |
logging: Add UPDATE to valid http methods
We introduced this a while back, but forgot to add it then. Related-Change: Ia13ee5da3d1b5c536eccaadc7a6fdcd997374443 Change-Id: Ib65ddf50d7f5c3e27475626000943eb18e65c73a |
||
|
Tim Burke
|
cfc7f99d43 |
trivial: Fix variable name
This is a path, not a request. See the parent class, Putter, and all the callers of MIMEPutter.connect(). Related-Change: I12a6e41150f90de746ce03623032b83ed1987ee1 Change-Id: I42c7dcf2b4a3bf8bd023fdc1ce7d454ce01885a0 |
||
|
Jianjian Huo
|
7980b6a0d3 |
Object-expirer: continue to process next container on listing errors
When Expirer is iterating task containers and doing listings, it's possible one of the container nodes hosting the task container may become overloaded (or have a really low backend ratelimit set). Object-expirer should expect UnexpectedResponse and continue to try and list the task objects in the next container. And if the task container doesn't exist, expirer should not try to delete the non-existent containers, before continue to work on the next container. Co-Authored-By: Alistair Coles <alistairncoles@gmail.com> Change-Id: Id1966fa22725a02471e2d7c5a42fb243b1cfcf6a |
||
|
Zuul
|
44653d8efb | Merge "Imported Translations from Zanata" | ||
|
Zuul
|
914380cee0 | Merge "Add Chinemerem to AUTHORS" | ||
|
Zuul
|
02b17e43f6 | Merge "Make object-expirer respect internal_client_conf_path" | ||
|
Chinemerem
|
ee80f99aec |
Make object-expirer respect internal_client_conf_path
Previously the object-expirer would not respect an internal_client_conf_path option if its config was loaded from a "legacy" config filepath (e.g. **/object-expirer.conf). Legacy object-expirer config expected config sections for an internal-client to be included in the same file. However, "modern" object-expirer config files (e.g. **/object-server.conf) expect internal-client config to be loaded from a separate file specified by internal_client_conf_path and defaulting to 'internal_client_conf_path'. "Legacy" expirer config is still used in production clusters but it is useful to use a shared internal-client config. This patch therefore makes the internal_client_conf_path option always be respected regardless of the path of the object-expirer conf file. If 'internal_client_conf_path' is not specified, "modern" config will continue to use the default '/etc/swift/internal-client.conf', but "legacy" config will default to the path of the expirer conf file (i.e. the same as the previous behavior). Related-Change: Ib21568f9b9d8547da87a99d65ae73a550e9c3230 Change-Id: I24ec702cd2ed074ca9df084cefc896418cece394 |