Loic Dachary [Thu, 7 Feb 2013 23:59:43 +0000 (00:59 +0100)]
Unit tests for chain_xattr.cc
Create a new test file covering most (> 97%) of src/os/chain_xattr.{cc,h}
lines of code. The following functions are tested:
int chain_getxattr(const char *fn, const char *name, void *val, size_t size);
int chain_fgetxattr(int fd, const char *name, void *val, size_t size);
int chain_setxattr(const char *fn, const char *name, const void *val, size_t size);
int chain_fsetxattr(int fd, const char *name, const void *val, size_t size);
int chain_listxattr(const char *fn, char *names, size_t len);
int chain_flistxattr(int fd, char *names, size_t len);
int chain_removexattr(const char *fn, const char *name);
int chain_fremovexattr(int fd, const char *name);
The function translate_raw_name substitutes @@ into @. When the trailing
character is a @, it breaks. However, such an occurence cannot be created by
chain_setxattr because it always create pairs of @. Instead of silently
breaking the loop, the function should probably return on error so that the
caller can ignore it.
The function chain_fgetxattr_len may return on error if fgetxattr
returns on error. However, it is only called after another attr function
returned success and the tests cannot create the conditions under which
it would fail.
The function chain_fsetxattr may leak attributes when used to override
an existing attribute. This leak is not tested or fixed, it is just
discussed in http://marc.info/?l=ceph-devel&m=136027076615853&w=4
If the file system in which the tests are run does not support extended
attributes, the tests are not run. The detection uses the same logic as
the one implemented in FileStore::_detect_fs
The output of the tests are silenced to reduce the output when testing
assertions ( except for the dout_emergency function which cannot be
controlled).
Greg Farnum [Thu, 7 Feb 2013 18:25:33 +0000 (10:25 -0800)]
mds: rename mds_traceless_replies to mds_inject_traceless_reply_probability
Sage pointed out we should try for consistent naming on these debug
options, and this option is like our other inject_[x] stuff.
While we're here, make the config option comment a bit clearer.
Greg Farnum [Thu, 7 Feb 2013 00:35:49 +0000 (16:35 -0800)]
client: trigger the completion in _flush when short-cutting
We missed a shortcut return from _flush() when doing e9a6694d0151b79c3a3b44cee5df8e3d4dcbfc2c, so _fsync() calls
were failing. To fix, if _flush discovers there's nothing to flush,
trigger the completion by calling onfinish->finish().
Fixes #4038
Signed-off-by: Greg Farnum <greg@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
Greg Farnum [Wed, 6 Feb 2013 21:32:53 +0000 (13:32 -0800)]
mds: add "mds traceless replies" debug option
This option specifies (in the range 0-1) the percentage of modifying
operations that should be responded to without including a trace
for the dentries.
In order to implement it, we add a "modify" parameter to
set_trace_dist(), and the callers fill that with
mdr->req->may_write().
Signed-off-by: Greg Farnum <greg@inktank.com> Reviewed-by: Sam Lang <sam.lang@inktank.com>
Greg Farnum [Wed, 6 Feb 2013 18:22:06 +0000 (10:22 -0800)]
test: fix Throttle unit test.
A bunch of these are slightly racy so they're enclosed in loops. This
particular one, though, changes the Throttle state in ways that
invalidate the asserts. To fix, reset the state before commencing a
rerun.
Danny Al-Gaaf [Wed, 6 Feb 2013 11:17:02 +0000 (12:17 +0100)]
rbd-fuse: fix for loop in open_rbd_image()
Remove uninitialized usage of 'int i' as i++ from 'for' loop.
The variale 'i' is never used in this loop and initialized
before the next use with 0.
Related warning from clang++:
rbd_fuse/rbd-fuse.c:141:36: warning: variable 'i' is uninitialized
when used here [-Wuninitialized]
for (im = rbd_images; im != NULL; i++, im = im->next) {
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
Fix "out-of-line declaration of a member must be a definition
[-Wout-of-line-declaration]". Remove ceph::crypto::shutdown() outside
the crypto related ifdef's. Without nss or cryptopp configure will
fail anyways.
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
Yehuda Sadeh [Thu, 17 Jan 2013 21:06:14 +0000 (13:06 -0800)]
rgw: create a separate logrotate file for radosgw
Fixes: #3813
Since radosgw package is separate from the ceph package,
it also needs to have a separate logrotate. The default
path for radosgw log is changed to /var/log/radosgw,
and it now has a different logrotate script.
Updating both deb and rpm packaging.
Loic Dachary [Sun, 20 Jan 2013 11:35:10 +0000 (11:35 +0000)]
Relax Throttle::_reset_max conditions and associated unit tests
Removes a condition in Throttle::_reset_max by which the waiting queue is only
Signal()ed if the new maximum is lower than the current maximum.
There is no evidence of a use case where such a restriction would be
useful. In addition waking up a thread when the maximum increases
gives it a chance to immediately continue the suspended process
instead of waiting for the next put().
Create a new test file covering 100% of src/Throttle.{cc,h} lines of code.
The following methods are tested:
* Throttle::Throttle with and without a maximum
* Throttle::~Throttle when each pending Cond is deleted
* Throttle::take
* Throttle::get when updating the maximum ( lower or higher ),
when going to sleep waiting for the count to lower under
the maximum, when going to sleep because another thread is
already asleep waiting
* Throttle::get_or_fail when there is no maximum,
when requesting a count that is larger than the maximum, either
when the current value is under the maximum or above the maximum.
* Throttle::wait when used to reset the maximum and wake up
another thread asleep waiting
All asserts checking the arguments sanity are exercised ( negative argument
for Throttle::take etc. ).
Adds the LGPLv2+ licensing terms to COPYING along with the others.
Adds a Contributors section to the AUTHORS file.
Notes:
Testing asserts outputs verbose error messages that should be silenced
but it does not seem possible.
Yehuda Sadeh [Thu, 13 Dec 2012 23:52:34 +0000 (15:52 -0800)]
rgw: key indexes are only link to user info
Instead of keeping multiple copies of the user info,
we just treat the key index as a pointer to the actual
user info (indexed by uid). This helps with two issues:
first, it scales better as we don't need to update the
entire set of keys whenever we make any change. Second,
it helps with the uid index atomicity.
One point to keep in mind is that both the links and the
info can be cached, so effect on performance is minimal.
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com> Reviewed-by: caleb miles <caleb.miles@inktank.com>
Dan Mick [Thu, 31 Jan 2013 01:33:09 +0000 (17:33 -0800)]
Validate format strings for CLS_ERR/CLS_LOG
cls_log needed __attribute__((format(printf..)) to allow the compiler
to crosscheck format strings and arguments. After adding that, there
needed to be a bunch of fixups for %ll, and a few changes for missing
arguments, etc. uncovered by the checking.
Fixes: #3970 Signed-off-by: Dan Mick <dan.mick@inktank.com> Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
Alex Elder [Thu, 31 Jan 2013 12:47:59 +0000 (06:47 -0600)]
qa: update the rbd/concurrent.sh workunit
A few changes, now that a few rbd problems have been fixed.
First, the more substantive changes:
- Generate a source file, and compare what's read back from rbd
devices with the content of that file.
- Write to the rbd device such that the written data spans
an (assumed 4 MB) rbd object boundary, as well as starting
and ending on non-page-aligned offsets.
- Perform multiple reads on rbd devices: entirely within a range
before any written data; beginning before but ending within
written data; the exact written data (and validating what's
read); beginning within written data but ending after it;
reading after written data but within a written rbd object;
and reading from an unwritten rbd object.
- Have the sleep between iterations provide a non-integer value
to avoid zero (or quantized) delays.
Also, some a little less substantive (but possibly informative):
- Don't run with "set -x". It produces a ton of noise that is
not useful for this test. This is an exerciser, looking
really for system crashes during concurrent activity, and
knowing which commands were (concurrently) active isn't going
to help much in diagnosis.
- Create two more directories, used to track the degree of
concurrency (more or less) and the highest rbd id consumed.
Files whose names are numbers are touched in each, and the
highest at the end is the highest during the run. This gets
around issues passing environment info from sub-shells to the
top-level shell. As a bonus, it offers a better chance of
avoiding problems due to concurrent update.
- NAMESDIR is renamed NAMES_DIR, and it (and the others) is
set up in the setup() function.
- Increase the concurrency and iteration counts.
- Move the default definitions before the ceph secrets stuff
Danny Al-Gaaf [Wed, 30 Jan 2013 17:52:24 +0000 (18:52 +0100)]
PGMap: fix -Wsign-compare warning
Fix -Wsign-compare compiler warning:
mon/PGMap.cc: In member function 'void PGMap::apply_incremental
(CephContext*, const PGMap::Incremental&)':
mon/PGMap.cc:247:30: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>