Commit Graph

22607 Commits

Author SHA1 Message Date
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
Samuel Just
dccf6ee4d5 ceph-osd: put g_ceph_context before exit
Signed-off-by: Samuel Just <sam.just@inktank.com>
2012-11-30 20:57:04 -08:00
Samuel Just
49f32cee64 ReplicatedPG: only increment active_scrub on primary for final push
We only queue the _applied_recovered_object callback on the primary for the
final push.  It is this callback which decrements active_pushes.  It's ok to
not increment active_pushes for the intermediate pushes since these only affact
a temp file.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2012-11-30 14:04:53 -08:00
Joao Eduardo Luis
494711e6c9 mon: PaxosService: cancel proposal timer after election
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
2012-11-30 09:37:07 -08:00
David Zafman
dc93132d8c logrotate: fix rotation
Fixes: #3554
Always reload with Upstart because in some configs the init.d script doesn't work

Signed-off-by: David Zafman <david.zafman@inktank.com>
2012-11-29 18:18:13 -08:00
Sage Weil
77711ddee3 Merge remote-tracking branch 'gh/wip_next_bugs' into next 2012-11-29 15:47:26 -08:00
Sage Weil
ef39773c18 Merge remote-tracking branch 'gh/wip-mon-osd-create-fix' into next 2012-11-29 15:34:32 -08:00
Yehuda Sadeh
6a69083dce radosgw-admin: close storage before exit
Fixes: #3560
This will remove watches off notification objects.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
2012-11-29 15:33:22 -08:00
Sam Lang
7d27e2e95c client: Fix for #3490 and config option to test
If the mds revokes our cache cap, and we follow
the _read_sync() path, on a zero-byte file the
osd returns ENOENT.  We need to replace ENOENT
with a return of 0 in this case.

Signed-off-by: Sam Lang <sam.lang@inktank.com>
2012-11-29 15:04:06 -08:00
Sam Lang
f9056f5bd7 test/libcephfs: Test reading an empty file
This tests a bug (#3490) in the Client::_read_sync
codepath, and should be run with conf->client_read_sync_always
set to true.

Signed-off-by: Sam Lang <sam.lang@inktank.com>
2012-11-29 15:04:06 -08:00
Samuel Just
5c8cbd2820 PG: scrubber.end should be exactly a boundary
Let scrubber.end be (foo, HEAD, 10) where the oid is foo , HEAD is the
snap, and 10 is the hash and scrubber.begin similarly be (bar, 5, 1).

After choosing to scan [(bar, 5, 1), (foo, HEAD, 10)), we block writes
on that interval.

1) A write might then come in for foo (which isn't blocked) which
creates a new snap (foo, 400, 10) which happens to fall in the interval.
This will result in a crash in _scrub() when it attempts to compare
clones since it will get (foo, 400, 10) but not the head object
(foo, HEAD, 10).

2) Alternately, the write from 1) has already happened.  When we scan
the log, we find 34'10 and 34'11 are the clone operation creating
(foo, 400, 10) and the modify on (foo, HEAD, 10) respectively.  Both
primary and replica will wait for last_update_applied to be 34'10
before scanning, but last_update_applied will in fact skip to 34'11
since 34'10 and 34'11 happened in the same transaction.  This can
result in IO hanging on the scrubber interval.

Instead, we ensure that scrubber.end is exactly a hash boundary
(min hobject_t a with the specified hash).  No such object can
exist since we don't create objects with empty oids, so no writes
can occur on that object.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2012-11-29 13:57:55 -08:00
Samuel Just
206f39e3b8 ReplicatedPG: remove from snap_collections even without objects to trim
Also, make sure to write_info after updating snap_collections.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2012-11-29 13:51:52 -08:00
Samuel Just
8218d8ac0b OSD: get_or_create_pg return null if pool is gone
Signed-off-by: Samuel Just <sam.just@inktank.com>
2012-11-29 13:51:52 -08:00
Samuel Just
f4f93f82e5 OSD: history.last_epoch_started should start at 0
history.last_epoch_started marks a lower bound on the last epoch at
which the pg went active.  As with info.last_epoch_started, it should be
0 prior to the first activation.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2012-11-29 13:51:52 -08:00
Samuel Just
e2c4e2f63b PG: maintain osd local last_epoch_started for find_best_info
In order to proceed with peering, we need an osd with a log including
the last commit sent to a client.  This translates to the oldest
last_update from the infos of the most recent acting set to go active.
history.last_epoch_started gives us a lower bound on the last time the
entire acting set persisted authoratative logs/infos.  However, it
doesn't indicate anything about the info/log on the osd which sent it.
Thus, we will maintain an osd local info.last_epoch_started to determine
which osds were actually active (and thus have the required log
entries).  The max info.last_epoch_started in the prior set gives us an
upper bound on the last interval during which writes occurred.  The min
last_update among the infos with that last_epoch_started must therefore
be an upper bound on the oldest operation which clients consider
committed.  Any osd with an info.last_updated past that version must be
sufficient.

