Commit Graph

32027 Commits

Author SHA1 Message Date
Samuel Just
20fe162ece TestPGLog: tests for proc_replica_log/merge_log equivalence
We need the merge_log and proc_replica_log paths to result in the
same missing set.  This patch adds some machinery for specifying
a log merge scenario and comparing both paths to the same correct
result.  This machinery also makes it a bit easier to read and add
new tests.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:17 -08:00
Samuel Just
9a64947ca1 TestPGLog::proc_replica_log: adjust wonky test
This test didn't quite make sense since the divergent entry
cannot be from a newer epoch.  It also didn't quite match the
diagram.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:17 -08:00
Samuel Just
6b6065ab9d TestPGLog::proc_replica_log: adjust to corrected proc_replica_log behavior
Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:17 -08:00
Samuel Just
97f35960a0 TestPGLog::proc_replica_log: add prior_version to some entries
Otherwise, the test logs are invalid.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:17 -08:00
Samuel Just
200e2964ea PGLog::proc_replica_log: _merge_divergent_entries based on truncated olog
We can't merge using the primary's log since we haven't decided whether
to send them a complete log yet.  Thus, merge based on the truncated olog
rather than the primary's log.  This is a consequence of the division
between trimming divergent entries in peering/unfound search and sending
a complete log to actual members of the actingbackfill set in activate().
_merge_divergent_entries on the truncated log and add_next_event() on the
newer entries result in the same missing/log regardless of the order in
which they are performed.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:16 -08:00
Samuel Just
b0357abcae PG.h:PGLogEntryHandler: remove silly cant_rollback logic
Also, we now call rollback in a reverse order, so there is no
need to reverse the entries again.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:16 -08:00
Samuel Just
c99b7e1985 PG,PGLog: replace _merge_old_entry with _merge_object_divergent_entries
The _merge_old_entry structure had trouble distinguishing between the
following cases:

missing: foo, 1,1
merge_old_entry modify 1,1 0,0
merge_old_entry modify 1,2 1,1

and
merge_old_entry modify 1,2 1,1

In the first case, we should end up with foo removed from missing
at the end.  In the second, we need foo added to missing at 1,1.
It's far simpler to present all of the divergent entries for a single
object at once.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:12 -08:00
Samuel Just
86b21e0b78 TestPGLog::merge_old_entry: ne.version cannot be oe.version
Otherwise, it would not be divergent!

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:11 -08:00
Samuel Just
3dc4f10a9a TestPGLog::merge_old_entry: we no longer use merge_old_entry this way
This needs to be replaced with an equivalent test of
_merge_object_divergent_entries.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:11 -08:00
Samuel Just
ff329ac52b TestPGLog:rewind_divergent_log: set prior_version for delete
Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:11 -08:00
Samuel Just
9e43dd6ee3 TestPGLog: ignore merge_old_entry return value
No callers use the merge_old_entry return value.  _merge_divergent_entries
won't have one.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:11 -08:00
Samuel Just
3cc9e2262c TestPGLog: not worth maintaining tests of assert behavior
Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 16:05:11 -08:00
David Zafman
dda72dee70 Merge pull request #1356 from ceph/wip-7458
osd: stray pg ref on shutdown

Reviewed-by: Samuel Just <sam.just@inktank.com>
2014-03-03 14:47:38 -08:00
Samuel Just
a234053d42 OSD,config_opts: log osd state changes at level 0 instead
Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-03 13:53:54 -08:00
Sage Weil
fd9c29b9b0 Merge pull request #1341 from ceph/wip-osd-status
osd: 'status' admin socket command

Reviewed-by: Loic Dachary <loic@dachary.org>
2014-03-03 11:21:11 -08:00
Sage Weil
68890b2009 osd: be a bit more verbose on startup
load_pgs can take a while and it is nice to know what ceph-osd is doing
without cranking up logging.

Did a quick audit of dout(1)'s and making this the default.  This lets us
see basic OSD state changes (load_pgs, boot, active) at the default level.

