librados: aio_unwatch() delivers ENOTCONN to AioCompletion#66610
librados: aio_unwatch() delivers ENOTCONN to AioCompletion#66610
Conversation
|
i couldn't find any existing examples of aio_* functions reporting immediate errors this way, but i think the logic is correct:
|
I use this helper class to keep track of the state machine and not lose stuff: ceph/src/rgw/driver/rados/cls_fifo_legacy.h Line 273 in 51bce27 And signal the AioCompletion in an initiating function here: ceph/src/rgw/driver/rados/cls_fifo_legacy.cc Line 1631 in 51bce27 |
cf51216 to
bcc072c
Compare
idryomov
left a comment
There was a problem hiding this comment.
Otherwise LGTM. I did some limited testing with the RBD suite and the sporadic crashes noted in #65698 (comment) are gone.
bcc072c to
8fe58c3
Compare
The full RBD run looks good too: #66581 (comment) |
|
i can't view the results due to the lab move, but this shouldn't block merge given that rbd qa has passed |
|
jenkins test api |
94f42b6 added a new error condition to IoCtx::aio_unwatch() that callers aren't prepared to handle. instead of returning that error directly, report it asynchronously to the AioCompletion Signed-off-by: Casey Bodley <cbodley@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
before this change set, linger_register() returned a raw LingerOp pointer with an implicit reference for the caller. for librados, this implicit reference is only dropped when the corresponding unwatch() calls linger_cancel() after commit 94f42b6 introduced linger_by_cookie(), unwatch() no longer has a safe way to drop this implicit reference. to prevent LingerOp leaks when unwatch() returns ENOTCONN, we can't hold this implicit reference count until unwatch() linger_register() now returns an explicit reference to the caller as intrusive_ptr<LingerOp>. this helps to guarantee that this reference count gets dropped before the completion of watch()/aio_watch() because linger_register() no longer acquires an implicit reference for the caller, linger_cancel() no longer drops it with info->put() Reported-by: Ilya Dryomov <idryomov@gmail.com> Signed-off-by: Casey Bodley <cbodley@redhat.com>
dc59da5 to
1b0f873
Compare
|
jenkins test windows |
1 similar comment
|
jenkins test windows |
94f42b6 added a new error condition to
IoCtx::aio_unwatch()that callers aren't prepared to handle. instead of returning that error directly, report it asynchronously to theAioCompletionShow available Jenkins commands
jenkins test classic perfJenkins Job | Jenkins Job Definitionjenkins test crimson perfJenkins Job | Jenkins Job Definitionjenkins test signedJenkins Job | Jenkins Job Definitionjenkins test make checkJenkins Job | Jenkins Job Definitionjenkins test make check arm64Jenkins Job | Jenkins Job Definitionjenkins test submodulesJenkins Job | Jenkins Job Definitionjenkins test dashboardJenkins Job | Jenkins Job Definitionjenkins test dashboard cephadmJenkins Job | Jenkins Job Definitionjenkins test apiJenkins Job | Jenkins Job Definitionjenkins test docsReadTheDocs | Github Workflow Definitionjenkins test ceph-volume allJenkins Jobs | Jenkins Jobs Definitionjenkins test windowsJenkins Job | Jenkins Job Definitionjenkins test rook e2eJenkins Job | Jenkins Job DefinitionYou must only issue one Jenkins command per-comment. Jenkins does not understand
comments with more than one command.