The observed bug was there was an empty pg info with a
last_epoch_started at the most recent interval which pushed
min_last_update_acceptable to eversion_t().  There were two down osds,
but peering proceeded since the backfill peer did survive.  However,
its info was later disregarded due to incomplete.  An empty osd was
then chosen as the best_info since it's last_update was equal to
min_last_update_acceptable.  This caused the contents of the pg to be
lost.

Signed-off-by: Samuel Just <sam.just@inktank.com>
2012-11-29 13:51:52 -08:00
Samuel Just
82517f1bf0 hobject_t: make max private
Signed-off-by: Samuel Just <sam.just@inktank.com>
2012-11-29 13:51:51 -08:00
Greg Farnum
e58008e0c0 Merge branch 'wip-mon-store-errorcheck' into next
Reviewed-by: Joao Luis <joao.luis@inktank.com>
2012-11-29 13:23:26 -08:00
Yehuda Sadeh
b0b8bfbdec Merge remote-tracking branch 'origin/wip-rgw-leak' into next
Conflicts:
	src/rgw/rgw_main.cc

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
2012-11-29 13:07:09 -08:00
Joao Eduardo Luis
079dd19044 mon: Monitor: don't allow '+' or '-' prefixed values on parse_pos_long()
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
2012-11-29 21:03:05 +00:00
Joao Eduardo Luis
c6cc476f18 mon: OSDMonitor: return -EINVAL on not-a-uuid during 'osd create'
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
2012-11-29 21:01:46 +00:00
Greg Farnum
24d61fa419 mon: add WARN_UNUSED_RESULT to the MonitorStore functions that return error codes
Signed-off-by: Greg Farnum <greg@inktank.com>
2012-11-28 16:28:58 -08:00
Greg Farnum
c762f91a51 mon: remove the silly write_bl_ss write_bl_ss_impl distinction
It was introduced at the same time as all these unchecked return codes,
but I can't tell why.

Signed-off-by: Greg Farnum <greg@inktank.com>
2012-11-28 16:28:58 -08:00
Greg Farnum
399f269d4f mon: convert store users with unchecked return codes to just assert on issues
This will make them much more noticeable and reduce the odds of something
writing data which assumes the previous op succeeded.

Signed-off-by: Greg Farnum <greg@inktank.com>
2012-11-28 16:28:58 -08:00
Greg Farnum
ab312f8deb mon: update Paxos::read()'s successful read check
It was returning success if it got back an error code; don't do that!

Signed-off-by: Greg Farnum <greg@inktank.com>
2012-11-28 16:28:58 -08:00
Greg Farnum
3fe7c6cbe0 mon: add new get_bl_[sn|ss]_safe functions
These functions are like the non-safe versions, but assert that
there were no disk errors and have void return types. Change a
bunch of callers who weren't checking the return code to use
these variants instead.
(Unfortunately we can't make them default safe because several of
the callers depend on getting back the length, and are perfectly happy
with ENOENT producing a 0 return value.)

Signed-off-by: Greg Farnum <greg@inktank.com>
2012-11-28 16:28:51 -08:00
Greg Farnum
60f60ff738 mon: In MonitorStore, wrap all uses of ::close and assert success
Signed-off-by: Greg Farnum <greg@inktank.com>
2012-11-28 16:28:44 -08:00
Alex Elder
dd3a24a647 create qa/workunits/rbd/map-unmap.sh
This adds a bash script that creates an rbd image, then repeatedly
maps and unmaps it for a specified duration (5 minutes by default).

