]> git.apps.os.sepia.ceph.com Git - ceph.git/log
ceph.git
10 years agolibrados: do not overload C++ API methods with new signatures
Sage Weil [Fri, 12 Dec 2014 21:18:35 +0000 (13:18 -0800)]
librados: do not overload C++ API methods with new signatures

Bah!  C++ sucks for libraries.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: fix a zillion warnings
Sage Weil [Thu, 11 Dec 2014 14:49:57 +0000 (06:49 -0800)]
ceph_test_rados_api_watch_notify: fix a zillion warnings

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: use GT macro
Sage Weil [Thu, 11 Dec 2014 14:45:42 +0000 (06:45 -0800)]
ceph_test_rados_api_watch_notify: use GT macro

so we can see the value

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: print err to debug
Sage Weil [Thu, 11 Dec 2014 14:29:39 +0000 (06:29 -0800)]
ceph_test_rados_api_watch_notify: print err to debug

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: normalize watch error (ENOENT on delete)
Sage Weil [Thu, 11 Dec 2014 14:26:06 +0000 (06:26 -0800)]
osdc/Objecter: normalize watch error (ENOENT on delete)

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: only issue one error per watch; do it through one path
Sage Weil [Wed, 10 Dec 2014 18:05:57 +0000 (10:05 -0800)]
osdc/Objecter: only issue one error per watch; do it through one path

Send all errors through C_DoWatchError for simplicity.

Only deliver one error per watch.  This simplifies callers logic and avoids
a very rare case that they need to deal with.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: wait longer for osd to time us out
Sage Weil [Wed, 10 Dec 2014 17:52:04 +0000 (09:52 -0800)]
ceph_test_rados_api_watch_notify: wait longer for osd to time us out

