911 Commits

Author SHA1 Message Date
Jenkins
263dc8a3f3 Merge "Enable per policy proxy config options" 2017-05-25 06:34:48 +00:00
Alistair Coles
45884c1102 Enable per policy proxy config options
This is an alternative approach to that proposed in [1]

Adds support for optional per-policy config sections
to be added in proxy-server.conf. This is highly desirable
to allow per-policy affinity options to be set for use with
duplicated EC policies [2] and composite rings [3].

Certain options found in per-policy conf sections will
override their equivalents that may be set in the
[app:proxy-server] section. Currently the options
handled that way are:

  sorting_method
  read_affinity
  write_affinity
  write_affinity_node_count

For example:

  [proxy-server:policy:0]
  sorting_method = affinity
  read_affinity = r1=100
  write_affinity = r1
  write_affinity_node_count = 1 * replicas

The corresponding attributes of the proxy-server Application
are now available from instances of an OverrideConf object
that is obtained from Application.get_policy_options(policy).

[1] Related-Change: I9104fc789ba85ab3ab5ccd34096125b482821389
[2] Related-Change: Idd155401982a2c48110c30b480966a863f6bd305
[3] Related-Change: I0d8928b55020592f8e75321d1f7678688301d797

Co-Authored-By: Kota Tsuyuzaki <tsuyuzaki.kota@lab.ntt.co.jp>
Change-Id: I3f718f425f525baa80045ba067950c752bcaaefc
2017-05-23 20:22:30 +01:00
Jenkins
a2e020c52b Merge "Add read and write affinity options to deployment guide" 2017-05-19 19:05:33 +00:00
Alistair Coles
f02ec4de81 Add read and write affinity options to deployment guide
Add entries for these options in the deployment guide and
make the text in proxy-server.conf-sample and man page
consistent.

Change-Id: I5854ddb3e5864ddbeaf9ac2c930bfafdb47517c3
2017-05-18 10:42:44 -07:00
Jenkins
9089e44c0b Merge "Add Composite Ring Functionality" 2017-05-18 10:18:31 +00:00
Kota Tsuyuzaki
d40031b46f Add Composite Ring Functionality
* Adds a composite_builder module which provides the functionality to
  build a composite ring from a number of component ring builders.

* Add id to RingBuilder to differentiate rings in composite.
  A RingBuilder now gets a UUID when it is saved to file if
  it does not already have one. A RingBuilder loaded from
  file does NOT get a UUID assigned unless it was previously persisted in
  the file. This forces users to explicitly assign an id to
  existing ring builders by saving the state back to file.

  The UUID is included in first line of the output from:

    swift-ring-builder <builder-file>

Background:

This is another implementation for Composite Ring [1]
to enable better dispersion for global erasure coded cluster.

The most significant difference from the related-change [1] is that this
solution attempts to solve the problem as an offline tool rather than
dynamic compositing on the running servers. Due to the change, we gain
advantages such as:

- Less code and being simple
- No complex state validation on the running server
- Easy deployments with an offline tool

This patch does not provide a command line utility for managing
composite rings. The interface for such a tool is still under
discussion; this patch provides the enabling functionality first.

Co-Authored-By: Clay Gerrard <clay.gerrard@gmail.com>
Co-Authored-By: Alistair Coles <alistairncoles@gmail.com>

[1] Related-Change: I80ef36d3ac4d4b7c97a1d034b7fc8e0dc2214d16
Change-Id: I0d8928b55020592f8e75321d1f7678688301d797
2017-05-15 16:42:00 -07:00
Tim Burke
3981e1ee8a Remove links for EOLed releases
Change-Id: If7e8526edf18b02474ba272451b9b4212558e03c
2017-05-11 13:57:10 +00:00
Clay Gerrard
37f6f25283 Update multi-node install links
... as is useful to do from time to time