Signed-off-by: Alex Elder <elder@inktank.com>
2012-11-28 17:22:49 -06:00
Sage Weil
78286b1403 log: 10,000 recent log entries
This is what we were (wrongly) doing before, so there are no memory
utilization surprises.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-28 13:00:36 -08:00
Sage Weil
4de7748b72 log: fix log_max_recent config
<facepalm>

Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-28 12:59:43 -08:00
Greg Farnum
39b93f5898 mon: check all uses of fsync in the MonitorStore for errors
This can sometimes return errors since it's a storage access, and
we're pretty sure ignoring it is the cause of a broken store we've seen.

Signed-off-by: Greg Farnum <greg@inktank.com>
2012-11-28 12:35:11 -08:00
Dan Mick
80c506d4b9 rbd: fix import from stdin, add test
Make import work; do I/O in image native block size.
Note: creating sparse images is not currently attempted; could
scan for runs of zeros and write discontiguous chunks to image.

Fixes: #3503
Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit c99d9c3ae7)
2012-11-28 11:45:31 -08:00
Dan Mick
fcebe04801 rbd: allow export to stdout, add tests
Fixes: #3502
Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit a738f44bc4)
2012-11-28 11:45:27 -08:00
Sage Weil
a176800396 mon: fix compiler warning
signed/unsigned comparison

Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-28 11:11:53 -08:00
Sage Weil
43ef8c10ba mon: do not crash on invalid 'mon tell N ...' target
Fixes: #3545
Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-27 20:51:03 -08:00
Sage Weil
cf2a045402 config: make $pid a metavariable
Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-27 17:29:11 -08:00
Sage Weil
aa37fe769d test_rados_api_misc: fix TMAPPUT sorting test
Several things wrong here.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-27 16:55:25 -08:00
Sam Lang
a1e08684f5 README: add the libboost-thread-dev dep to the list
Signed-off-by: Sam Lang <sam.lang@inktank.com>
2012-11-27 17:21:40 -06:00
Sage Weil
533a6d042d Merge branch 'wip-mds-next' into next
OSD bits Reviewed-by: Sam Just <sam.just@inktank.com>
MDS bits Reviewed-by: Sage Weil <sage@inktank.com>
2012-11-27 14:13:09 -08:00
Sage Weil
10b68b2e1a osd: detect (some) misordered ondisk tmaps
Detect a misordered ondisk tmap... if we are already decoding it.  We still
leave the trailing bits unchecked.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-27 14:13:00 -08:00
Sage Weil
bc77e528a0 osd: verify TMAPPUT data is sorted
The MDS may try to write unsorted data; make sure it is sorted before
we write it.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-27 14:13:00 -08:00
Sage Weil
29fae494d0 osd: do not ENOENT on missing key on remove
The MDS may include RM ops in a tmap update for items that were already
removed: after restarting and replaying the journal, it doesn't know
which dentries were previously committed and which were not.

No other (known) users care about the error code.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-27 14:13:00 -08:00
Sage Weil
8e91d00b52 osd: tolerate misordered TMAP updates
The previous tmap implementation requires that the update stream be
sorted or else it will behave erratically (by placing new keys in the
map out of order).  This can cause very strange failures: reads may
appear to return the correct result initially, but once intervening
keys are remove they will not... depending on how read is implemented
on the client side.

Fix this by doing the optimized updates initially, but falling back to
a slow implementation if an unsorted update is detected.  It is slow,
but such updates are rare.

Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-27 14:13:00 -08:00
Sage Weil
a4439f0fcc osd: move tmapup into a helper
Signed-off-by: Sage Weil <sage@inktank.com>
2012-11-27 14:13:00 -08:00
Dan Mick
919db19426 rbd workunit: Add tests for clones across pools
Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit ece11b0ed9)
2012-11-27 14:06:33 -08:00
Dan Mick
5164075040 rbd workunit: Make "remove_images" silent
Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit 0be9b15b79)
2012-11-27 14:06:30 -08:00
Dan Mick
ca5549e8c9 rbd workunit: Add tests for cross-pool rename
Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit a96ede944f)
2012-11-27 14:06:27 -08:00
Dan Mick
bbd343a1d1 rbd: tests for copy with explicit/implicit pool names
Validate change to not assume dest pool == src pool

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit 39180430b9)
2012-11-27 14:06:23 -08:00
Dan Mick
e612afc2c0 rbd: fix import pool assumptions
import allows specifying one image, implicitly or explicitly the
"source" image, even though it's really the destination.  Fix up
the reassignment of 'source' to 'dest', and check for and complain
about specifying two different pools or images for import.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit c219698149)
2012-11-27 14:06:21 -08:00