If cluster is thrashing this can fail.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: weak assert cookie is valid (it's a ptr)
Sage Weil [Wed, 10 Dec 2014 17:49:56 +0000 (09:49 -0800)]
ceph_test_rados_api_watch_notify: weak assert cookie is valid (it's a ptr)

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: pass correct cookie value to error
Sage Weil [Wed, 10 Dec 2014 17:44:01 +0000 (09:44 -0800)]
osdc/Objecter: pass correct cookie value to error

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: fix signed/unsigend
Sage Weil [Sun, 7 Dec 2014 18:36:17 +0000 (10:36 -0800)]
ceph_test_rados_api_watch_notify: fix signed/unsigend

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: mark new API watch/notify calls
Sage Weil [Sun, 7 Dec 2014 18:36:07 +0000 (10:36 -0800)]
librados: mark new API watch/notify calls

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agorgw: switch to new watch/notify API
Sage Weil [Sat, 6 Dec 2014 02:00:04 +0000 (18:00 -0800)]
rgw: switch to new watch/notify API

Note that we don't use it properly, yet!

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados:: carry IoCtx ref from WatchInfo
Sage Weil [Mon, 24 Nov 2014 23:58:11 +0000 (15:58 -0800)]
librados:: carry IoCtx ref from WatchInfo

The WatchInfo gets totally async notifications.  Make sure our ioctx
ref is valid when that happens.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd: allow deletion of objects with watchers
Sage Weil [Sat, 22 Nov 2014 00:04:38 +0000 (16:04 -0800)]
osd: allow deletion of objects with watchers

If we delete an object with a watcher, forcefully disconnect the watcher
instead of preventing the deletion with EBUSY.

Fixes: #2339
Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd/ReplicatedPG: do watch effects only when change commits
Sage Weil [Fri, 21 Nov 2014 23:34:30 +0000 (15:34 -0800)]
osd/ReplicatedPG: do watch effects only when change commits

Do not tell the client their watch succeeded until it is durable and
visible to clients doing a notify.  This is less important in the initial
watch registration stage, but critical in the disconnect (and disconnect
+ reconnect) pipelining cases.

Simplify the watch_disconnects struct to have exactly the information
we need, and no more.  Note that the conn is not needed for disconnects
(and we don't have a req to provide one in the watch timeout op case).

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd/ReplicatedPG: pass obc to OpContext ctor
Sage Weil [Fri, 21 Nov 2014 23:11:00 +0000 (15:11 -0800)]
osd/ReplicatedPG: pass obc to OpContext ctor

We always set it, except for the handle_watch_timeout caller, which needs
to.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: queued_async() gets called inside watch_lock from caller
Sage Weil [Fri, 21 Nov 2014 21:50:58 +0000 (13:50 -0800)]
osdc/Objecter: queued_async() gets called inside watch_lock from caller

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: remove failed notify
Sage Weil [Tue, 18 Nov 2014 23:35:28 +0000 (15:35 -0800)]
librados: remove failed notify

Decided this wasn't useful.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: s/handle/cookie/ in headers
Sage Weil [Tue, 18 Nov 2014 23:10:52 +0000 (15:10 -0800)]
librados: s/handle/cookie/ in headers

Be consistent.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_watch_notify: do not unwatch on invalid handle
Sage Weil [Tue, 18 Nov 2014 00:20:49 +0000 (16:20 -0800)]
ceph_test_rados_watch_notify: do not unwatch on invalid handle

It is not safe to call rados_unwatch on an undefined handle.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: test ENOENT case
Sage Weil [Tue, 18 Nov 2014 00:20:20 +0000 (16:20 -0800)]
ceph_test_rados_api_watch_notify: test ENOENT case

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoPendingReleaseNotes: a few notes about watch/notify changes
Sage Weil [Tue, 18 Nov 2014 00:20:06 +0000 (16:20 -0800)]
PendingReleaseNotes: a few notes about watch/notify changes

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agotest_async_driver: fix warning
Sage Weil [Mon, 17 Nov 2014 20:42:49 +0000 (12:42 -0800)]
test_async_driver: fix warning

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: set last_error before async error event delivery
Sage Weil [Mon, 17 Nov 2014 20:13:45 +0000 (12:13 -0800)]
osdc/Objecter: set last_error before async error event delivery

No reason to delay this.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: use RWLock for watch_lock
Sage Weil [Mon, 17 Nov 2014 20:06:27 +0000 (12:06 -0800)]
osdc/Objecter: use RWLock for watch_lock

This makes the linger_check fast path an RWLock read lock.  Drop the
unnecessary write lock on rwlock and drop the unused Cond.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: make watch_check time reflect async delivery
Sage Weil [Mon, 17 Nov 2014 19:28:21 +0000 (11:28 -0800)]
osdc/Objecter: make watch_check time reflect async delivery

When a librados user calls watch_check(), the age they get back should
establish a timestamp for which:

 1) we know that the watch was registered at least through this time,
 2) we have received and processed notifies sent as of this time,
 3) we have processed any async error events as of this time.

We already accomplish 1 by updating watch_valid_thru based on the time
the ping is sent (not received).

This patch gets us 2 and 3 by using the MIN of watch_valid_thru and the
oldest queued async event for the watch_check result.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: use recast LingerOp* as OTW cookie, too
Sage Weil [Mon, 17 Nov 2014 18:27:49 +0000 (10:27 -0800)]
osdc/Objecter: use recast LingerOp* as OTW cookie, too

This makes the OSD reply's cookie values match up with what the librados
users see.  And it makes life less confusing when debugging.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: use (gid,cookie) to identify notify participants
Sage Weil [Mon, 17 Nov 2014 18:08:55 +0000 (10:08 -0800)]
librados: use (gid,cookie) to identify notify participants

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: include missed watchers in notify reply data
Sage Weil [Mon, 17 Nov 2014 16:02:55 +0000 (08:02 -0800)]
librados: include missed watchers in notify reply data

