From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mykola Golub Subject: Re: 7915 is not resolved Date: Tue, 12 Jan 2016 08:53:06 +0200 Message-ID: <20160112065305.GA16215@gmail.com> References: <20160111190619.GA22809@localhost> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mail-lb0-f174.google.com ([209.85.217.174]:33637 "EHLO mail-lb0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761901AbcALGxK (ORCPT ); Tue, 12 Jan 2016 01:53:10 -0500 Received: by mail-lb0-f174.google.com with SMTP id x4so10024501lbm.0 for ; Mon, 11 Jan 2016 22:53:09 -0800 (PST) Content-Disposition: inline In-Reply-To: Sender: ceph-devel-owner@vger.kernel.org List-ID: To: Boris Lukashev Cc: ceph-devel@vger.kernel.org, Sage Weil On Mon, Jan 11, 2016 at 09:00:18PM -0500, Boris Lukashev wrote: > In case anyone is following the mailing list later on, we spoke in IRC > and Sage provided a patch - http://fpaste.org/309609/52550203/ > diff --git a/src/osd/PG.cc b/src/osd/PG.cc > index dc18aec..f9ee23c 100644 > --- a/src/osd/PG.cc > +++ b/src/osd/PG.cc > @@ -135,8 +135,16 @@ void PGPool::update(OSDMapRef map) > name = map->get_pool_name(id); > if (pi->get_snap_epoch() == map->get_epoch()) { > pi->build_removed_snaps(newly_removed_snaps); > - newly_removed_snaps.subtract(cached_removed_snaps); > - cached_removed_snaps.union_of(newly_removed_snaps); > + interval_set intersection; > + intersection.intersection_of(newly_removed_snaps, cached_removed_snaps); > + if (!(intersection == cached_removed_snaps)) { > + newly_removed_snaps.subtract(cached_removed_snaps); Sage, won't it still violate the assert? "intersection != cached_removed_snaps" means that cached_removed_snaps contains snapshots missed in newly_removed_snaps, and we can't subtract? > + cached_removed_snaps.union_of(newly_removed_snaps); > + } else { > + lgeneric_subdout(g_ceph_context, osd, 0) << __func__ << " cached_removed_snaps shrank from " << cached_removed_snaps << dendl; > + cached_removed_snaps = newly_removed_snaps; > + newly_removed_snaps.clear(); > + } > snapc = pi->get_snap_context(); > } else { > newly_removed_snaps.clear(); -- Mykola Golub