Change-Id: I165899445080fa3a8e6dc624ab5a13680b819a73
2017-05-11 09:13:02 -04:00
Ngo Quoc Cuong
e23f8d3160 Trivial fix typo while reading doc
Change-Id: I9d96dd4464a086e508fbf18057b4f3e90c82c916
2017-05-05 23:06:14 +07:00
Tim Burke
cce719260d Clean up some doc formatting
Change-Id: Iac24369910464cb766fe7d5e6c15120d147930a7
2017-03-29 21:00:01 +00:00
lijunbo
47ba1041fc Use swift tempurl instaed of swift-temp-url
Deprecate swift-temp-url and call python-swiftclient's
implementation instead. This adds python-swiftclient as an
optional dependency of Swift which is noted in releasenotes.

Change-Id: I0404f16c21099cb7695430f5b63722729c305613
2017-03-27 18:38:50 +08:00
Jenkins
91fc844e7b Merge "Document SAIO rsync service setup for ubuntu 16" 2017-03-24 16:12:00 +00:00
lijunbo
21396bc106 keep consistent naming convention of swift and urls
Change-Id: Iddd4f69abf77a5c643ce8b164fc6cfd72c068229
2017-03-23 02:28:41 +00:00
Jenkins
1e9b8888bf Merge "Enable cluster-wide CORS Expose-Headers setting" 2017-03-13 19:24:20 +00:00
Jenkins
a3efca5027 Merge "Support EC policy for in process functional tests" 2017-03-10 04:38:12 +00:00
Alistair Coles
5f610c76bd Support EC policy for in process functional tests
Add support for a 2+1 EC policy to be optionally used as default
policy when running in process functional tests.

The EC policy may be selected by setting the env var:

  SWIFT_TEST_IN_PROCESS_CONF_LOADER=ec tox

when running .functests, or by using the new tox test env:

  tox -e func-ec

Change-Id: I02e3553a74a024efdab91dcd609ac1cf4e4f3208
2017-03-09 10:42:34 +00:00
Alistair Coles
adcb4c270e Document SAIO rsync service setup for ubuntu 16
SAIO docs do suggest using Ubuntu 14.04, but if using
16.04 then systemctl needs to be used to have rsync service
restart on reboot.

Change-Id: I4fb0d3d063df61fbdfca981f06911148f3c4dc04
2017-03-08 15:07:13 +00:00
Clay Gerrard
38b99ad195 Global EC Under Development Documentation
Layout the foundation for documenting the features which will enable
Global EC.

The formatting on the sections in our existing EC docs didn't follow
best practices [1] and it caused some sphinx build warnings.

1. http://www.sphinx-doc.org/en/stable/rest.html#sections

Change-Id: I2d164dafeb84629c75c3c2ff774329ee84270b7f
2017-03-07 15:25:54 +00:00
Tim Burke
2ca303597e Make Sphinx treat warnings as errors
...and fix up the one warning that's crept in.

Change-Id: I3985d027f0ac2119ceaeb4daba5964f937de6cea
2017-03-06 23:55:40 +00:00
Jenkins
1f36b5dd16 Merge "EC Fragment Duplication - Foundational Global EC Cluster Support" 2017-02-26 06:26:08 +00:00
Romain LE DISEZ
9b47de3095 Enable cluster-wide CORS Expose-Headers setting
An operator proposing a web UX to its customers might want to allow web
browser to access some headers by default (eg: X-Storage-Policy,
 X-Container-Read, ...). This commit adds a new setting to the
proxy-server to allow some headers to be added cluster-wide to the CORS
header Access-Control-Expose-Headers.

Change-Id: I5ca90a052f27c98a514a96ee2299bfa1b6d46334
2017-02-25 19:00:28 +01:00
Kota Tsuyuzaki
40ba7f6172 EC Fragment Duplication - Foundational Global EC Cluster Support
This patch enables efficent PUT/GET for global distributed cluster[1].