Include a list of who missed their notify in the notify reply.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoencoding: multiset encode/decode
Sage Weil [Mon, 17 Nov 2014 17:45:55 +0000 (09:45 -0800)]
encoding: multiset encode/decode

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd: rejigger watch connect/disconnect callers
Sage Weil [Mon, 17 Nov 2014 16:01:15 +0000 (08:01 -0800)]
osd: rejigger watch connect/disconnect callers

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: ignore pings from previous registrations
Sage Weil [Mon, 17 Nov 2014 16:00:34 +0000 (08:00 -0800)]
osdc/Objecter: ignore pings from previous registrations

If we have a ping in flight and then reregister (due to interval change
or whatever), ignore the result of the previous ping.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: only reconnect watches; skip ack unless needed
Sage Weil [Mon, 17 Nov 2014 15:32:12 +0000 (07:32 -0800)]
osdc/Objecter: only reconnect watches; skip ack unless needed

Only watches get a RECONNECT op; lingers just get resent.

Only request an ACK in the non-watch reconnect case and when an ack
callback is specified.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: drop ACK callback for watch
Sage Weil [Mon, 17 Nov 2014 15:30:44 +0000 (07:30 -0800)]
osdc/Objecter: drop ACK callback for watch

It is semantically useless.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: move watch/notify into the Objecter
Sage Weil [Sun, 16 Nov 2014 21:44:08 +0000 (13:44 -0800)]
librados: move watch/notify into the Objecter

Several things here:
 - we move all of the junk from librados' RadosClient into Objecter
 - we use fast-dispatch to schedule the watch-notify events (this will
   keep them ordered wrt ping)
 - we use the LingerOp * as the librados-exposed handle so that we can
   avoid any lookups for watch-check.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agorados: break out notify replies by client
Sage Weil [Sun, 16 Nov 2014 19:50:42 +0000 (11:50 -0800)]
rados: break out notify replies by client

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: take Finisher ref from creator
Sage Weil [Fri, 14 Nov 2014 22:47:05 +0000 (14:47 -0800)]
osdc/Objecter: take Finisher ref from creator

Only needed for watch/notify users, so most can pass NULL.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: use Objecter's linger_id as the cookie
Sage Weil [Fri, 14 Nov 2014 21:35:05 +0000 (13:35 -0800)]
librados: use Objecter's linger_id as the cookie

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: spit out linger register step
Sage Weil [Fri, 14 Nov 2014 21:32:12 +0000 (13:32 -0800)]
osdc/Objecter: spit out linger register step

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: expose LingerOp instead of linger_id
Sage Weil [Fri, 14 Nov 2014 19:21:05 +0000 (11:21 -0800)]
osdc/Objecter: expose LingerOp instead of linger_id

We want a reference-counted handle, not an id.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agomessages/MWatchNotify: print more nicer
Sage Weil [Thu, 13 Nov 2014 23:19:23 +0000 (15:19 -0800)]
messages/MWatchNotify: print more nicer

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: watch_check() to check on status of watch
Sage Weil [Thu, 13 Nov 2014 23:19:05 +0000 (15:19 -0800)]
librados: watch_check() to check on status of watch

Return either an accumulated error code, or the time since the watch was
last confirmed.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados: use new watch/notify API
Sage Weil [Thu, 13 Nov 2014 22:28:14 +0000 (14:28 -0800)]
ceph_test_rados: use new watch/notify API

Ignore error events for now; we are just stressing the OSD.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: unwatch doesn't need the oid argument
Sage Weil [Sat, 22 Nov 2014 05:03:09 +0000 (21:03 -0800)]
librados: unwatch doesn't need the oid argument

The handle is like a file handle: there is internal state that is getting
freed and the user needn't provide it again.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agorados: use new notify API
Sage Weil [Thu, 13 Nov 2014 22:11:45 +0000 (14:11 -0800)]
rados: use new notify API

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: no need for '2' suffix in c++
Sage Weil [Thu, 13 Nov 2014 22:01:10 +0000 (14:01 -0800)]
librados: no need for '2' suffix in c++

