| From 24da4b9b6fad5a000c8595df76f6582ba68db6a0 Mon Sep 17 00:00:00 2001 |
| From: Ilya Dryomov <idryomov@gmail.com> |
| Date: Wed, 1 Mar 2017 17:33:27 +0100 |
| Subject: [PATCH] libceph: don't set weight to IN when OSD is destroyed |
| |
| commit b581a5854eee4b7851dedb0f8c2ceb54fb902c06 upstream. |
| |
| Since ceph.git commit 4e28f9e63644 ("osd/OSDMap: clear osd_info, |
| osd_xinfo on osd deletion"), weight is set to IN when OSD is deleted. |
| This changes the result of applying an incremental for clients, not |
| just OSDs. Because CRUSH computations are obviously affected, |
| pre-4e28f9e63644 servers disagree with post-4e28f9e63644 clients on |
| object placement, resulting in misdirected requests. |
| |
| Mirrors ceph.git commit a6009d1039a55e2c77f431662b3d6cc5a8e8e63f. |
| |
| Fixes: 930c53286977 ("libceph: apply new_state before new_up_client on incrementals") |
| Link: http://tracker.ceph.com/issues/19122 |
| Signed-off-by: Ilya Dryomov <idryomov@gmail.com> |
| Reviewed-by: Sage Weil <sage@redhat.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c |
| index d2436880b305..d3f6c26425b3 100644 |
| --- a/net/ceph/osdmap.c |
| +++ b/net/ceph/osdmap.c |
| @@ -1334,7 +1334,6 @@ static int decode_new_up_state_weight(void **p, void *end, |
| if ((map->osd_state[osd] & CEPH_OSD_EXISTS) && |
| (xorstate & CEPH_OSD_EXISTS)) { |
| pr_info("osd%d does not exist\n", osd); |
| - map->osd_weight[osd] = CEPH_OSD_IN; |
| ret = set_primary_affinity(map, osd, |
| CEPH_OSD_DEFAULT_PRIMARY_AFFINITY); |
| if (ret) |
| -- |
| 2.12.0 |
| |