At this point all osd state changes should be logged at level 1.

Signed-off-by: Sage Weil <sage@inktank.com>
2014-03-03 11:16:31 -08:00
Ilya Dryomov
bd9913ce64 Merge branch 'wip-hint' into firefly
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
2014-03-03 20:37:24 +02:00
Ilya Dryomov
371a80cb0f librbd: prefix rbd writes with CEPH_OSD_OP_SETALLOCHINT osd op
In an effort to reduce fragmentation, prefix every rbd write with
a CEPH_OSD_OP_SETALLOCHINT osd op with an expected_write_size value set
to the object size (1 << order).  Backwards compatibility is taken care
of on the osd side.

"The CEPH_OSD_OP_SETALLOCHINT hint is durable, in that it's enough to
do it once.  The reason every rbd write is prefixed is that rbd doesn't
explicitly create objects and relies on writes creating them
implicitly, so there is no place to stick a single hint op into.  To
get around that we decided to prefix every rbd write with a hint (just
like write and setattr ops, hint op will create an object implicitly if
it doesn't exist)."

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
2014-03-03 20:33:44 +02:00
Ilya Dryomov
8e49bc32c8 FileStore: add option to cap alloc hint size
Add a new config option, filestore_max_alloc_hint_size, to cap
SETALLOCHINT hint size.  The unit is a byte, the default value is
1 megabyte.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
2014-03-03 20:33:44 +02:00
Ilya Dryomov
1f5b796f58 FileStore: introduce XfsFileStoreBackend class
Introduce XfsFileStoreBackend class, currently the only filestore
backend implementing SETALLOCHINT op.  This commit adds a build-time
dependency on libxfs as xfs-specific ioctl (XFS_IOC_FSSETXATTR /
XFS_XFLAG_EXTSIZE) is used to implement the new set_alloc_hint()
method.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
2014-03-03 20:33:44 +02:00
Ilya Dryomov
391257c00e FileStore: refactor FS detection checks a bit
Refactor FS detection checks in FileStore::_detect_fs() so that they
look the same as the ones in FileStore::mkfs().  This is in preparation
for adding XfsFileStoreBackend class.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
2014-03-03 20:33:44 +02:00
Ilya Dryomov
6456802394 osd: add SETALLOCHINT operation
This is primarily for librbd/krbd's benefit and is supposed to combat
fragmentation:

"... knowing that rbd images have a 4m size, librbd can pass a hint
that will let the osd do the xfs allocation size ioctl on new files so
that they are allocated in 1m or 4m chunks.  We've seen cases where
users with rbd workloads have very high levels of fragmentation in xfs
and this would mitigate that and probably have a pretty nice
performance benefit."

SETALLOCHINT is considered advisory, so our backwards compatibility
mechanism here is to set FAILOK flag for all SETALLOCHINT ops.

xfs is hooked up in the subsequent commits.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
2014-03-03 20:33:44 +02:00
Loic Dachary
8982734a1b common: -- support for env_to_vec
When CEPH_ARGS is parsed each side of the -- must be appended to the
corresponding side of the existing argument list. For instance when

   -a -b -- foo bar

is merged with a CEPH_ARGS containing

   -c -d -- frob nitz

it must become

   -a -b -c -d -- foo bar frob nitz

http://tracker.ceph.com/issues/7578 fixes #7578

Signed-off-by: Loic Dachary <loic@dachary.org>
2014-03-03 18:17:01 +01:00
Josh Durgin
28c29c1da7 Revert "ObjectCacher: remove unused target/max setters"
This reverts commit e1a49e5386.
2014-03-03 09:07:30 -08:00
Josh Durgin
d00a92724c Revert "librbd: remove limit on number of objects in the cache"
Disabling this limit causes too much memory usage in some
workloads.

This reverts commit 0559d31db2.
2014-03-03 09:04:00 -08:00
Ray Lv
195d53a7fc rgw: off-by-one in rgw_trim_whitespace()
Fixes: #7543
Backport: dumpling

Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
Signed-off-by: Ray Lv <raylv@yahoo-inc.com>
2014-03-03 08:51:30 -08:00
Babu Shanmugam
37e781739c In database delete Session.flush() has to be called appropriately, to avoid foreign key conflicts in delete() request to the database
Signed-off-by: Babu Shanmugam <anbu@enovance.com>
2014-03-03 21:29:47 +05:30
Babu Shanmugam
f3d64919af Following changes are made
1. Increased the String length for distro, version and os_desc columns in osds_info table
2. Corrected version information extraction in client/ceph-brag
3. Removed the version_id json entry when version list returned for UUID
4. Updated the README to reflect point 3

Signed-off-by: Babu Shanmugam <anbu@enovance.com>
2014-03-03 21:29:36 +05:30
Babu Shanmugam
3cc8b275c5 Modifed the String variables in db.py to be of fixed length to support databases which doesn't have VARCHAR support
Signed-off-by: Babu Shanmugam <anbu@enovance.com>
2014-03-03 21:29:18 +05:30
Babu Shanmugam
30a5bdb82f Added an instruction in 'How to deploy' field in README.md
Signed-off-by: Babu Shanmugam <anbu@enovance.com>
2014-03-03 21:28:56 +05:30
Joao Eduardo Luis
aca6ac343e qa: workunits: cephtool: test 'osd bench' limits
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
2014-03-03 15:28:04 +00:00
Sage Weil
09099c9e4c osd: 'status' admin socket command
Basic stuff, like what state is the OSD in, and what osdmap epoch are
we on.

Signed-off-by: Sage Weil <sage@inktank.com>
2014-03-03 07:03:01 -08:00
Sage Weil
ffdfb846a2 Merge pull request #1327 from dachary/wip-7423
osd: do not attempt to read past the object size

Reviewed-by: Sage Weil <sage@inktank.com>
2014-03-03 06:59:22 -08:00
Joao Eduardo Luis
25a9bd3251 osd: OSD: limit the value of 'size' and 'count' on 'osd bench'
Otherwise, a high enough 'count' value will trigger all sorts of timeouts
on the OSD; a low enough 'size' value will have the same effect for a
high enough value of 'count' (even the default value may have ill effects
on the osd's behaviour).  Limiting these values do not fix how 'osd bench'
should behave, but avoid someone from inadvertently bork an OSD.

Four options have been added and the user may adjust them if he so
desires to play with the OSD's fate:

 - 'osd_bench_small_size_max_iops' [default: 100] defines the amount of
   expected IOPS for a small block size (i.e., <1MB).
 - 'osd_bench_large_size_max_throughput' [default: 100<<20] defines
   the expected throughput in B/s.  We assume 100MB/s.
 - 'osd_bench_max_block_size' [default: 64 << 20] caps the block size
   allowed.  We have defined 64 MB.
 - 'osd_bench_duration' [default: 30] caps the expected duration.  This
   values is used when calculating the maximum allowed 'count', and is
   not enforced as the maximum duration of the operation.  If other IO
   is undergoing, or 'osd bench' is somehow slowed down, 'osd bench' may
   go over this duration.  Adjusting this option does however allow the
   user to specify higher 'count' values for (e.g.) a small block size,
   as the operation is assumed to perform the operation over a longer
   time span.

These options attempt to avoid combinations of dangerous parameters.  For
instance, we limit the block size to 64 MB (by default) so that there is
no temptation to specify a large enough block size, along with a very small
'count', such that the end result is similar to specifying a big count with
a sane block size.

Fixes: 7248

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
2014-03-03 14:41:13 +00:00
Loic Dachary
ef25135e1f erasure-code: test rados put and get
Check that rados put immediately followed by rados get retrieves exactly
the same content.

http://tracker.ceph.com/issues/7423 refs #7423

Signed-off-by: Loic Dachary <loic@dachary.org>
2014-03-03 09:28:56 +01:00
Loic Dachary
0b612d1017 mon: prepend current directory to PATH for tests
So that binaries found in the source directory are always prefered to
installed binaries or scripts.

Signed-off-by: Loic Dachary <loic@dachary.org>
2014-03-03 09:28:55 +01:00
Loic Dachary
eb21bc805d osd: helper to create an OSD for functional tests
Signed-off-by: Loic Dachary <loic@dachary.org>
2014-03-03 09:28:55 +01:00
Loic Dachary
cababd926c mon: add mon-test-helpers.sh to EXTRA_DIST
Signed-off-by: Loic Dachary <loic@dachary.org>
2014-03-03 09:28:55 +01:00
Loic Dachary
927153f5c7 osd: do not attempt to read past the object size
When reading from a replicated pool, trying to read more than the object
size results in a short read that does not go beyond the object size. In
erasure coded pools, objects are padded and the read will return more
bytes than the object actually contains.

http://tracker.ceph.com/issues/7423 fixes #7423

Signed-off-by: Loic Dachary <loic@dachary.org>
2014-03-03 09:28:40 +01:00
Sage Weil
10f87fc604 Merge pull request #1344 from ceph/wip-7539
Wip 7539

Reviewed-by: Sage Weil <sage@inktank.com>
2014-03-02 21:06:01 -08:00
Sage Weil
4e4f4cc160 Merge pull request #1322 from ceph/wip-librados-end-iterator
librados: fix ObjectIterator::operator= for the end iterator

Reviewed-by: Sage Weil <sage@inktank.com>
2014-03-02 12:51:30 -08:00
Sage Weil
32a4e90349 Merge pull request #1337 from ceph/wip-fix-coverity-20140228
Fix different issues found by Coverity

Reviewed-by: Sage Weil <sage@inktank.com>
2014-03-01 19:56:45 -08:00
Sage Weil
4bf32c66c8 Merge pull request #1336 from ceph/wip-nfs-export
Wip nfs export

Reviewed-by: Sage Weil <sage@inktank.com>
2014-03-01 19:54:23 -08:00
Samuel Just
62fd382fbf osd_types,PG: trim mod_desc for log entries to min size
In the event that mod_desc.bl contains pointers into a large
message buffer, we'd otherwise end up keeping around the entire
MOSDECSubOpWrite which created each log entry.

Fixes: #7539
Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-01 14:54:06 -08:00
Samuel Just
d4118e15a3 MOSDECSubOpWrite: drop transaction, log_entries in clear_buffers
Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-01 14:54:06 -08:00
Samuel Just
718cda6e95 TrackedOp: clear_payload as well in unregister_inflight_op
We want to minimize the cost of maintaining the historic ops.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-01 14:54:06 -08:00
Samuel Just
59ff572fd6 OpTracker: clarify that unregister_inflight_op is only called if enabled
The !tracking_enabled branch actually had a leak which was unreachable
since the caller does the check for tracking_enabled.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-01 14:54:06 -08:00
Samuel Just
fc9b8ef06b MOSDOp: drop ops vector in clear_data()
Otherwise, clear_data on MOSDOp will leave essentially
all of the buffers intact.  This is a problem since the
OpTracker mechanism relies on being able to keep the mesage
around without keeping around the data.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2014-03-01 14:53:52 -08:00
Greg Farnum
1ea59f6c42 ReplicatedPG: delete mark_all_unfound_lost transactions after completion
This was a minor memory leak.

Signed-off-by: Greg Farnum <greg@inktank.com>
2014-03-01 14:53:14 -08:00
Loic Dachary
84ba4cf21e Merge pull request #1339 from ceph/wip-7572
mon: fix 'pg dump' JSON output

Reviewed-by: Loic Dachary <loic@dachary.org>
2014-03-01 18:46:50 +01:00