Compiler disambiguates based on the rest of the signature.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: mark old rollback call deprecated
Sage Weil [Thu, 13 Nov 2014 21:53:37 +0000 (13:53 -0800)]
librados: mark old rollback call deprecated

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: mark old watch calls deprecated
Sage Weil [Thu, 13 Nov 2014 21:53:23 +0000 (13:53 -0800)]
librados: mark old watch calls deprecated

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: mark old object listing api deprecated
Sage Weil [Thu, 13 Nov 2014 22:09:40 +0000 (14:09 -0800)]
librados: mark old object listing api deprecated

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: mark old rollback method deprecated
Sage Weil [Thu, 13 Nov 2014 22:09:28 +0000 (14:09 -0800)]
librados: mark old rollback method deprecated

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: mark deprecated watch/notify methods with deprecated attribute
Sage Weil [Thu, 13 Nov 2014 22:09:20 +0000 (14:09 -0800)]
librados: mark deprecated watch/notify methods with deprecated attribute

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoscratchtoolpp: suppress deprecation warnings
Sage Weil [Thu, 13 Nov 2014 22:08:08 +0000 (14:08 -0800)]
scratchtoolpp: suppress deprecation warnings

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: test watch disconnect, reconnect
Sage Weil [Thu, 13 Nov 2014 21:08:27 +0000 (13:08 -0800)]
ceph_test_rados_api_watch_notify: test watch disconnect, reconnect

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd: send watch DISCONNECT to client when a watch is removed
Sage Weil [Thu, 13 Nov 2014 21:01:44 +0000 (13:01 -0800)]
osd: send watch DISCONNECT to client when a watch is removed

This is an explicit notification to the client that a watch is no longer
valid and needs to be re-registered.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: reorder tests
Sage Weil [Thu, 13 Nov 2014 00:51:23 +0000 (16:51 -0800)]
ceph_test_rados_api_watch_notify: reorder tests

Group by function, not language/pool type.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: drop 'Test' suffix
Sage Weil [Thu, 13 Nov 2014 00:47:46 +0000 (16:47 -0800)]
ceph_test_rados_api_watch_notify: drop 'Test' suffix

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_watch_notify: fix signed/unsigned warnings
Sage Weil [Thu, 13 Nov 2014 00:38:18 +0000 (16:38 -0800)]
ceph_test_rados_watch_notify: fix signed/unsigned warnings

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: verify notify after missed notify works
Sage Weil [Thu, 13 Nov 2014 00:33:46 +0000 (16:33 -0800)]
ceph_test_rados_api_watch_notify: verify notify after missed notify works

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: fix whitespace
Sage Weil [Thu, 13 Nov 2014 00:32:59 +0000 (16:32 -0800)]
osdc/Objecter: fix whitespace

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: factor out _send_op_account()
Sage Weil [Sun, 9 Nov 2014 15:43:01 +0000 (07:43 -0800)]
osdc/Objecter: factor out _send_op_account()

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: skip ping if PAUSERD
Sage Weil [Sun, 9 Nov 2014 15:42:34 +0000 (07:42 -0800)]
osdc/Objecter: skip ping if PAUSERD

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: objecter_inject_no_watch_ping
Sage Weil [Sat, 8 Nov 2014 04:01:50 +0000 (20:01 -0800)]
osdc/Objecter: objecter_inject_no_watch_ping

