Commit Graph

25390 Commits

Author SHA1 Message Date
Josh Durgin
33d1a2fc88 librbd: return -ENOENT from diff_iterate when the snap doesn't exist
This is a bit more helpful than -EINVAL.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-04-01 08:56:07 -07:00
Josh Durgin
6a04a7fa56 rbd: initialize random number generator for bench-write
Without this, the same seed is used each time, so multiple runs
of bench-write with the same parameters have the same I/O pattern.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-04-01 08:56:07 -07:00
Josh Durgin
c680531e07 librbd: change diff_iterate interface to be more C-friendly
Use int instead of bool for the callback, and make it represent
whether the data exists, rather than the opposite, since callers
are likely to test for whether it's data instead of whether its zeroes.

Change the return value to 0, since an int64_t will wrap around
for large reads, and there's no value in reporting the length
read when it will always be the length requested clipped to the
size of the image.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-04-01 08:56:07 -07:00
Josh Durgin
8a1cbf3e74 rbd: remove alway-true else condition in import-diff
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-04-01 08:56:06 -07:00
Josh Durgin
d86fb04f48 rbd: make diff banner length depend on the banner
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-04-01 08:56:06 -07:00
Neil Levine
c499caf508 mkcephfs: warn that mkcephfs is deprecated in favor of ceph-deploy
Signed-off-by: Neil Levine <neil.levine@inktank.com>
2013-04-01 08:54:30 -07:00
Sage Weil
3b5f663f11 Merge pull request #178 from ceph/wip-client
Fix client with cache disabled, and a use-after-free

Reviewed-by: Sam Lang <sam.lang@inktank.com>
2013-04-01 08:48:45 -07:00
Joao Eduardo Luis
677867d088 qa: workunits: mon: test 'config-key' store
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
2013-04-01 16:11:01 +01:00
Josh Durgin
c0e5c22dfd rbd: fail import-diff if we reach the end of the stream sooner than expected
safe_read() just protects against EINTR, and may return less data than
requested if it reaches the end of the file. Use safe_read_exact() to
make sure we get the right amount of data.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-03-31 23:32:42 -07:00
Josh Durgin
09898ffdd9 rbd: complete progress for import-diff from stdin
The diff format gives us a size, so unlike a normal import, we do update progress.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-03-31 23:32:42 -07:00
Josh Durgin
a0fca0807c rbd: fix else style in import-diff
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-03-31 23:32:42 -07:00
Josh Durgin
2ec87e66a5 rbd: update progress as a diff is exported
This will be jumpy since changed extents probably aren't evenly
distributed, but it's better than nothing.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-03-31 23:32:41 -07:00
Josh Durgin
f0ddf6cc77 rbd: remove unused argument from do_diff()
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
ef4938594a rbd: fix size change output
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
88706ab89c rbd: send progress info to stderr, not stdout
This avoids interfering when export is sent to stdout.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
325a3372cb rbd: include 'diff' command in man page
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
64a202a7ad rbd: update man page for import-diff and export-diff
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
f67f62abab rbd: prevent import-diff if start snapshot is not already present
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
9946c69cd1 rbd: fail import-diff if end snap already exists
This will prevent a user from inadvertantly reapplying a diff twice.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
5b0c68b928 doc/dev/rbd-diff: specify that metadata records come before data
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
3694968a05 librbd: implement image.snap_exists()
This is a much more convenient way to tell if a snapshot already exists.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
c5bd978a1d librados: move snap_set_diff to librados/
This is most closely related to the librados list_snaps API; move it there.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
6af769a16f librados: cleanly define SNAP_HEAD, SNAP_DIR constants
We were using the internal CEPH_NOSNAP and CEPH_SNAPDIR constants, and
defining a clone_info_t::HEAD (with a different value).  The docs were
referrring to the internal constant names.

Instead, define librados constants (C and C++) with the same values as the
internal types.