Problem:
Erasure coding has the capability to decrease the amout of actual stored
data less then replicated model. For example, ec_k=6, ec_m=3 parameter
can be 1.5x of the original data which is smaller than 3x replicated.
However, unlike replication, erasure coding requires availability of at
least some ec_k fragments of the total ec_k + ec_m fragments to service
read (e.g. 6 of 9 in the case above). As such, if we stored the
EC object into a swift cluster on 2 geographically distributed data
centers which have the same volume of disks, it is likely the fragments
will be stored evenly (about 4 and 5) so we still need to access a
faraway data center to decode the original object. In addition, if one
of the data centers was lost in a disaster, the stored objects will be
lost forever, and we have to cry a lot. To ensure highly durable
storage, you would think of making *more* parity fragments (e.g.
ec_k=6, ec_m=10), unfortunately this causes *significant* performance
degradation due to the cost of mathmetical caluculation for erasure
coding encode/decode.

How this resolves the problem:
EC Fragment Duplication extends on the initial solution to add *more*
fragments from which to rebuild an object similar to the solution
described above. The difference is making *copies* of encoded fragments.
With experimental results[1][2], employing small ec_k and ec_m shows
enough performance to store/retrieve objects.

On PUT:

- Encode incomming object with small ec_k and ec_m  <- faster!
- Make duplicated copies of the encoded fragments. The # of copies
  are determined by 'ec_duplication_factor' in swift.conf
- Store all fragments in Swift Global EC Cluster

The duplicated fragments increase pressure on existing requirements
when decoding objects in service to a read request.  All fragments are
stored with their X-Object-Sysmeta-Ec-Frag-Index.  In this change, the
X-Object-Sysmeta-Ec-Frag-Index represents the actual fragment index
encoded by PyECLib, there *will* be duplicates.  Anytime we must decode
the original object data, we must only consider the ec_k fragments as
unique according to their X-Object-Sysmeta-Ec-Frag-Index.  On decode no
duplicate X-Object-Sysmeta-Ec-Frag-Index may be used when decoding an
object, duplicate X-Object-Sysmeta-Ec-Frag-Index should be expected and
avoided if possible.

On GET:

This patch inclues following changes:
- Change GET Path to sort primary nodes grouping as subsets, so that
  each subset will includes unique fragments
- Change Reconstructor to be more aware of possibly duplicate fragments

For example, with this change, a policy could be configured such that

swift.conf:
ec_num_data_fragments = 2
ec_num_parity_fragments = 1
ec_duplication_factor = 2
(object ring must have 6 replicas)

At Object-Server:
node index (from object ring):  0 1 2 3 4 5 <- keep node index for
                                               reconstruct decision
X-Object-Sysmeta-Ec-Frag-Index: 0 1 2 0 1 2 <- each object keeps actual
                                               fragment index for
                                               backend (PyEClib)

Additional improvements to Global EC Cluster Support will require
features such as Composite Rings, and more efficient fragment
rebalance/reconstruction.

1: http://goo.gl/IYiNPk (Swift Design Spec Repository)
2: http://goo.gl/frgj6w (Slide Share for OpenStack Summit Tokyo)

Doc-Impact

Co-Authored-By: Clay Gerrard <clay.gerrard@gmail.com>
Change-Id: Idd155401982a2c48110c30b480966a863f6bd305
2017-02-22 10:56:13 -08:00
Alistair Coles
9be1d8ba28 Fix tox -e docs sphinx errors
Change-Id: I6e200558b75ac539b59b492d13c36702443efc89
2017-02-20 15:58:35 -05:00
Anh Tran
1c4a16a3f9 Typo fix: curent => current
Change-Id: Ib7d2c16a755ae1faca5a371d5dae1e143110178f
2017-02-07 13:36:50 +07:00
Nam Nguyen Hoai
44fc037f97 Fix_typo: "subsitute" -> "substitute"
There is a wrong word, it should be updated.

