]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
OSDMap: reset osd_primary_affinity shared_ptr when deepish_copy_from 7590/head
authorXinze Chi <xinze@xsky.com>
Sun, 7 Feb 2016 10:50:29 +0000 (18:50 +0800)
committerNathan Cutler <ncutler@suse.com>
Wed, 10 Feb 2016 07:25:18 +0000 (08:25 +0100)
commitd5ba063cdf3a8b92862ef6657001725d6192fe86
tree5eb94208cc776187dc0c46747b12cadf7665d9ea
parent7abb6ae8f3cba67009bd022aaeee0a87cdfc6477
OSDMap: reset osd_primary_affinity shared_ptr when deepish_copy_from

Base on current logic, OSDMonitor may call create_pending and
encode_pending twice for the some epoch.

In encode_pending:

tmp.deepish_copy_from(osdmap);
tmp.apply_incremental(pending_inc);

This Op would change the tmp osd_primary_affinity, but the osd_primary_affinity
is declared as ceph::shared_ptr, so this would change the osdmap too. When this
round encode_pending is proposed fail. We may call encode_pending again, but the
osdmap is changed last round, so the pending_inc would be wrong.

Fixes: #14686
Signed-off-by: Xinze Chi <xinze@xsky.com>
(cherry picked from commit 990b437f4e616a87f4f7438e51945d531170ca83)
src/osd/OSDMap.h