1192 Commits

Author SHA1 Message Date
Tim Burke
0c9b545ea7 docs: Clean up proxy logging docs
Change-Id: I6ef909e826d3901f24d3c42a78d2ab1e4e47bb64
2023-08-04 11:30:42 -07:00
Pete Zaitcev
dd664c47db doc/SAIO: Update the Fedora section
The never ending changes in package names march on.
This is for Fedora 38.

Change-Id: Idffd1df7e2f23681eb7d7bf1717471b594612dbc
2023-08-03 15:00:06 -05:00
Alistair Coles
8e051c5b8e docs: Fix link to sphinx project page
Change-Id: I5e75a359660315a34ec36f5cb748808257f4185a
2023-07-21 10:19:49 +01:00
Jianjian Huo
cb1e584e64 Object-server: keep SLO manifest files in page cache.
Currently, SLO manifest files will be evicted from page cache
after reading it, which cause hard drives very busy when user
requests a lot of parallel byte range GETs for a particular
SLO object.

This patch will add a new config 'keep_cache_slo_manifest', and
try keeping the manifest files in page cache by not evicting them
after reading if config settings allow so.

Co-Authored-By: Tim Burke <tim.burke@gmail.com>
Co-Authored-By: Clay Gerrard <clay.gerrard@gmail.com>
Co-Authored-By: Alistair Coles <alistairncoles@gmail.com>
Change-Id: I557bd01643375d7ad68c3031430899b85908a54f
2023-07-07 12:48:24 -07:00
Tim Burke
1f298714af docs: Format metrics in fixed-width font, not italics
Change-Id: I6fc9eaf0903bdbe4ccb82c4e7647478a1eef9785
2023-05-30 11:38:42 -07:00
Tim Burke
307315bde2 docs: Move metric name/description tables out to separate page(s)
Offer it both by service and as a single, more easily searchable, page.

That admin guide is *still* too long, but this should help a bit.

Change-Id: I946c72f40dce2f33ef845a0ca816038727848b3a
2023-05-30 11:38:42 -07:00
Zuul
a0c5ac29a1 Merge "docs: Remove references to out-dated install guides" 2023-05-17 00:20:06 +00:00
Tim Burke
cff092b682 docs: Update versions in Getting Started doc
Change-Id: Ibed9dc0afbdb922d06f7798bdac01db7c55b19f1
2023-05-16 15:36:00 -07:00
Tim Burke
ca0dd8d703 docs: Remove references to out-dated install guides
Change-Id: Idbff951506ee2f3b288eda00217c902314393877
2023-05-16 15:31:13 -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
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
Wei LingFei
5032b42b10 Update url
The OpenStack project is currently maintained on opendev.org, with github.com serving as a mirror repository.

Replace the source code repository address for the python-swiftclient project from github.com to opendev.org.

Change-Id: I650a80cb45febc457c42360061faf3a9799e6131
2023-03-24 14:44:18 +08:00
Tim Burke
cbba65ac91 quotas: Add account-level per-policy quotas
Reseller admins can set new headers on accounts like

   X-Account-Quota-Bytes-Policy-<policy-name>: <quota>

This may be done to limit consumption of a faster, all-flash policy, for
example.

This is independent of the existing X-Account-Meta-Quota-Bytes header, which
continues to limit the total storage for an account across all policies.

Change-Id: Ib25c2f667e5b81301f8c67375644981a13487cfe
2023-03-21 17:27:31 +00:00
Zuul
2a90eadc0d Merge "docs: Add memcache.conf config doc" 2023-02-28 22:44:07 +00:00
Alexander Fadeev
49ba1bc33a Present pytest steps in development guidelines
Explain how to prepare venv with `tox devenv`

Closes-Bug: #2003984
Change-Id: Idc536034a36646de9c1880c8d0bc0a387b130ac2
2023-02-25 02:01:07 +02:00
Matthew Oliver
2edd3e65da docs: Add memcache.conf config doc
Change-Id: I29d00e939a3842bd064382575955fa3e255242eb
2023-02-22 16:18:37 +11:00
Tim Burke
ef155bd74a Switch to pytest
nose has not seen active development for many years now. With py310, we
can no longer use it due to import errors.

