Commit Graph

22768 Commits

Author SHA1 Message Date
Joao Eduardo Luis
bc6f726825 mon: PGMonitor: erase entries from 'creating_pgs_by_osd' when set is empty
This patch avoids sending empty MOSDPGCreate's every tick.

Fixes: #3571

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
2012-12-07 04:16:15 -08:00
Joao Eduardo Luis
e1c27fe178 mon: Monitor: rework 'paxos' to a list instead of a vector
After adding the gv patches, during Monitor::recovered_leader() we started
waking up contexts following the order of the 'paxos' vector. However,
given that the mdsmon has a forgotten dependency on the osdmon paxos
machine, we were incurring in a situation in which we proposed a value
through the osdmon before creating a new pending value (but by being
active, the mdsmon would go through with it nonetheless).

This is easily fixed by making sure that the mdsmon callbacks are only
awaken *after* the osdmon has been taken care of.

Fixes: #3495

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
2012-12-07 04:04:14 -08:00
Sage Weil
58f6798f3d Merge branch 'testing' into next 2012-12-07 04:00:22 -08:00
Samuel Just
58890cfad5 librados: watch() should set the WRITE flag on the op
This caused a bug where the watch operation bypassed the is_degraded()
check in the write path and the repop got sent to the replica where the
replica crashed due to the is_missing() assert in sub_op_modify.

Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
2012-12-06 16:56:41 -08:00
Samuel Just
f2914af52e HashIndex: fix list_by_hash handling of next->is_max()
get_path_str() should not handle hobject_t::get_max().  get_path_str()
now asserts that the passed object is not max and the callers now check
for is_max().  This caused HashIndex.cc to incorrectly scan an entire
collection before returning no objects rather than scanning the top
level and returning no objects.  It did not actually list_by_hash to
return an incorrect answer, however.

Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
2012-12-06 16:56:25 -08:00
Dan Mick
0c01094972 rbd: remove block-by-block messages when exporting
Signed-off-by: Dan Mick <dan.mick@inktank.com>
2012-12-06 15:58:19 -08:00
Josh Durgin
ca1a4db457 release: add note about 'ceph osd create' syntax
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2012-12-06 12:25:39 -08:00
Sam Lang
214c7a1705 client: Allow cap release timeout to be configured
The delay for releasing an inode's capability is
hardcoded to 5 seconds.  This patch takes the timeout
value from a config parameter, which defaults presently
to 5 seconds.

Signed-off-by: Sam Lang <sam.lang@inktank.com>
2012-12-06 05:30:17 -08:00
Sage Weil
0a137d76bd mkcephfs: fix fs_type assignment typo
Reported-by: Matthew Via <via@matthewvia.info>
Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-06 05:27:41 -08:00
Sage Weil
4c31598e0a upstart: fix radosgw upstart job
Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-06 05:26:11 -08:00
Sage Weil
47266cdaec upstart: rename ceph -> ceph-all
This avoids a conflict with the sysvinit job.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-06 05:26:01 -08:00
Dan Mick
3e98d1af4d Merge branch 'testing' into next 2012-12-05 18:18:41 -08:00
Dan Mick
b7b724299e rbd: update manpage for import/export
Signed-off-by: Dan Mick <dan.mick@inktank.com>
2012-12-05 18:17:35 -08:00
Dan Mick
e9653f27de librbd: hold AioCompletion lock while modifying global state
C_AioRead::finish needs to add in each chunk of a partial read
request to the 'partial' map in the AioCompletion's state
(in destriper, of type StripedReadResult).  That map is global
and must be protected from simultaneous access.  Use the
AioCompletion lock; could create a separate lock if contention is an
issue.

Fixes: #3567
Signed-off-by: Dan Mick <dan.mick@inktank.com>
(cherry picked from commit a55700cc0a)
2012-12-05 17:38:05 -08:00
Dan Mick
b2ccf11d3a librbd: handle parent change while async I/Os are in flight
During a test_librbd_fsx run including flatten, ImageCtx->parent
was being dereferenced while null.  Between the time the parent
overlap is calculated and the time the guard+write completes
with ENOENT and submits the copyup+write, the parent image
could have changed (by resize) or been made irrelevant (by
child flatten) such that the parent overlap is now incorrect.

Handle "no parent" by just sending the copyup+write; the copyup
part will be a no-op.  Move to WRITE_FLAT state in this case
because there's no more child to deal with.

Handle "overlap changed" by recalculating overlap before
reading parent data; if none is left, don't read, but rather
just clear m_object_image_extents, in which case the copyup
will again be a no-op because it will be of zero length.
However we still have a parent, so stay in WRITE_COPYUP state
and come back through as usual.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Fixes: #3524
(cherry picked from commit 41e16a3b40)
2012-12-05 17:38:05 -08:00
Dan Mick
64ecc87057 Striper: use local variable inside if() that tested it
Signed-off-by: Dan Mick <dan.mick@inktank.com>
(cherry picked from commit 917a6f2963)
2012-12-05 17:38:05 -08:00
Dan Mick
a55700cc0a librbd: hold AioCompletion lock while modifying global state
C_AioRead::finish needs to add in each chunk of a partial read
request to the 'partial' map in the AioCompletion's state
(in destriper, of type StripedReadResult).  That map is global
and must be protected from simultaneous access.  Use the
AioCompletion lock; could create a separate lock if contention is an
issue.