Note that this changes the clone_info_t::HEAD value from -1 to -2 so that
it now matches the internal type.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
10dc0ad09f librados: document list_snaps
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
be8927f598 librbd: drop unused elapsed calc for diff_iterate
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
f0c9a200ec librbd: diff_iterate fromsnapname after the end snap is also invalid
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
a69532e864 librbd: document diff_iterate in header
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
d0baadb9d3 librbd: uint64_t len for diff_iterate
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
7bbaa71a56 doc/dev/rbd-diff: update incremental file format
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
44e295a3cc qa: rbd/diff_continuous.sh: use non-standard striping
Exercise the striping arithmetic by using non-standard striping that
varies between the parent and child.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
39689fea49 librbd: fix diff_iterate arithmetic for non-standard striping
This code is confusing because we are moving back and forth between
image offsets, "buffer" offsets (image offsets relative to off), and
object offsets.  Fix the math.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
f2b0880a89 qa: rbd/diff_continuous.sh: base test off a clone
Get a bit of coverage on clones by starting with a clone.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
fc3f4fda76 rbd: implement simple 'diff' command
Report extents allocated/changed, and whether they contain data or zeros.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
4d02e17f36 librbd: handle diff from clone
If we have a parent image, and the reference is from snap 0 (beginning of
time) we need to look at the diff on the parent from the beginning of time
and report that when we get an ENOENT.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
186ddda58c rbd: send import debug noise to dout, not stdout
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:41 -07:00
Sage Weil
58c2dedded qa: add rbd/diff_continuous.sh stress test
Stress test that does io on an image while we are mirroring a diff from
earlier snaps to a second copy.  At the end, verify that all snaps have
matching content.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
e7167433ae rbd: implement 'export-diff' and 'import-diff' commands
Export a diff of an image from a previous snapshot to a file (or stdout).

Import a diff and apply it to an image, and then create the ending
snapshot.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
cf7d13a7e9 rbd: add --io-pattern <seq|rand> option to bench-write
Write to random offsets instead of sequentially.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
0296c7cdae librbd: implement diff_iterate
Implement a diff_iterate() method that will iterate over an image and
report which extents vary between two snapshots (or a snapshot and the
head).  The callback gets an extent and a flag indicating whether it is
full of data or is known to be zero in the ending snapshot.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
6db5109127 librados: expose snapset seq via list_snaps
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
ebed000014 osdc/Objecter: prval optional for listsnaps
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
4ae977435c osd: fix error codes for list-snaps
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
941cfc26a0 osd: fix clone snap list for list-snaps
We need to return the list of snaps that each clone is defined for, not
the list of snaps we know may or may not exist globally over a similar
interval.  This requires looking at the clone's obc, unfortunately.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
ceee218fd5 osd: wait for all clones on SNAPDIR requests
Wait for all clones to be present.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
556d33442f osd: direct reads on SNAPDIR to either head or snapdir
The list_snaps operation needs to look at the SnapSet, and is logically
querying all revisions of the object.  Make requests to SNAPDIR be
read-only, and grab the head or snapdir obc transparently (whichever one
exists).  This allows us to list snaps when, say, the head does not
exist, but there are in fact snaps.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
b64bb5f860 osd: do not include snaps with head on list_snaps()
If there is a sequence of snaps 1, 2, 3, 4, 5, and we have a clone
2 with [1,2], and the head reflects content at snap times [3,4,5], then
the snap_list should return

 clone 2 snaps [1,2]
 head snaps
 seq 2

because it never saw a write after snap 2, and therefor has the same
content currently as it did in snaps 3,4,5.  If the SnapSet on the
object lists snaps 3,4,5, and the head exists, it actually means the
object was deleted between 2 and 3, and was recreated after 5:

 clone 2 snaps [1,2]
 head snaps []
 seq 5

The key to telling the two situations apart is the seq number on the
SnapSet (now included in the list_snaps reply) that tells us when the
last update was.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
01b74209fb osd: clean up some whitespace
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
0074228911 osd: include SnapSet seq in the list snaps response
It is important to know the latest seq that the object has seen in order
to tell if a response like

 clone 2 snaps=[1,2]
 clone head snaps=[]

was untouched before a hypothetical snap 3, or deleted prior to snap 3,
and then recreated+modified after.

Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
fa5206ce9b osd: make LIST_WATCHERS and LIST_SNAPS print nicely for OSDOp
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00
Sage Weil
849a45c67f strings: add 'list-watchers' to MOSDOp strings
Signed-off-by: Sage Weil <sage@inktank.com>
2013-03-31 23:32:40 -07:00