Also update lower contraints

Closes-Bug: #1993531
Change-Id: I215ba0d4654c9c637c3b97953d8659ac80892db8
2022-12-09 11:38:02 -08:00
Tim Burke
5c6407bf59 proxy: Add a chance to skip memcache for get_*_info calls
If you've got thousands of requests per second for objects in a single
container, you basically NEVER want that container's info to ever fall
out of memcache. If it *does*, all those clients are almost certainly
going to overload the container.

Avoid this by allowing some small fraction of requests to bypass and
refresh the cache, pushing out the TTL as long as there continue to be
requests to the container. The likelihood of skipping the cache is
configurable, similar to what we did for shard range sets.

Change-Id: If9249a42b30e2a2e7c4b0b91f947f24bf891b86f
Closes-Bug: #1883324
2022-08-30 18:49:48 +10:00
Zuul
24acc6e56b Merge "Add backend rate limiting middleware" 2022-08-30 07:18:57 +00:00
Zuul
d8af3d7a0d Merge "Various doc formatting cleanups" 2022-08-15 19:51:39 +00:00
Zuul
fc6555d9f3 Merge "Update "Getting Started" requirements" 2022-08-10 10:52:16 +00:00
jiaqi07
3a71df1335 Stop using unicode literals in docs conf.py
Change-Id: I8ce6749c3d634c68e5d4a15d812a046514cc35f5
2022-08-03 00:01:30 +00:00
Tim Burke
52a4fe37aa Various doc formatting cleanups
* Get rid of a bunch of accidental blockquote formatting
* Always declare a lexer to use for ``.. code::`` blocks

Change-Id: I8940e75b094843e542e815dde6b6be4740751813
2022-08-02 14:28:36 -07:00
Tim Burke
7e5c78423f Update "Getting Started" requirements
* Call out liberasurecode as a requirement
* Include more py3 versions
* Use anonymous links

Change-Id: Ib1f8ef5e36825b9c241d2a4d838ea01b3df70da0
2022-08-02 14:24:30 -07:00
Zuul
9b0e5ea975 Merge "formpost: deprecate sha1 signatures" 2022-07-26 05:53:59 +00:00
Matthew Oliver
2d063cd61f formpost: deprecate sha1 signatures
We've known this would eventually be necessary for a while [1], and
way back in 2017 we started seeing SHA-1 collisions [2].

