• Ilya Dryomov's avatar
    libceph: don't allow bidirectional swap of pg-upmap-items · 29a0cfbf
    Ilya Dryomov authored
    This reverts most of commit f53b7665 ("libceph: upmap semantic
    changes").
    
    We need to prevent duplicates in the final result.  For example, we
    can currently take
    
      [1,2,3] and apply [(1,2)] and get [2,2,3]
    
    or
    
      [1,2,3] and apply [(3,2)] and get [1,2,2]
    
    The rest of the system is not prepared to handle duplicates in the
    result set like this.
    
    The reverted piece was intended to allow
    
      [1,2,3] and [(1,2),(2,1)] to get [2,1,3]
    
    to reorder primaries.  First, this bidirectional swap is hard to
    implement in a way that also prevents dups.  For example, [1,2,3] and
    [(1,4),(2,3),(3,4)] would give [4,3,4] but would we just drop the last
    step we'd have [4,3,3] which is also invalid, etc.  Simpler to just not
    handle bidirectional swaps.  In practice, they are not needed: if you
    just want to choose a different primary then use primary_affinity, or
    pg_upmap (not pg_upmap_items).
    
    Cc: stable@vger.kernel.org # 4.13
    Link: http://tracker.ceph.com/issues/21410Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    Reviewed-by: default avatarSage Weil <sage@redhat.com>
    29a0cfbf
osdmap.c 61.5 KB