4217 Commits

Author SHA1 Message Date
Samuel Merritt
cc2f0f4ed6 Speed up reading and writing xattrs for object metadata
Object metadata is stored as a pickled hash: first the data is
pickled, then split into strings of length <= 254, then stored in a
series of extended attributes named "user.swift.metadata",
"user.swift.metadata1", "user.swift.metadata2", and so forth.

The choice of length 254 is odd, undocumented, and dates back to the
initial commit of Swift. From talking to people, I believe this was an
attempt to fit the first xattr in the inode, thus avoiding a
seek. However, it doesn't work. XFS _either_ stores all the xattrs
together in the inode (local), _or_ it spills them all to blocks
located outside the inode (extents or btree). Using short xattrs
actually hurts us here; by splitting into more pieces, we end up with
more names to store, thus reducing the metadata size that'll fit in
the inode.

[Source: http://xfs.org/docs/xfsdocs-xml-dev/XFS_Filesystem_Structure//tmp/en-US/html/Extended_Attributes.html]

I did some benchmarking of read_metadata with various xattr sizes
against an XFS filesystem on a spinning disk, no VMs involved.

Summary:

 name | rank | runs |      mean |        sd | timesBaseline
------|------|------|-----------|-----------|--------------
32768 |    1 | 2500 | 0.0001195 |  3.75e-05 |           1.0
16384 |    2 | 2500 | 0.0001348 | 1.869e-05 | 1.12809122912
 8192 |    3 | 2500 | 0.0001604 | 2.708e-05 | 1.34210998858
 4096 |    4 | 2500 | 0.0002326 | 0.0004816 | 1.94623473988
 2048 |    5 | 2500 | 0.0003414 | 0.0001409 | 2.85674781189
 1024 |    6 | 2500 | 0.0005457 | 0.0001741 | 4.56648611635
  254 |    7 | 2500 |  0.001848 |  0.001663 | 15.4616067887

Here, "name" is the chunk size for the pickled metadata. A total
metadata size of around 31.5 KiB was used, so the "32768" runs
represent storing everything in one single xattr, while the "254" runs
represent things as they are without this change.

Since bigger xattr chunks make things go faster, the new chunk size is
64 KiB. That's the biggest xattr that XFS allows.

Reading of metadata from existing files is unaffected; the
read_metadata() function already handles xattrs of any size.

On non-XFS filesystems, this is no worse than what came before:

ext4 has a limit of one block (typically 4 KiB) for all xattrs (names
and values) taken together [1], so this change slightly increases the
amount of Swift metadata that can be stored on ext4.

ZFS let me store an xattr with an 8 MiB value, so that's plenty. It'll
probably go further, but I stopped there.

[1] https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Extended_Attributes

Change-Id: Ie22db08ac0050eda693de4c30d4bc0d620e7f7d4
2014-12-05 15:52:58 -08:00
Jenkins
b6e4c8314f Merge "Workflow documentation is now in infra-manual" 2014-12-05 23:05:20 +00:00
Hisashi Osanai
d742b610df Fix the behavior of swift-ring-builder list_parts before rebalance
The swift-ring-builder list_parts before rebalance failed abnormally so
this patch fix the behavior. After this patch applies the behavior is
completion normally with the following messages.

Specified builder file "<builder_file>" is not rebalanced yet.
Please rebalance first.

Closes-Bug: #1399529
Change-Id: I9e5db6da85de4188915c51bc401604733f0e1b77
2014-12-06 02:44:59 +09:00
Jeremy Stanley
a3b192614d Workflow documentation is now in infra-manual
Replace URLs for workflow documentation to appropriate parts of the
OpenStack Project Infrastructure Manual.

Change-Id: I060e5f6869fd302a47a54556f31763b5ab668012
2014-12-05 15:30:27 +11:00
Jenkins
96439301a2 Merge "added testing notes to the contributing doc" 2014-12-04 19:36:39 +00:00
Jenkins
7a7cdf3d6a Merge "Raise ValueError for offset on Timestamp over limit" 2014-12-04 18:44:12 +00:00
Jenkins
e129c7cc77 Merge "Fix container quota check during cross-account COPY" 2014-12-04 18:44:04 +00:00
John Dickinson
c8ef11d677 added testing notes to the contributing doc
Change-Id: Ifb83469dabbca435bd3df2c05089dc1a113c4460
2014-12-04 10:41:11 -05:00
Jenkins
f8e4ab509b Merge "Fix reclaim on deleted containers" 2014-12-04 09:10:34 +00:00
Jenkins
4a1996c3ee Merge "Clean up empty account and container partitions directories." 2014-12-04 02:44:49 +00:00
Clay Gerrard
233e0aebf7 Fix reclaim on deleted containers
The common db replicator's code path for reclaiming deleted db's beyond the
reclaim age was not covered by unittests, and a AttributeError snuck in.  In
writing the test that would cover the common code both for accounts and
containers I discovered another KeyError with the container conditional for
validating the container's fully reported status.

This fixes both those issues and adds additional tests for the cleanup empty
account container partition and suffix directories.

Change-Id: I2a1bfaefebd05b01231bf71dd908fcc49adb4c36
2014-12-03 17:10:15 -08:00
Thiago da Silva
dfd7843732 Removing unused method: _remaining_items
Removing method _remaining_items from object controller class.

The only caller to this function was removed as part of the
work to move all DLO functionality to middleware:
https://review.openstack.org/63326

Change-Id: I7fbc208746bba8142ae51bf27cfa1979cae00301
Signed-off-by: Thiago da Silva <thiago@redhat.com>
2014-12-02 16:57:07 -05:00
Caleb Tennis
d40cebfe55 Clean up empty account and container partitions directories.
Because we iterate over these directories on a replication run,
and they are not (previously) cleaned up, the time to start the
replication increases incrementally for each stale directory
lying around.  Thousands of directories across dozens of disks
on a single machine can make for non-trivial startup times.

Plus it just seems like good housekeeping.
Closes-Bug: #1396152

Change-Id: Iab607b03b7f011e87b799d1f9af7ab3b4ff30019
2014-12-02 16:24:32 -05:00
Clay Gerrard
83834eb276 Raise ValueError for offset on Timestamp over limit
We can't order a Timestamp with an offset larger than 16 hex digits
correctly, so we raise a ValueError if you try to create one.

Change-Id: I8c8d4cf13785a1a8eb7416392263eae5242aa407
2014-12-01 11:44:10 -08:00
Jenkins
07f16dc8ee Merge "Add Expected Failure for ssync with sys-meta" 2014-12-01 08:42:28 +00:00
Jenkins
f48037030e Merge "Reject object names with Unicode surrogates" 2014-11-27 19:40:11 +00:00
John Dickinson
977d7c14da Fix tempfile bugs from commit 6978275
Commit 6978275 changed xprofile middleware's usage of mktemp
and moved to using tempfile. But it was clearly never tested,
because the os.close() calls never worked. This patch updates
that previous patch to use a context to open and close the file.

Change-Id: I40ee42e8539551fd8e4dfb353f50146ab40a7847
2014-11-26 14:21:33 -08:00
OpenStack Proposal Bot
dec97fc3ba Imported Translations from Transifex
For more information about this automatic import see:
https://wiki.openstack.org/wiki/Translations/Infrastructure

Change-Id: Ibf319f7cc1b5036ad8031776cf2c6018fb8a0159
2014-11-26 06:13:29 +00:00
Jenkins
2cf24e914b Merge "Make error limits survive a ring reload" 2014-11-26 02:16:57 +00:00
Jenkins
7ed32a09d1 Merge "Handle os.listdir failures in object-updater" 2014-11-26 01:43:30 +00:00
Jenkins
3739652708 Merge "Remove invalid connection checking in db_replicator" 2014-11-26 01:33:54 +00:00
Clay Gerrard
01f6e86006 Add Expected Failure for ssync with sys-meta
Sysmeta included with an object PUT persists with the PUT data - if an
internal operation such as POST-as-copy during partial failure, or ssync
with fast-POST (not supported), causes that data to be lost then the
associated sysmeta will also be lost.

Since object sys-meta persistence in the face of a POST when the
original .data is unavailable requires fast-POST with .meta files the
probetest that validates object sys-meta persistence of a POST when the
most up-to-date copy of the object with sys-meta is unavailable
configures an InternalClient with object_post_as_copy = false.

This non-default configuration option is not supported by ssync and
results in a loss of sys-meta very similar to the object sys-meta
failure you would see with object_post_as_copy = true when the COPY part
of the POST is unable to retrieve the most recently written object with
sys-meta.

Until we can fix the default POST behavior to make metadata updates
without stomping on newer data file timestamps we should expect object
sys-meta to be "very very best possible but not really guaranteed
effort".

Until we can fix ssync to replicate metadata updates without stomping on
newer data file timestamps we should expect this test to fail.

When ssync replication of fast-POST metadata update is fixed this test
will fail signaling that the expected failure cruft should be removed,
but other parts of ssync replication will still work and some other bugs
can be fixed while we wait.

Change-Id: Ifc5d49514de79b78f7715408e0fe0908357771d3
2014-11-25 14:28:00 -08:00
Thiago da Silva
c52795e263 Fix container quota check during cross-account COPY
Container quota is not currently checking Destination-Account header
which could cause quota to not be enforced in case of copies

Change-Id: I43adb0d7d2fc14ba6c0ca419a52a5c3f138f799a
Signed-off-by: Thiago da Silva <thiago@redhat.com>
2014-11-25 17:07:05 -05:00
Cedric Dos Santos
a8751ae557 Correct misspelled words
In some files I found misspelling words.

bin/swift-reconciler-enqueue#l26
   primarly => primarily
swift/account/backend.py#l309
   ommited => omitted
swift/container/replicator.py#l158
   successfull => successful
test/unit/account/test_backend.py#1450
   non_existant_policy_index => non_existent_policy_index
test/unit/account/test_backend.py#1451
   'test-non-existant-policy'=> 'test-non-existent-policy'
test/unit/account/test_backend.py#1453
   non_existant_policy_index => non_existent_policy_index

Change-Id: I976236e3200a6fbdc20be464acff182b6cface81
2014-11-25 15:44:30 +00:00
Jenkins
18acb03f43 Merge "Fix typo in apache_deployment doc" 2014-11-25 04:14:15 +00:00
Jenkins
351126f8eb Merge "Fix typos in overview_large_objects and versioning doc" 2014-11-25 04:14:07 +00:00
Shilla Saebi
98de48d898 Fix typo in apache_deployment doc
Change-Id: I42d76f544290dbda62633de90608d41caadac084
2014-11-24 15:40:21 +00:00
Shilla Saebi
a1872b0498 Fix 2 typos in admin_guide file
Change-Id: Ibf1e5dbf6ff4747c7f23f6638321ab41bba3021b
2014-11-24 15:38:25 +00:00
Shilla Saebi
0dc4b0a7b7 Fix typos in overview_large_objects and versioning doc
Change-Id: I1a919ad1b0298d5817f9eb2caf5e3bd7b3243c2c
2014-11-24 15:35:06 +00:00
Takashi Kajinami
7a0c4d2482 Remove invalid connection checking in db_replicator
Account/Container-replicator checks connection generation and timeout
in HTTP REPLICATE Request in _repl_to_node, but it doesn't really checks
connection but only construction of ReplConnection class.
This patch removes that invalid checking.

Change-Id: Ie6b4062123d998e69c15638b741e7d1ba8a08b62
Closes-Bug: #1359018
2014-11-25 00:00:05 +09:00
Jenkins
308c6a5e73 Merge "mock out os.listdir to return a list" 2014-11-21 03:24:38 +00:00
Jenkins
629e6dafd6 Merge "update AUTHORS" 2014-11-21 02:30:02 +00:00
Jenkins
d66dabb698 Merge "fix example typo" 2014-11-21 02:11:17 +00:00
Jay S. Bryant
1c9bc0b522 Handle os.listdir failures in object-updater
While investigating bug 1375348 I discovered the problem
reported there was not limited to the object-auditor.  The
object-updater has similar bugs.

This patch catches the unhandled exception that can be thrown
by os.listdir if the self.devices directory is inaccessible.

Change-Id: I6293b840916bb63cf9eebbc05068d9a3c871bdc3
Related-bug: 1375348
2014-11-20 16:48:38 -06:00
Jay S. Bryant
8cc075a8fb mock out os.listdir to return a list
os.listdir returns a list of items.  The test case had been
written to return a single item which, though not really changing
the result of the test, was not the best approach.

This patch updates the test case to return a list instead of a single
item.

Change-Id: I793e0636440c0de0ca339c6592adec3e8b4ee1b4
2014-11-20 16:45:22 -06:00
John Dickinson
fb353e1756 update AUTHORS
Change-Id: I416e81b20a129377782f5d9298f8b8f5be079c27
2014-11-20 10:22:27 -08:00
OpenStack Proposal Bot
6c02adc33e Imported Translations from Transifex
For more information about this automatic import see:
https://wiki.openstack.org/wiki/Translations/Infrastructure

Co-Authored-By: Pearl Yajing Tan <pearl.y.tan@seagate.com>

Change-Id: Ifa3e292b8d5afbef8a99121b233e5ea596e672b7
2014-11-20 06:35:52 +00:00
Eohyung Lee
87d8626505 fix example typo
5 * 1024 * 1024 = 5242880

Change-Id: I0eeb6e2d9fbd79103cd8c658627344f73fed9498
2014-11-20 11:38:49 +09:00
Jenkins
7372354147 Merge "Fix translation setup" 2014-11-19 23:41:48 +00:00
Jenkins
a590e84a53 Merge "Adds v1 API documentation to doc/source/api" 2014-11-19 23:39:06 +00:00
Andreas Jaeger
ddf8b0594b Fix translation setup
Fix the output directory, it should be swift/locale.
This fixes the importing of translations.

Change-Id: I48311773c9d200c3b1739dc796618849416096ed
2014-11-19 09:11:55 -05:00
Jenkins
dba3fc3179 Merge "Prefer X-Backend-Timestamp for X-Newest" 2014-11-18 21:21:01 +00:00
Jenkins
477ec4133b Merge "move slo, dlo after tempauth in pipeline" 2014-11-18 14:34:32 +00:00
Jenkins
50bd02824b Merge "Always use FakeMemcache for in-process tests" 2014-11-18 14:34:27 +00:00
Jenkins
5d010d41f1 Merge "Make in process functional tests use sample proxy-server.conf" 2014-11-18 14:17:13 +00:00
Clay Gerrard
e0307f950b Always use FakeMemcache for in-process tests
Better isolation and consistency for in-process functests to always use
the FakeMemcache.  If you want to test the real memcache you have real
functional tests.

Change-Id: Ic483f794e122130bd7694c9a5f9a2b1cd0b9a653
2014-11-18 10:13:01 +00:00
Anne Gentle
6f9ca6122e Adds v1 API documentation to doc/source/api
After discussion https://review.openstack.org/#/c/129384/ moving
to the doc directory in swift repo.

This lets us eliminate the object-api repo along with all the <service>-
api repos and move content to audience-centric locations.

Change-Id: Ia0d9973847f7409a02dcc1a0e19400a3c3ecdf32
2014-11-17 16:19:07 -06:00
Thiago da Silva
11a72a4a50 move slo, dlo after tempauth in pipeline
Noticed that slo and dlo middleware were placed before
tempauth, they should be placed after

DocImpact

Change-Id: Ia931e2280125d846f248b23e219aebad14c66210
Signed-off-by: Thiago da Silva <thiago@redhat.com>
2014-11-17 16:41:09 +00:00
Daisuke Morita
2792fe81a9 Show the sum of every policy's amount in /recon/async
After the release of Swift ver. 2.0.0, some recon responses do not
show each policy's information yet. To make things worse, some recon
results only count on policy-0's score, therefore the total is not
shown in the recon results.

With this patch, async_pending count of recon results becomes
policy-aware. Suppose a number of async_pending files for policy-0 is 2
and a number for policy-1 is 3, recon sums up every policy's amount
as follows.

$ curl http://<host>:<port>/recon/async
{"async_pending": 5} # It showed 2 before this commit

Related-Bug: 1375332
Change-Id: Ifc88b8c9e06b9f022a926a87ed807e938e1e0412
2014-11-14 20:47:04 +09:00
Alistair Coles
c9f8246378 Make in process functional tests use sample proxy-server.conf
This patch was first motivated by noticing that the proxy
server pipeline used for in process functional tests was
out of date with respect to the pipeline in
/etc/proxy-server.conf.sample. Rather than cut and paste
the current pipeline into the in process setup, it seems
like a better idea would be to have the in process tests
always use the sample config.

A further benefit is that in process functional tests will
pick up changes to the sample config introduced by patches -
previously test/functional/__init__.py would need to be
manually modified to run in process functional tests
on new middleware for example.

Note: because the pipeline is now loaded using entry points,
'python setup.py [develop|install]' will now be needed
before running the tests.

Obvious next steps would be to do the same for the backend
servers, and to allow alternative config files and dir's
to be specified, but this patch is the first step.

Also drive-by fixes some typos in proxy-server.conf.sample

Change-Id: If442bd7c2b1721ec92839c4490924ba33e1545d8
2014-11-14 10:44:41 +00:00