Change-Id: I17a1fed844bcd8ab3ed668a34a8471e5f6032963
2017-02-07 15:09:41 +07:00
Tim Burke
13f1fc0885 Clean up EC overview docs a bit
Change-Id: I3bab2c015c63f32dcd6e4beefbcd0fcf22e91eec
2017-01-30 23:30:35 +00:00
Alistair Coles
b5530f4620 Bring docs inline with changes to tox envs
Make development guidelines consistent with recent
changes to tox envs, specifically the removal of
"-in-process" from some test env names [1] and the
removal of the "func-fast-post" test env [2].

[1] Related-Change: I02477d81b836df71780942189d37d616944c4dce
[2] Related-Change: I6faf8fcfa0a1d96aaf0f5e0ad2106b2b416da22f

Change-Id: I08b92c005ee50beff09a92b4331dd7dbeed79bde
2017-01-25 17:29:56 +00:00
Jenkins
2914e04493 Merge "ISO 8601 timestamps for tempurl" 2017-01-24 22:22:04 +00:00
Jenkins
63b351893d Merge "Default object_post_as_copy to False" 2017-01-24 20:58:34 +00:00
Christopher Bartz
51727c531a ISO 8601 timestamps for tempurl
With this commit, the tempurl middleware accepts (besides
the traditional unix timestamps) also timestamps according
to the format '%Y-%m-%dT%H:%M:%SZ' (one acceptable form of ISO 8601).
The idea is to make the tempurls more user-friendly,
and has been formulated here:

Change-Id: I346a0241060a9559d178b30e60c957792bbeb9f0
Implements: blueprint human-readable-tempurl-timestamp
2017-01-24 17:38:48 +01:00
Thiago da Silva
1b7aabd75f remove reference to deprecated tool
Let's remove the reference to swift-temp-url since
it has been deprecated and add a link to the swift client.

Change-Id: I70d64bf90f23a0f48b238ae6a99ab86f87d028a1
Signed-off-by: Thiago da Silva <thiago@redhat.com>
2017-01-23 15:05:34 -05:00
Tim Burke
4ee20dba48 Default object_post_as_copy to False
Additionally, emit deprecation warnings when running POST-as-COPY

Change-Id: I11324e711057f7332577fd38f9bff82bdc6aac90
2017-01-20 12:37:01 -05:00
Tim Burke
c4d455ca03 Minor dev guidelines formatting fixes
Change-Id: I650bc69bed98ac3cd45c79caaf4007d713e21fd9
2017-01-19 16:53:35 -08:00
Jenkins
fab96ed11a Merge "Confirm receipt of SLO PUT with etag" 2017-01-16 20:37:02 +00:00
Jenkins
f4f48f3501 Merge "Move documented reclaim_age option to correct location" 2017-01-16 16:35:52 +00:00
Jenkins
8535ccf9d1 Merge "Remove broken links" 2017-01-16 12:36:45 +00:00
Andreas Jaeger
d4de5502c2 Remove broken links
The Install Guides for Kilo and older are not published anymore, all
these links give a 404. Remove the links for these outdated versions.

Change-Id: I73e96b0ca4840d83c4f3561b4ffb08510d61c8d7
2017-01-16 11:22:08 +01:00
Anh Tran
ebf2731aa9 Removed redundant 'is'
Change-Id: I7442f2056d7dbbd83d514eb21564697af99e2068
2017-01-16 15:16:37 +07:00
Mahati Chamarthy
69f7be99a6 Move documented reclaim_age option to correct location
The reclaim_age is a DiskFile option, it doesn't make sense for two
different object services or nodes to use different values.

I also driveby cleanup the reclaim_age plumbing from get_hashes to
cleanup_ondisk_files since it's a method on the Manager and has access
to the configured reclaim_age.  This fixes a bug where finalize_put
wouldn't use the [DEFAULT]/object-server configured reclaim_age - which
is normally benign but leads to weird behavior on DELETE requests with
really small reclaim_age.

