PG: create macro for simple events

This should make defining no-information events a bit simpler.

Signed-off-by: Samuel Just <sam.just@inktank.com>
osd: return -EPERM on insufficient caps

Send a failure to the client instead of dropping the request on the floor.

Fixes: #3066
Signed-off-by: Sage Weil <sage@inktank.com>
osd: some whitespace

Signed-off-by: Sage Weil <sage@inktank.com>
osd: catch decoding errors from client ops

Check for decode errors in client ops and return -EINVAL.

Fixes: #2500
Signed-off-by: Sage Weil <sage@inktank.com>
ReplicatedPG: set op return version to pg version on ENOENT

This will be useful for detecting read-delete races in
radosgw.

Signed-off-by: Samuel Just <sam.just@inktank.com>
librados: note that watch's version param is ignored

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
librbd: ensure header is up to date after initial read

Use an assert version op in combination with our watch, and re-read
the header until it's not stale. Header updates are infrequent, so
this should not cause any delay with normal use.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
OSD: add init and shutdown for OSDService

Signed-off-by: Samuel Just <sam.just@inktank.com>
rgw: url_decode should allocate extra byte for dest

Was missing extra byte for null termination

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
osd/: add backfill reservations

Previously, a new osd would be bombarded by backfills from many osds
simultaneously, resulting in excessively high load.  Instead, we
want to limit the number of backfills coming into and going out
from a single osd.

To that end, each OSDService now has two AsyncReserver instances: one
for backfills going from the osd (local_reserver) and one for backfills
going to the osd (remote_reserver).  For a primary to initiate a
backfill, it must first obtain a reservation from its own
local_reserver.  Then, it must obtain a reservation from the backfill
target's remote_reserver via a MBackfillReserve message. This process is
managed by substates of Active and ReplicaActive (see the changes in
PG.h).  The reservations are dropped either on the Backfilled event,
which is sent on the primary before calling recovery_complete and on the
replica on receipt of the BackfillComplete progress message), or upon
leaving Active or ReplicaActive.

It's important that we always grab the local reservation before the
remote reservation in order to prevent a circular dependency.

Signed-off-by: Samuel Just <sam.just@inktank.com>
osd/: add PG_STATE_BACKFILLING

PG_STATE_BACKFILLING is set when the pg enters the Backfilling state.
That is, +backfilling indicates that the pg has obtained its
reservations and is now actively backfilling.

Signed-off-by: Samuel Just <sam.just@inktank.com>
doc/: added documentation for backfill_reservation

Signed-off-by: Samuel Just <sam.just@inktank.com>
PG: add CEPH_FEATURE for backfill reservation

Also adds backwards compatibility by just post_event-ing
the RemoteBackfillReserved() rather than sending the
message to an older replica.

Signed-off-by: Samuel Just <sam.just@inktank.com>
PG,osd_types,PGMonitor: make backfill state names more descriptive

PG_STATE_BACKFILL->PG_STATE_BACKFILL_WAIT
and
PG_STATE_BACKFILLING->PG_STATE_BACKFILL

backfill -> wait_backfill
backfill+backfilling -> backfill

Signed-off-by: Samuel Just <sam.just@inktank.com>
timer: add unsafe callbacks option

Using unsafe callbacks drops the lock between invocations of event
callbacks. It is useful under some circumstances, but the user must take
caution. See the comment in Timer.h for full details.

Signed-off-by: Mike Ryan <mike.ryan@inktank.com>
PG, OSD: reject backfills when an OSD is nearly full

Reject backfills when an OSD reaches a configurable full ratio. Retry
backfilling periodically in the hopes that the OSD has become less full.

This changeset introduces two configuration options for dealing with
this: osd_refuse_backfill_full_ratio and osd_backfill_retry_interval.

We also introduce two new state transitions in the PG's Active state.

Signed-off-by: Mike Ryan <mike.ryan@inktank.com>
rgw: copy_object should not override ETAG implicitly

When copying an object with new attrs, we still need to
maintain the ETAG.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
v0.52
rgw: copy_object should not override ETAG implicitly

When copying an object with new attrs, we still need to
maintain the ETAG.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>

Conflicts:
	src/rgw/rgw_rados.cc
Merge tag 'v0.52'

v0.52

Conflicts:
	src/rgw/rgw_rados.cc