Josh Durgin [Wed, 11 Feb 2015 04:04:17 +0000 (20:04 -0800)]
objecter: protect linger_op last_error and registered fields
These are read and updated in places where using the session lock or
objecter->rwlock wouldn't make sense, so protect them with watch_lock
instead. last_error was already mostly protected by this lock, it was
just missing in tick().
Josh Durgin [Tue, 10 Feb 2015 23:42:24 +0000 (15:42 -0800)]
objecter: remove dead race handling code
The only caller of _get_osd_session() holds rwlock for write, so
_get_session() cannot race. The only caller of _get_session() which
may possibly race is _op_submit(), which handles the race more simply
inline.
Call _get_session() inline in place of _get_osd_session(), and remove
the unused functions _get_osd_session() and
_promote_lock_check_race().
rgw: Swift API. The second way of specifying desirable response format.
OpenStack Object Storage API v1 defines two ways for the client to tell which response format it understands.
Until now RGW looked at query variable 'format' only. This commit implements the second way of setting the format by
providing 'Accept' HTTP-header with the desirable response mime-type.
Yehuda Sadeh [Fri, 6 Feb 2015 02:18:23 +0000 (18:18 -0800)]
rgw: remove multipart entries for bucket index when aborting
Fixes #10719
Since we now let the gc clean the aborter multipart uploads, we need to
clear the multipart entries from the bucket index when cleaning up the
meta object.
Yehuda Sadeh [Tue, 10 Feb 2015 02:16:13 +0000 (18:16 -0800)]
rgw: encode rgw_obj::orig_obj
We weren't encoding orig_obj, however, it's now needed so that we can
call get_index_key() on decoded objects. Only encode/decode it if ns or
instance are not empty.
Josh Durgin [Mon, 9 Feb 2015 23:00:18 +0000 (15:00 -0800)]
locally disable pragma warnings on gcc < 4.6
diagnostic push|pop are not present before 4.6, so each use gives a
warning. Temporarily ignore these by disabling/reenabling -Wpragmas.
Note that this means the other disabled warnings are not scoped on
old gcc. I don't think this is worth fixing, since newer gcc will
respect the scope and show us the warnings outside of it.
Jason Dillaman [Thu, 5 Feb 2015 06:20:00 +0000 (01:20 -0500)]
librbd: consolidate all async operation flush logic
librbd has three different methods for flushing asynchronous
operations. These have all been consolidated down to a single,
shared method to fix an existing issue and simplify maintenance
going forward.
Fixes: #10783 Signed-off-by: Jason Dillaman <dillaman@redhat.com> Reviewed-by: Josh Durgin <jdurgin@redhat.com>
Mykola Golub [Wed, 21 Jan 2015 13:47:25 +0000 (15:47 +0200)]
mon: noforward flag for commands that are not supposed to be forwarded
For not a monitor leader, if a received command is not supported
locally, but is supported by the leader, it is forwarded to the
leader.
For some commands that may have undesirable behaviour. E.g. for the
recently added "ceph tell mon.x version", if the mon.x is not a leader
and does not support "version" command yet, but the leader does, the
user will receive the version of the leader, and can't be actually
sure about a non leader version.
Fix this by adding noforward flag to commands that are not supposed to
be forwarded. Set the flag for "version" command. Although there are
other non-forwardable commands (like injectargs) it is not necessary
to add the flag to them, as the commands are too old to suffer from
the describe problem.
John Spray [Sun, 8 Feb 2015 14:47:04 +0000 (15:47 +0100)]
doc: remind user to calculate the correct max port
This was kind of easy to miss, and if users
just paste in the command as given then their
first few OSDs will work, and from their
4th OSD onwards things will get weird.
Haomai Wang [Sun, 8 Feb 2015 07:47:39 +0000 (15:47 +0800)]
AsyncConnection: fix incorrect condition for exchanging in_seq
Originally we use "in_seq==0" to judge whether need to exchange in_seq,
it's wrong when peer side already receive message and need to reply new
in_seq to this side.
Now use "is_reset_from_peer" to indicate whether not need to exchange
Yan, Zheng [Tue, 20 Jan 2015 12:12:11 +0000 (20:12 +0800)]
mds: save the oldest snapid of inode
When moving a inode to different snapshot realm, we need to check if
the inode is snapshotted. If the inode is snapshotted, we create a
snapshot realm for it. The snapshot realm records inode's past snapshot
realm.
Currently there is no reliable way to check if a inode is snapshotted.
So add a new field to CInode the store the oldest snapid, it's used to
check if inode is snapshotted.
Yan, Zheng [Mon, 29 Dec 2014 08:16:23 +0000 (16:16 +0800)]
mds: don't manully create snaprealm during rename
project_past_snaprealm_parent() will do the same job. Besides
MDCache::_snaprealm_create_finish() is buggy, it updates snaprealm's
current_parent_since incorrectly
Yan, Zheng [Fri, 26 Dec 2014 07:03:19 +0000 (15:03 +0800)]
mds: always create multiversion inode when cow inode
When moving a snapshotted regular file to stray directory, we need
to create an snaprealm for it. The snaprealm is required for building
correct snapshot context when purging file objects.
Current code normally create seperate inodes when a snapshotted file
inode is COWed. Each time the file inode is COWed, the head inode's
'first' is updated. So when deleting the file, we can't use head inode's
'first' to check if it was snapshotted.
This commit make MDCache::journal_cow_dentry always create multiversion
inode. multiversion inode's 'first' keeps constant.
Yan, Zheng [Fri, 19 Dec 2014 07:29:32 +0000 (15:29 +0800)]
mds: check multiversion inode when purging stray
we can't purge a multiversion directory inode when it is still referenced
by some snapshots. For regular files that are still referenced by some
snapshots, we need to keep the backtrace object.
Yan, Zheng [Fri, 12 Dec 2014 02:00:53 +0000 (10:00 +0800)]
mds: check snaprealm before drop dentries in deleted directory
There is an optimization that drop dentries in deleted directory,
so that MDS can purge corresponding inode faster. We need to check
if the deleted directory is still referenced by any snapshot. If
it is, we can't drop dentries or skip committing dirfrags to object
store. The simplest method to check if a delted directory is
potentially referenced by snaphosts is checking diri->snaprealm.