Fix stop condition in osd_flush
Could probably lead to PGs hung in peering states on OSD restart in EC pools, fixable by primary OSD restart
This commit is contained in:
@@ -13,10 +13,11 @@ void osd_t::submit_pg_flush_ops(pg_t & pg)
|
|||||||
bool first = true;
|
bool first = true;
|
||||||
while (it != pg.flush_actions.end())
|
while (it != pg.flush_actions.end())
|
||||||
{
|
{
|
||||||
if (!first && (it->first.oid.inode != prev_it->first.oid.inode ||
|
if (!first &&
|
||||||
(it->first.oid.stripe & ~STRIPE_MASK) != (prev_it->first.oid.stripe & ~STRIPE_MASK)) &&
|
(it->first.oid.inode != prev_it->first.oid.inode ||
|
||||||
fb->rollback_lists[it->first.osd_num].size() >= FLUSH_BATCH ||
|
(it->first.oid.stripe & ~STRIPE_MASK) != (prev_it->first.oid.stripe & ~STRIPE_MASK)) &&
|
||||||
fb->stable_lists[it->first.osd_num].size() >= FLUSH_BATCH)
|
(fb->rollback_lists[it->first.osd_num].size() >= FLUSH_BATCH ||
|
||||||
|
fb->stable_lists[it->first.osd_num].size() >= FLUSH_BATCH))
|
||||||
{
|
{
|
||||||
// Stop only at the object boundary
|
// Stop only at the object boundary
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user