Fixes: #3567
Signed-off-by: Dan Mick <dan.mick@inktank.com>
2012-12-05 17:05:18 -08:00
Dan Mick
41e16a3b40 librbd: handle parent change while async I/Os are in flight
During a test_librbd_fsx run including flatten, ImageCtx->parent
was being dereferenced while null.  Between the time the parent
overlap is calculated and the time the guard+write completes
with ENOENT and submits the copyup+write, the parent image
could have changed (by resize) or been made irrelevant (by
child flatten) such that the parent overlap is now incorrect.

Handle "no parent" by just sending the copyup+write; the copyup
part will be a no-op.  Move to WRITE_FLAT state in this case
because there's no more child to deal with.

Handle "overlap changed" by recalculating overlap before
reading parent data; if none is left, don't read, but rather
just clear m_object_image_extents, in which case the copyup
will again be a no-op because it will be of zero length.
However we still have a parent, so stay in WRITE_COPYUP state
and come back through as usual.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Fixes: #3524
2012-12-05 17:05:18 -08:00
Dan Mick
917a6f2963 Striper: use local variable inside if() that tested it
Signed-off-by: Dan Mick <dan.mick@inktank.com>
2012-12-05 17:05:18 -08:00
Josh Durgin
2a5549cc0c qa: add script for running xfstests in a vm
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2012-12-05 15:54:49 -08:00
Samuel Just
a83d13a3b7 OSD: ignore queries on now deleted pools
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
2012-12-05 11:33:26 -08:00
Greg Farnum
4cdc30b943 Merge remote-tracking branch 'origin/wip-mds' into next
Reviewed-by: Sage Weil <sage@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
2012-12-04 16:48:19 -08:00
Sage Weil
3ef741ac2d Merge branch 'wip-filestore' into next
Reviewed-by: Sam Just <sam.just@inktank.com>
2012-12-04 15:05:18 -08:00
Sage Weil
f3bd3564fa Merge branch 'wip-msgr-delay-queue' into next 2012-12-04 14:52:22 -08:00
Yan, Zheng
727c37a712 mds: journal remote inode's projected parent
Server::_rename_prepare() adds remote inode's parent instead of
projected parent to the journal. So during journal replay, the
journal entry for the rename operation will wrongly revert the
remote inode's projected rename. This issue can be reproduced by:

 touch file1
 ln file1 file2
 rm file1
 mv file2 file3

After journal replay, file1 reappears and directory's fragstat
gets corrupted.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
2012-12-04 14:50:14 -08:00
Yan, Zheng
3f69f7290d mds: don't create bloom filter for incomplete dir
Creating bloom filter for incomplete dir that was added by log
replay will confuse subsequent dir lookup and can create null
dentry for existing file. The erroneous null dentry confuses the
fragstat accounting and causes undeletable empty directory.

The fix is check if the dir is complete before creating the bloom
filter. For the MDCache::trim_non_auth{,_subtree} cases, just do
not call CDir::add_to_bloom because bloom filter is useless for
replica.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
2012-12-04 14:50:11 -08:00
Samuel Just
0756052cff PG: remove last_epoch_started asserts in proc_primary_info
These asserts are valid for a uniform cluster, but they won't hold
for a replica running a version without the info.last_epoch_started
patch.

Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
2012-12-04 11:41:05 -08:00
Yan, Zheng
2ba9c870b0 mds: journal remote inode's projected parent
Server::_rename_prepare() adds remote inode's parent instead of
projected parent to the journal. So during journal replay, the
journal entry for the rename operation will wrongly revert the
remote inode's projected rename. This issue can be reproduced by:

 touch file1
 ln file1 file2
 rm file1
 mv file2 file3

After journal replay, file1 reappears and directory's fragstat
gets corrupted.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
2012-12-04 05:35:03 -08:00
Yan, Zheng
8cd8f2504a mds: don't create bloom filter for incomplete dir
Creating bloom filter for incomplete dir that was added by log
replay will confuse subsequent dir lookup and can create null
dentry for existing file. The erroneous null dentry confuses the
fragstat accounting and causes undeletable empty directory.

The fix is check if the dir is complete before creating the bloom
filter. For the MDCache::trim_non_auth{,_subtree} cases, just do
not call CDir::add_to_bloom because bloom filter is useless for
replica.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
2012-12-04 05:29:13 -08:00
Sage Weil
8c2526a770 Merge remote-tracking branch 'gh/wip-mds' into next 2012-12-04 05:27:59 -08:00
Sage Weil
3ace9a7c66 logrotate: do not spam stdout
Avoid anything on stdout that will generate cron emails for people.