Tunable to prevent PINGs.  This will let us test paths the client gets
disconnected from the OSD (at least from the client's perspective).

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: stop sending pings once we get an error
Sage Weil [Sat, 8 Nov 2014 03:47:53 +0000 (19:47 -0800)]
osdc/Objecter: stop sending pings once we get an error

If we get ENOTCONN or ETIMEDOUT we can stop pinging.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd/Watch: set timeout event for new watchers
Sage Weil [Sat, 8 Nov 2014 03:45:21 +0000 (19:45 -0800)]
osd/Watch: set timeout event for new watchers

For a new watcher, we set the timeout event on connect, and reset it when
we get a ping.

For an old watcher, we continue to set the timeout on disconnect() and
rely on the msgr Connection reset.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agomake ping verify we are connected
Sage Weil [Sat, 8 Nov 2014 03:38:24 +0000 (19:38 -0800)]
make ping verify we are connected

10 years agoosdc/Objecter: only ping watches (not notifies)
Sage Weil [Sat, 8 Nov 2014 03:26:03 +0000 (19:26 -0800)]
osdc/Objecter: only ping watches (not notifies)

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd, librados: distinguish between old and new watchers
Sage Weil [Sat, 8 Nov 2014 01:47:09 +0000 (17:47 -0800)]
osd, librados: distinguish between old and new watchers

Use a new watch op code that is different from the legacy one so we can
tell when the client is doing all the new stuff (like sending pings).

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: tell watcher if we cause a notify timeout
Sage Weil [Sat, 8 Nov 2014 01:12:54 +0000 (17:12 -0800)]
librados: tell watcher if we cause a notify timeout

If we are a watcher and we fail to notify in a timely manner, or
circumstances otherwise conspire to prevent out ack from arriving in time,
initiate a callback.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd/Watch: inform watchers when they cause a notify timeout
Sage Weil [Sat, 8 Nov 2014 00:36:43 +0000 (16:36 -0800)]
osd/Watch: inform watchers when they cause a notify timeout

If a watcher doesn't ack in time, let them know that they triggered a
notify failure.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: EINVAL on bad args to watch2
Sage Weil [Sat, 8 Nov 2014 01:10:18 +0000 (17:10 -0800)]
librados: EINVAL on bad args to watch2

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: behave if errcb is NULL
Sage Weil [Sat, 8 Nov 2014 01:04:37 +0000 (17:04 -0800)]
librados: behave if errcb is NULL

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd/Watch: drop redundant in_progress_watchers
Sage Weil [Sat, 8 Nov 2014 00:35:41 +0000 (16:35 -0800)]
osd/Watch: drop redundant in_progress_watchers

This is essentially watchers.size() at all times and obfuscates the code.
In particular this makes the maybe_complete_notify() logic much clearer.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd/Watch: fix comment typo
Sage Weil [Sat, 8 Nov 2014 00:18:30 +0000 (16:18 -0800)]
osd/Watch: fix comment typo

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: verify we get the right # of notifies
Sage Weil [Sat, 8 Nov 2014 00:13:23 +0000 (16:13 -0800)]
ceph_test_rados_api_watch_notify: verify we get the right # of notifies

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: s/handle/cookie/
Sage Weil [Sat, 8 Nov 2014 00:04:25 +0000 (16:04 -0800)]
ceph_test_rados_api_watch_notify: s/handle/cookie/

Use consist nameing for C and C++ tests.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoclean up CEPH_WATCH_EVENT_* namespace, and make COMPLETE distinct
Sage Weil [Fri, 7 Nov 2014 23:35:24 +0000 (15:35 -0800)]
clean up CEPH_WATCH_EVENT_* namespace, and make COMPLETE distinct

Use a proper prefix and make a separate event for the notify completion
message.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: send regular PING ops
Sage Weil [Fri, 17 Oct 2014 03:19:00 +0000 (20:19 -0700)]
osdc/Objecter: send regular PING ops

Send a full PING op to the object to ensure we are still connected. For
now just use the existing ping interval; we may want to change this in
the future.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: queue an error if reconnect fails
Sage Weil [Fri, 17 Oct 2014 03:17:40 +0000 (20:17 -0700)]
osdc/Objecter: queue an error if reconnect fails

If we fail to reconnect, trigger the on_error (reusable) context to
let the user know about it.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: separate WATCH from RECONNECT
Sage Weil [Fri, 17 Oct 2014 03:16:07 +0000 (20:16 -0700)]
osdc/Objecter: separate WATCH from RECONNECT

Use WATCH op for the initial registration.  This is idempotent in that
it will succeed whether the watch information has been persisted or not.
It is used by the client if it does not know that it is registered.

The RECONNECT op is used for any subsequent session reconnect.  It will
fail if the watch state isn't already persisted on the OSD.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agorados: improve watch command output
Sage Weil [Fri, 17 Oct 2014 03:12:22 +0000 (20:12 -0700)]
rados: improve watch command output

- hexdump the notify payload, and include all of the new metadata
- print error events too

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: add infrastructure to deliver an error notification
Sage Weil [Fri, 17 Oct 2014 03:11:43 +0000 (20:11 -0700)]
librados: add infrastructure to deliver an error notification

Use a reusable context in the WatchNotifyInfo to trigger an error
event, delivered via the existing Finisher thread.  Re-lookup the cookie
in the thread to cope with races with unregister (just as we do with
notify events).

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: define error callback
Sage Weil [Fri, 17 Oct 2014 03:09:07 +0000 (20:09 -0700)]
librados: define error callback

This is the async notification of a watch error (failure to reconnect to
the object's OSD after a peering event or network disconnect).

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: remove crufty declaration
Sage Weil [Fri, 17 Oct 2014 02:52:52 +0000 (19:52 -0700)]
librados: remove crufty declaration

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd/ReplicatedPG: handle PING and RECONNECT watch ops
Sage Weil [Fri, 17 Oct 2014 02:28:53 +0000 (19:28 -0700)]
osd/ReplicatedPG: handle PING and RECONNECT watch ops

The ping will essentially assert that a watch is still valid.

A reconnect will reestablish session state *only* if the watch is
still persistent.  If not, it will fail (and the client will know it
may have missed something).

Note that the only difference here is that a PING is a bit lighter
weight; it will not reestablish the session state (which should already
be established).  We could use a single op here but the unique op
code makes the messages easier to understand and simplifies the code
path a bit for PING.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: define RECONNECT and PING watch ops
Sage Weil [Fri, 17 Oct 2014 02:26:17 +0000 (19:26 -0700)]
librados: define RECONNECT and PING watch ops

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosdc/Objecter: fix assert_src_version
Sage Weil [Fri, 10 Oct 2014 01:14:53 +0000 (18:14 -0700)]
osdc/Objecter: fix assert_src_version

Don't use the add_watch() helper; do it like assert_version
does it.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: use new watch op codes; simplify Objecter helpers
Sage Weil [Fri, 10 Oct 2014 01:14:15 +0000 (18:14 -0700)]
librados: use new watch op codes; simplify Objecter helpers

- drop the useless add_watch() helper; do it explicitly
- drop the unused var arg everywhere
- make a separate notify member of the union that excludes
  the other unused fields

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: define CEPH_OSD_WATCH_OP_*
Sage Weil [Fri, 10 Oct 2014 01:11:44 +0000 (18:11 -0700)]
librados: define CEPH_OSD_WATCH_OP_*

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: unconditionally pass WATCH_NOTIFY to legacy callback
Sage Weil [Fri, 10 Oct 2014 00:42:14 +0000 (17:42 -0700)]
librados: unconditionally pass WATCH_NOTIFY to legacy callback

This was always WATCH_NOTIFY; just pass that explicitly.  No need to
pay attention to what's in the message.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd: allow multiple watchers/notify replies per client
Sage Weil [Wed, 8 Oct 2014 15:25:45 +0000 (08:25 -0700)]
osd: allow multiple watchers/notify replies per client

It is perfectly valid to register multiple watchers via the same
librados client.  Make the notify_replies a multimap to capture all
of the acks.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: include notifier's gid in notify
Sage Weil [Tue, 7 Oct 2014 22:56:52 +0000 (15:56 -0700)]
librados: include notifier's gid in notify

The notify replies include the identify of everyone who acked the
notify.  For symmetry, inform the notified client who sent the notify.

Fixes: #9198
Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoceph_test_rados_api_watch_notify: test notify2 api
Sage Weil [Tue, 7 Oct 2014 22:28:55 +0000 (15:28 -0700)]
ceph_test_rados_api_watch_notify: test notify2 api

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: update notify2 API to accept reply payloads
Sage Weil [Thu, 21 Aug 2014 21:52:34 +0000 (14:52 -0700)]
librados: update notify2 API to accept reply payloads

Allow the notify2 callers to provide bufferlists or char ** pointers
so that we can pass the reply buffer back to them.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoosd: implement notify ack payloads
Sage Weil [Thu, 21 Aug 2014 21:46:35 +0000 (14:46 -0700)]
osd: implement notify ack payloads

If the notified send back reply payloads, pass them back to the notifier.

Note that we have changed the on-wire behavior of the watch completion
message a bit: instead of sending the original notify payload back to the
notifier, we send the map of notified to replies.  Note that only users of
the new API will know what to do with the notify acknowledgement
information.  At the same time, we stop sending the original payload.
However, the old API users never saw that data; we were uselessly sending
it over the wire.

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: define updated watch/notify interface
Sage Weil [Thu, 21 Aug 2014 21:32:48 +0000 (14:32 -0700)]
librados: define updated watch/notify interface

- new notify callback with the correct values:
  - notify_id
  - watch handle
  - payload
- new notify_ack call
  - not implicit when the callback returns (for new api only)
  - optional payload
- new watch2 call
  - that provides the new callback
- new notify2 call
  - with the right arguments, and optional timeout

A couple refactors in here:
- IoCtx notify_ack is now called unlocked (Note: this will soon change
  with pending Objecter locking changes)
- Objecter notify_ack takes a buffer

TODO:
- no timeout on the individual watch, yet...

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agolibrados: drop useless ver arg to _notify_ack
Sage Weil [Thu, 21 Aug 2014 20:38:17 +0000 (13:38 -0700)]
librados: drop useless ver arg to _notify_ack

Signed-off-by: Sage Weil <sage@redhat.com>
10 years agoMerge pull request #3076 from ceph/wip-mon-mdsdne
Gregory Farnum [Thu, 4 Dec 2014 18:31:34 +0000 (10:31 -0800)]
Merge pull request #3076 from ceph/wip-mon-mdsdne

MDSMonitor.cc: fix assertion caused by MDSMap::STATE_DNE state

Reviewed-by: Greg Farnum <gfarnum@redhat.com>
10 years agoMerge pull request #3072 from ceph/wip-10231-gperftools-location
Sage Weil [Thu, 4 Dec 2014 18:13:55 +0000 (10:13 -0800)]
Merge pull request #3072 from ceph/wip-10231-gperftools-location

heap_profiler: support new gperftools header locations

gitbuilders are happy

Reviewed-by: Sage Weil <sage@redhat.com>
10 years agoMerge pull request #3084 from ceph/wip-rados-include
Sage Weil [Thu, 4 Dec 2014 18:11:18 +0000 (10:11 -0800)]
Merge pull request #3084 from ceph/wip-rados-include

librados: Fix rados include problem reported by "sponce"

Reviewed-by: Sage Weil <sage@redhat.com>
10 years agolibrados: Fix rados include problem reported by "sponce" 3084/head
David Zafman [Thu, 4 Dec 2014 18:02:38 +0000 (10:02 -0800)]
librados: Fix rados include problem reported by "sponce"

Caused by a03f85a8e7fab296ea2df70a929a1c5e4aa0f7fb

Signed-off-by: David Zafman <dzafman@redhat.com>