Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

osd: crash creating/deleting pools #5527

Merged
1 commit merged into from Sep 2, 2015

Conversation

Projects
None yet
3 participants
@smithfarm
Copy link
Contributor

smithfarm commented Aug 10, 2015

osd/OSDMap: handle incrementals that modify+del pool
Because new_pools was processed after old_pools, if something
was modified and then deleted in the same incremental
map, then the resulting state would be a pool in the map
that had no entry in pool_name.

Fixes: #12429
Signed-off-by: John Spray <john.spray@redhat.com>
(cherry picked from commit 8d4932e)

@smithfarm smithfarm self-assigned this Aug 10, 2015

@smithfarm smithfarm added this to the hammer milestone Aug 10, 2015

@ghost

This comment has been minimized.

Copy link

ghost commented Aug 30, 2015

@tchaikov does this backport look good to merge ? It passed a run of the hammer rados suite ( see http://tracker.ceph.com/issues/12701#rados for details ).

ghost pushed a commit that referenced this pull request Aug 30, 2015

Merge pull request #5527: OSD crash creating/deleting pools
Reviewed-by: Loic Dachary <ldachary@redhat.com>

ghost pushed a commit that referenced this pull request Aug 30, 2015

Merge pull request #5527: OSD crash creating/deleting pools
Reviewed-by: Loic Dachary <ldachary@redhat.com>

ghost pushed a commit that referenced this pull request Aug 30, 2015

Merge pull request #5527: OSD crash creating/deleting pools
Reviewed-by: Loic Dachary <ldachary@redhat.com>

ghost pushed a commit that referenced this pull request Aug 31, 2015

Merge pull request #5527: OSD crash creating/deleting pools
Reviewed-by: Loic Dachary <ldachary@redhat.com>

ghost pushed a commit that referenced this pull request Sep 1, 2015

Merge pull request #5527: OSD crash creating/deleting pools
Reviewed-by: Loic Dachary <ldachary@redhat.com>
@tchaikov

This comment has been minimized.

Copy link
Contributor

tchaikov commented Sep 2, 2015

@dachary lgtm

ghost pushed a commit that referenced this pull request Sep 2, 2015

Loic Dachary
Merge pull request #5527 from SUSE/wip-12585-hammer
OSD crash creating/deleting pools

Reviewed-by: Kefu Chai <kchai@redhat.com>

@ghost ghost merged commit 845d2ae into ceph:hammer Sep 2, 2015

ghost pushed a commit that referenced this pull request Sep 2, 2015

Merge pull request #5527: OSD crash creating/deleting pools
Reviewed-by: Loic Dachary <ldachary@redhat.com>

@smithfarm smithfarm deleted the SUSE:wip-12585-hammer branch Sep 5, 2015

@ghost ghost changed the title OSD crash creating/deleting pools osd: crash creating/deleting pools Sep 13, 2015

steveftaylor pushed a commit to steveftaylor/ceph that referenced this pull request May 4, 2016

Loic Dachary Samuel Just
unit tests for sharedptr_registry
Covers 100% of the LOC and all the expected behavior, including thread
safety.

The sharedptr_registry is made friend of the test class so that it can
synthetize race conditions. The lookup and lookup_or_create methods
set the new in_method data member before calling cond.Wait() so that
the caller knows it is waiting.

http://tracker.ceph.com/issues/5527 refs ceph#5527

Signed-off-by: Loic Dachary <loic@dachary.org>
(cherry picked from commit 6b16cd1)

steveftaylor pushed a commit to steveftaylor/ceph that referenced this pull request May 4, 2016

Loic Dachary Samuel Just
replace in_method_t with a counter
A single counter ( waiting ) accurately reflects the number of
waiters, regardless of the method waiting. It is enough to allow
unit tests to synthetise all situations, including:

T1: x = lookup_or_create(0)
T1: release x part 1 (weak_ptrs now fail to lock)
T2: y = lookup_or_create(0)
T2: block in lookup_or_create (waiting == 1)
T1: z = lookup_or_create(1) (does not block because the key is different)
    while holding the lock it waiting++ and waiting == 2
    and before returning it waiting-- and waiting is back to == 1
T1: complete release x
T2: complete lookup_or_create(0) (waiting == 0)

The unit tests are modified to add a lookup on an unrelated key to
demonstrate that it does not reset waiting counter.

http://tracker.ceph.com/issues/5527 refs ceph#5527

Signed-off-by: Loic Dachary <loic@dachary.org>
(cherry picked from commit 2ec480b)

This issue was closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.