We weren't setting the 'exists' flag on the bucket entry,
so we ended up not updating the index correctly.
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
Fixes: #3127
Bad variable scoping made it so that specific variables
weren't initialized between suggested changes iterations.
This specifically affected a case where in a specific
change we had an updated followed by a remove, and the
remove was on a non-existent key (e.g., was already
removed earlier). We ended up re-substracting the
object stats, as the entry wasn't reset between
the iterations (and we didn't read it because the
key didn't exist).
backport:argonaut
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
Otherwise importing into another pool when the default pool, rbd,
doesn't exist results in an error trying to open the rbd pool.
Reported-by: Sébastien Han <han.sebastien@gmail.com>
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
If the configure osd journal size is > the block device size, warn, but
do not generate an error and abort startup. This makes it safe to have
a default 'osd journal size' value of, say, 1 GB without fear of breaking
existing clusters with smaller jouranl block devices.
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Tommi Virtanen <tv@inktank.com>
RGWRados::delete_obj() was updated in commit
93218aeab7, but we
failed to update the corresponding RGWCache api.
This commit fixes it.
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
create_pool should only create pool. A pool is not a bucket,
so we don't need to attach any attrs to it. Also, no reason
to make it exclusive.
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
We now have a cluster root pool that should hold the
cluster params. The cluster params are now read from
this object on startup, if object does not exist we
set its defaults and write it.
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
This is required so that we handle both src and dest atomically. We
also set the prefetch flag on the src object, so that we read the
first chunk along with its attrs.
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
For objects with manifest that have a tail, we
copy only the head, and the manifest, and increasing
the reference count on the tail objects.
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
There's no need to set the default pool in set_pool_image_name - this
is done later, in a way that doesn't ignore --pool if --dest-pool
is not specified.
This means --pool and --image can be used with import, just like
the rest of the commands. Without this change, --dest and --dest-pool
had to be used, and --pool would be silently ignored for rbd import.
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
The permission check examines the PG::pool struct. Instead of adding
additional locking there, just push the check into the op thread. This
makes life a bit simpler for the dispatch thread, which is particularly
hot.
Signed-off-by: Sage Weil <sage@inktank.com>
We perform the same check in PG::do_request(), and it is no longer safe to
do this at enqueue_op() time because we aren't holding PG::_lock (only
PG::_qlock).
Signed-off-by: Sage Weil <sage@inktank.com>
Taking the PG::_lock when queuing each op for the worker threads can intorduce
long delays that hold up subsequent operations on other PGs. Use a separate
lock to protect the queuing.
Signed-off-by: Andreas Bluemle <andreas.bluemle@itxperts.de>
Reviewed-by: Sage Weil <sage@inktank.com>