This patch follows the approach of soft deprecation of SHA1 in tempurl.
It's still a default digest, but we'll start with warning as the
middleware is loaded and exposing any deprecated digests
(if they're still allowed) in /info.

Further, because there is much shared code between formpost and tempurl, this
patch also goes and refactors shared code out into swift.common.digest.
Now that we have a digest, we also move digest related code:
 - get_hmac
 - extract_digest_and_algorithm

[1] https://www.schneier.com/blog/archives/2012/10/when_will_we_se.html
[2] https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

Change-Id: I581cadd6bc79e623f1dae071025e4d375254c1d9
2022-07-26 10:39:58 +10:00
Zuul
5ff37a0d5e Merge "DB Replicator: Add handoff_delete option" 2022-07-22 01:45:31 +00:00
Matthew Oliver
bf4edefce4 DB Replicator: Add handoff_delete option
Currently the object-replicator has an option called `handoff_delete`
which allows us to define the the number of replicas which are ensured
in swift. Once a handoff node ensures that many successful responses it
can go ahead and delete the handoff partition.

By default it's 'auto' or rather the number of primary nodes. But this
can be reduced. It's useful in draining full disks, but has to be used
carefully.

This patch adds the same option to the DB replicator and works the same
way. But instead of deleting a partition it's done at the per DB level.

Because it's done in the DB Replicator level it means the option is now
available to both the Account and Container replicators.

Change-Id: Ide739a6d805bda20071c7977f5083574a5345a33
2022-07-21 13:35:24 +10:00
Aymeric Ducroquetz
1831658b33 proxy-logging: Allow to add domain in log messages
Change-Id: Id441688aac1088041e243b8ee70710d9c5d7911b
2022-06-22 10:45:01 -07:00
Zuul
2ed6e08f98 Merge "s3api tests: allow AWS credential file loading" 2022-06-02 07:53:05 +00:00
Alistair Coles
5d9f1f009c s3api tests: allow AWS credential file loading
When switching the s3api cross-compatibility tests' target between a
Swift endpoint and an S3 endpoint, allow specifying an AWS CLI style
credentials file as an alternative to editing the swift 'test.conf'
file.

Change-Id: I5bebca91821552d7df1bc7fa479b6593ff433925
2022-06-01 21:46:41 -07:00
Alistair Coles
ccaf49a00c Add backend rate limiting middleware
This is a fairly blunt tool: ratelimiting is per device and
applied independently in each worker, but this at least provides
some limit to disk IO on backend servers.

GET, HEAD, PUT, POST, DELETE, UPDATE and REPLICATE methods may be
rate-limited.

Only requests with a path starting '<device>/<partition>', where
<partition> can be cast to an integer, will be rate-limited. Other
requests, including, for example, recon requests with paths such as
'recon/version', are unconditionally forwarded to the next app in the
pipeline.

OPTIONS and SSYNC methods are not rate-limited. Note that
SSYNC sub-requests are passed directly to the object server app
and will not pass though this middleware.

Change-Id: I78b59a081698a6bff0d74cbac7525e28f7b5d7c1
2022-05-20 14:40:00 +01:00
Tim Burke
118cf2ba8a tempurl: Deprecate sha1 signatures
We've known this would eventually be necessary for a while [1], and
way back in 2017 we started seeing SHA-1 collisions [2].

[1] https://www.schneier.com/blog/archives/2012/10/when_will_we_se.html
[2] https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

UpgradeImpact:
==============
"sha1" has been removed from the default set of `allowed_digests` in the
tempurl middleware config. If your cluster still has clients requiring
the use of SHA-1,

- explicitly configure `allowed_digests` to include "sha1" and
- encourage your clients to move to more-secure algorithms.

Depends-On: https://review.opendev.org/c/openstack/tempest/+/832771
Change-Id: I6e6fa76671c860191a2ce921cb6caddc859b1066
Related-Change: Ia9dd1a91cc3c9c946f5f029cdefc9e66bcf01046
Closes-Bug: #1733634
2022-04-22 20:43:01 +10:00
Takashi Kajinami
bb220f6f41 Doc: Update links in associated projects
Replace github by opendev because currently opendev is the source and
github is its mirror.

Also, update links for repositories managed by SwiftStack organization.
Unfortunately some repositories are no longer available so are removed
from the list.

Change-Id: Ic223650eaf7a1934f489c8b713c6d8da1239f3c5
2022-04-19 20:03:06 +09:00
Takashi Kajinami
5a272421d0 Swauth is retired
The swauth project is already retired[1]. The documentation is updated
to reflect status of the project.

Also, this change removes reference to this middleware in unit tests.

[1] https://opendev.org/x/swauth/
Change-Id: I3d8e46d85ccd965f9b51006c330e391dcdc24a34
2022-04-19 19:50:23 +09:00
Matthew Oliver
1cee51d526 doc: also add reverse option to pagination doc
Change-Id: I4ee5a52ec9fb5f1920cd6869f6b1245c3787391c
2022-04-08 12:59:27 +10:00
Tim Burke
a9565893f2 Add docs for registry module
Drive-By: make the register_sensitive_header() implementation more
obviously case-insensitive.

Change-Id: I5b299bc0adb526c468c6364a5706eb86809533e5
2022-02-10 11:17:06 -08:00
Matthew Oliver
f2c279bae9 Trim sensitive information in the logs (CVE-2017-8761)
Several headers and query params were previously revealed in logs but
are now redacted:

  * X-Auth-Token header (previously redacted in the {auth_token} field,
    but not the {headers} field)
  * temp_url_sig query param (used by tempurl middleware)
  * Authorization header and X-Amz-Signature and Signature query
    parameters (used by s3api middleware)

This patch adds some new middleware helper methods to track headers and
query parameters that should be redacted by proxy-logging. While
instantiating the middleware, authors can call either:

   register_sensitive_header('case-insensitive-header-name')
   register_sensitive_param('case-sensitive-query-param-name')

to add items that should be redacted. The redaction uses proxy-logging's
existing reveal_sensitive_prefix config option to determine how much to
reveal.

Note that query params will still be logged in their entirety if
eventlet_debug is enabled.

UpgradeImpact
=============
The reveal_sensitive_prefix config option now applies to more items;
operators should review their currently-configured value to ensure it
is appropriate for these new contexts. In particular, operators should
consider reducing the value if it is more than 20 or so, even if that
previously offered sufficient protection for auth tokens.

Co-Authored-By: Tim Burke <tim.burke@gmail.com>
Closes-Bug: #1685798
Change-Id: I88b8cfd30292325e0870029058da6fb38026ae1a
2022-02-09 10:53:46 +00:00
Alistair Coles
eda7d5fe3c Deprecate LogAdapter.set_statsd_prefix
Previously, the set_statsd_prefix method was used to mutate a logger's
StatsdClient tail prefix after a logger was instantiated. This pattern
had led to unexpected mutations (see Related-Change). The tail_prefix
can now be passed as an argument to get_logger(), and is then
forwarded to the StatsdClient constructor, for a more explicit
assignment pattern.

The set_statsd_prefix method is left in place for backwards
compatibility. A DeprecationWarning will be raised if it is used
to mutate the StatsdClient tail prefix.

Change-Id: I7692860e3b741e1bc10626e26bb7b27399c325ab
Related-Change: I0522b1953722ca96021a0002cf93432b973ce626
2022-02-07 17:46:06 +00:00
Alistair Coles
8ee631ccee reconstructor: restrict max objects per revert job
Previously the ssync Sender would attempt to revert all objects in a
partition within a single SSYNC request. With this change the
reconstructor daemon option max_objects_per_revert can be used to limit
the number of objects reverted inside a single SSYNC request for revert
type jobs i.e. when reverting handoff partitions.

If more than max_objects_per_revert are available, the remaining objects
will remain in the sender partition and will not be reverted until the
next call to ssync.Sender, which would currrently be the next time the
reconstructor visits that handoff partition.

Note that the option only applies to handoff revert jobs, not to sync
jobs.

Change-Id: If81760c80a4692212e3774e73af5ce37c02e8aff
2021-12-03 12:43:23 +00:00
Zuul
d827b852b8 Merge "Make SAIO reconciler multiprocess" 2021-11-20 07:00:20 +00:00
Tim Burke
c4dca39a70 Make SAIO reconciler multiprocess
Change-Id: Iadaf898743a76e345264f1506af5318530bed0e0
2021-10-22 16:28:40 -07:00
Matthew Oliver
7f5e34a405 sharidng: update doc to only mention auto_shard experimental
There are been members of the community running sharding in production
and it's awesome. It's just the auto-sharding swift of that remains
experimental.

This patch removes the big sharding warning from the top of the
sharding overview page and better emphasises that it's the audo_shard
option that isn't ready for production use.

Change-Id: Id2c842cffad58fb6fd5e1d12619c46ffcb38f8a5
2021-10-19 12:53:04 +11:00
Matthew Oliver
7a105b5ef0 Add and pipe reconstructor stats through recon
This patch plumbs the object-reconstructor stats that are dropped
into recon cache out through the middleware and swift-recon tool.

This adds a '/recon/reconstruction/object' to the middleware. As such
the swift-recon tool has grown a '-R' or '--reconstruction' option
access this data from each node.

Plus some tests and documentation updates.

Change-Id: I98582732ca5ccb2e7d2369b53abf9aa8c0ede00c
2021-08-20 00:03:40 +00:00
Luciano Lo Giudice
1760a0cb9f Fix the sysctl parameter used to tune connections
The documentation currently uses the sysctl parameter:
'net.ipv4.netfilter.ip_conntrack_max', but it's been deprecated
for a long time. This patch switches it to:
'net.netfilter.nf_conntrack_max', which is the modern equivalent.

Change-Id: I3fd5d4060840092bca53af7da7dbaaa600e936a3
2021-07-21 15:00:13 -03:00
Alistair Coles
bbaed18e9b diskfile: don't remove recently written non-durables
DiskFileManager will remove any stale files during
cleanup_ondisk_files(): these include tombstones and nondurable EC
data fragments whose timestamps are older than reclaim_age. It can
usually be safely assumed that a non-durable data fragment older than
reclaim_age is not going to become durable. However, if an agent PUTs
objects with specified older X-Timestamps (for example the reconciler
or container-sync) then there is a window of time during which the
object server has written an old non-durable data file but has not yet
committed it to make it durable.

Previously, if another process (for example the reconstructor) called
cleanup_ondisk_files during this window then the non-durable data file
would be removed. The subsequent attempt to commit the data file would
then result in a traceback due to there no longer being a data file to
rename, and of course the data file is lost.

This patch modifies cleanup_ondisk_files to not remove old, otherwise
stale, non-durable data files that were only written to disk in the
preceding 'commit_window' seconds. 'commit_window' is configurable for
the object server and defaults to 60.0 seconds.

Closes-Bug: #1936508
Related-Change: I0d519ebaaade35249fb7b17bd5f419ffdaa616c0
Change-Id: I5f3318a44af64b77a63713e6ff8d0fd3b6144f13
2021-07-19 21:18:02 +01:00
Zuul
17489ce7bf Merge "sharder: avoid small tail shards" 2021-07-08 17:00:52 +00:00
Zuul
8066efb43a Merge "sharder: support rows_per_shard in config file" 2021-07-07 23:06:08 +00:00
Alistair Coles
2a593174a5 sharder: avoid small tail shards
A container is typically sharded when it has grown to have an object
count of shard_container_threshold + N, where N <<
shard_container_threshold.  If sharded using the default
rows_per_shard of shard_container_threshold / 2 then this would
previously result in 3 shards: the tail shard would typically be
small, having only N rows. This behaviour caused more shards to be
generated than desirable.

This patch adds a minimum-shard-size option to
swift-manage-shard-ranges, and a corresponding option in the sharder
config, which can be used to avoid small tail shards. If set to
greater than one then the final shard range may be extended to more
than rows_per_shard in order to avoid a further shard range with less
than minimum-shard-size rows. In the example given, if
minimum-shard-size is set to M > N then the container would shard into
two shards having rows_per_shard rows and rows_per_shard + N
respectively.

The default value for minimum-shard-size is rows_per_shard // 5. If
all options have their default values this results in
minimum-shard-size being 100000.

Closes-Bug: #1928370
Co-Authored-By: Matthew Oliver <matt@oliver.net.au>
Change-Id: I3baa278c6eaf488e3f390a936eebbec13f2c3e55
2021-07-07 13:59:36 +01:00
Alistair Coles
a87317db6e sharder: support rows_per_shard in config file
Make rows_per_shard an option that can be configured
in the [container-sharder] section of a config file.

For auto-sharding, this option was previously hard-coded to
shard_container_threshold // 2.

The swift-manage-shard-ranges command line tool already supported
rows_per_shard on the command line and will now also load it from a
config file if specified. Any value given on the command line takes
precedence over any value found in a config file.

Change-Id: I820e133a4e24400ed1e6a87ebf357f7dac463e38
2021-07-07 13:59:36 +01:00