There's a couple of places in the replicator and reconstructor that
reach into their manager to borrow the reclaim_age when emptying out
the aborted PUTs that failed to cleanup their files in tmp - but that
timeout doesn't really need to be coupled with reclaim_age and that
method could have just as reasonably been implemented on the Manager.

UpgradeImpact: Previously the reclaim_age was documented to be
configurable in various object-* services config sections, but that did
not work correctly unless you also configured the option for the
object-server because of REPLICATE request rehash cleanup.  All object
services must use the same reclaim_age.  If you require a non-default
reclaim age it should be set in the [DEFAULT] section.  If there are
different non-default values, the greater should be used for all object
services and configured only in the [DEFAULT] section.

If you specify a reclaim_age value in any object related config you
should move it to *only* the [DEFAULT] section before you upgrade.  If
you configure a reclaim_age less that your consistency window you are
likely to be eaten by a Grue.

Closes-Bug: #1626296

Change-Id: I2b9189941ac29f6e3be69f76ff1c416315270916
Co-Authored-By: Clay Gerrard <clay.gerrard@gmail.com>
2017-01-13 03:10:47 +00:00
Mahati Chamarthy
fd6edf7bc5 Confirm receipt of SLO PUT with etag
With a multipart-manifest PUT request, if client sends the md5 of the
segments' etags, a 422 Unprocessable Entity response is returned. This
patch fixes that and confirms the etag

Change-Id: I4598a2a3f16ca8727bb07bbb6d8efcfcae777796
Closes-Bug: #1213200
Co-Authored-By: Tim Burke <tim@swiftstack.com>
2016-12-23 01:40:54 +05:30
Jenkins
c0640f8710 Merge "SLO: Make etag and size_bytes fully optional" 2016-12-13 23:02:27 +00:00
Jenkins
54d1e1bae8 Merge "tempurls with a prefix-based scope" 2016-12-13 01:58:16 +00:00
Tim Burke
7fb102dc5d SLO: Make etag and size_bytes fully optional
Previously, we still required that clients send "etag" and "size_bytes"
keys in their segment definitions. This was done as a way to guard
against typos leading to an accidental lack of verification.

However, typos should already be caught when we check for extra keys. As
a result, the only truly required key is "path".

Change-Id: Ie1d8691115f8c68b5a3f3b59317cdab59f9a3fca
2016-12-12 23:14:32 +00:00
Christopher Bartz
8333c4b36a tempurls with a prefix-based scope
The middleware now allows the usage of signatures with a prefix-based
scope. A prefix-based signature grants access to all objects which share
the same prefix. This avoids the creation of a large amount of signatures,
when a whole container or pseudofolder is shared.

Please see spec: https://review.openstack.org/#/c/199607/

Change-Id: I03b68eb74dae6196b5e63e711ef642ff7d2cfdc9
2016-12-12 12:17:12 +01:00
Alistair Coles
726eac9dfa line wrap overview_expiring_objects.rst
...and make it easier to read.

Change-Id: I54fee09e019d657e8040b9f5b4d69c6c814abd56
2016-12-08 16:55:41 +00:00
Jenkins
f0b3280e2b Merge "Add pip and virtualenv upgrade to development guidelines" 2016-12-05 07:44:21 +00:00
Jenkins
8ed8077a04 Merge "Add missing expirer recon metric to admin_guide" 2016-12-01 17:52:27 +00:00
Alistair Coles
463e22a314 Add missing expirer recon metric to admin_guide
Add expirer/object to recon metrics, which reports such as:

$ curl -s http://localhost:6010/recon/expirer/object
{"object_expiration_pass": 0.19765901565551758, "expired_last_pass": 1}

Change-Id: Ia9a171c09efebe5ad56c9de2952a8f29188c4970
2016-12-01 10:32:19 +00:00
Jenkins
b4fd962cad Merge "Add missing recon metrics to admin_guide" 2016-12-01 10:04:44 +00:00
Jenkins
f5143f5f2c Merge "Multi Swift - Multiple Swift clusters on same h/w" 2016-12-01 01:38:32 +00:00