Reported-by: Stefan Priebe <s.priebe@profihost.ag>
Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-04 05:25:52 -08:00
Gary Lowell
2eee9e175e Merge branch 'master' of http://github.com/ceph/ceph 2012-12-03 21:31:14 -08:00
Gary Lowell
b5ec1c6766 Merge branch 'next' 2012-12-03 21:29:52 -08:00
John Wilkins
a74a4acf50 doc: Added a striping section for Architecture.
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
2012-12-03 20:48:02 -08:00
Gary Lowell
690f817560 v0.55 2012-12-03 19:08:35 -08:00
Gary Lowell
234cc081ab ceph.spec.in: Add SLES and remove Fedora from debug package list. 2012-12-03 19:06:42 -08:00
Sage Weil
595dd0ec60 Merge branch 'next' 2012-12-03 15:33:29 -08:00
Sage Weil
26045573e8 test_rados_api_misc: fix dup rmmkey test
We now expect ENONET as of 9961640f76
again.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-03 15:33:03 -08:00
John Wilkins
f2c7a60c90 doc: Fixed many hyperlinks, a few typos, and some minor clarifications.
fixes: #3564

Signed-off-by: John Wilkins <john.wilkins@inktank.com>
2012-12-03 12:22:37 -08:00
John Wilkins
a7a3cbf8fc doc: Clarified example for root user.
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
2012-12-03 10:48:10 -08:00
Sage Weil
5bea57bfd0 config: we still want osd_thread_recovery_timeout
Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-03 03:56:15 -08:00
Sam Lang
e686cb14e9 config: Remove unused options
Signed-off-by: Sam Lang <sam.lang@inktank.com>
2012-12-03 03:44:36 -08:00
Sam Lang
6b105ae0b7 client: Fix ceph_mount() when subdir is specified
If a subdirectory is specified to ceph_mount, the
root inode does not have an ino of CEPH_INO_ROOT, so
cwd will fail to ever find root and eventially hits
an assertion in in->get_first_parent().  This fix uses
the inode stored in the root member instead, ensuring
that we stop wherever the mount is rooted.

Signed-off-by: Sam Lang <sam.lang@inktank.com>
2012-12-03 03:44:34 -08:00
Sage Weil
f57a79809c osd: EINVAL on unknown TMAP op code
The old/slow implementation did this, but the optimized version did
not.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-03 03:42:17 -08:00
Sage Weil
4870b43cab mds: use TMAP_RMSLOPPY op when removing dentries
After replay, we don't know if the dentry removal has already been
committed.  Use a sloppy removal so that we succeed even if we are
repeating the operation.

Conveniently, the previous implementation (pre v0.55) silently ignored
tmap op codes it did not understand, which means this new RMSLOPPY will
be interpreted the same as an actual RMSLOPPY.  That means an v0.55
mds can run against an older osd (say, argonaut) without problems.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-03 03:42:17 -08:00
Sage Weil
272e89d913 osd: add TMAP_RMSLOPPY op
Remove a key, but succeed if key already does not exist.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-03 03:42:17 -08:00
Sage Weil
9961640f76 osd: ENOENT on TMAP_RM on non-existent key
This reverts 29fae494d0 and fixes the
alternate implmentation added by 8e91d00b52.
librbd relies the ENOENT return value.

Reported-by: Dan Mick <dan.mick@inktank.com>
Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-03 03:42:17 -08:00
Sage Weil
85574a3622 os/JournalingObjectStore: applied_seq -> max_applied_seq
Rename applied_seq to max_applied_seq, since it is a bound; there may be
seq's < max_applied_seq that are not applied.  This aligns the naming with
max_applying_seq.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-02 14:30:33 -08:00
Sage Weil
528108485b os/FileStore: only wait for applying ops to complete before commit
We can have a large number of operations in the op_wq waiting to be applied
to the fs.  Currently, when we want to commit, we want for them *all* to
apply.  This can take a very long time (the default queue length is 500
operations!).

Instead, mark an Op as started ("applying") when the thread pool actually
starts to apply it.  At that point, only wait for applying ops to complete.
We let any threads with an op seq < max_applying_seq begin as well so that
we have a proper ordering/barrier.  When those flush, applied_seq will ==
max_applying_seq, and that becomes the committing_seq value.

Note that 'applied_seq' is still maintain, but serves no real purpose
except to populate our asserts with sanity checks.  max_applying_seq serves
the purpose applied_seq used to.

This removes once unnecessary source of latency associated with fs
commits.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-02 14:30:32 -08:00
Sage Weil
c10958e4fb osd: fix RepModify when past last_peering_reset
If we apply or commit a RepModify from a prevous perring interval, we need
to free it.

This fixes 'slow request' messages when in fact clients requests are not
delayed, and plugs the related memory leak.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-12-01 22:41:27 -08:00