From 581d02e58107f6492c8a2a3dbb3f2beed09beb61 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sat, 3 Feb 2024 20:30:42 +0300 Subject: [PATCH] Mark secondary OSDs with deletions as dirty to not forget to sync & autosync them --- src/osd_primary.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/osd_primary.cpp b/src/osd_primary.cpp index e7a76b0f..750d0ff9 100644 --- a/src/osd_primary.cpp +++ b/src/osd_primary.cpp @@ -706,6 +706,26 @@ resume_5: remove_object_from_state(op_data->oid, &op_data->object_state, pg); deref_object_state(pg, &op_data->object_state, true); } + // Mark PG and OSDs as dirty + for (auto & chunk: (op_data->object_state ? op_data->object_state->osd_set : pg.cur_loc_set)) + { + this->dirty_osds.insert(chunk.osd_num); + } + for (auto cl_it = msgr.clients.find(cur_op->peer_fd); cl_it != msgr.clients.end(); ) + { + cl_it->second->dirty_pgs.insert({ .pool_id = pg.pool_id, .pg_num = pg.pg_num }); + break; + } + dirty_pgs.insert({ .pool_id = pg.pool_id, .pg_num = pg.pg_num }); + if (immediate_commit == IMMEDIATE_NONE) + { + unstable_write_count++; + if (unstable_write_count >= autosync_writes) + { + unstable_write_count = 0; + autosync(); + } + } pg.total_count--; cur_op->reply.hdr.retval = 0; continue_others: