From 6155b23a7ee2d77e56d67d176ed2f747c62af7b2 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 28 Feb 2021 19:36:14 +0300 Subject: [PATCH] Replace pgs[id] with pgs.at(id) to prevent accidental auto-vivification --- src/osd_cluster.cpp | 5 ++++- src/osd_flush.cpp | 2 +- src/osd_primary.cpp | 10 +++++----- src/osd_primary_subops.cpp | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/osd_cluster.cpp b/src/osd_cluster.cpp index 0f333d7e..88f3acfb 100644 --- a/src/osd_cluster.cpp +++ b/src/osd_cluster.cpp @@ -593,7 +593,10 @@ void osd_t::apply_pg_config() } else { - throw std::runtime_error("Unexpected PG "+std::to_string(pg_num)+" state: "+std::to_string(pg_it->second.state)); + throw std::runtime_error( + "Unexpected PG "+std::to_string(pool_id)+"/"+std::to_string(pg_num)+ + " state: "+std::to_string(pg_it->second.state) + ); } } auto & pg = this->pgs[{ .pool_id = pool_id, .pg_num = pg_num }]; diff --git a/src/osd_flush.cpp b/src/osd_flush.cpp index e9309181..acdabb6d 100644 --- a/src/osd_flush.cpp +++ b/src/osd_flush.cpp @@ -95,7 +95,7 @@ void osd_t::handle_flush_op(bool rollback, pool_id_t pool_id, pg_num_t pg_num, p { // This flush batch is done std::vector continue_ops; - auto & pg = pgs[pg_id]; + auto & pg = pgs.at(pg_id); auto it = pg.flush_actions.begin(), prev_it = it; auto erase_start = it; while (1) diff --git a/src/osd_primary.cpp b/src/osd_primary.cpp index 732a8cec..21388196 100644 --- a/src/osd_primary.cpp +++ b/src/osd_primary.cpp @@ -103,7 +103,7 @@ void osd_t::continue_primary_read(osd_op_t *cur_op) if (op_data->st == 1) goto resume_1; else if (op_data->st == 2) goto resume_2; { - auto & pg = pgs[{ .pool_id = INODE_POOL(op_data->oid.inode), .pg_num = op_data->pg_num }]; + auto & pg = pgs.at({ .pool_id = INODE_POOL(op_data->oid.inode), .pg_num = op_data->pg_num }); for (int role = 0; role < op_data->pg_data_size; role++) { op_data->stripes[role].read_start = op_data->stripes[role].req_start; @@ -211,7 +211,7 @@ void osd_t::continue_primary_write(osd_op_t *cur_op) return; } osd_primary_op_data_t *op_data = cur_op->op_data; - auto & pg = pgs[{ .pool_id = INODE_POOL(op_data->oid.inode), .pg_num = op_data->pg_num }]; + auto & pg = pgs.at({ .pool_id = INODE_POOL(op_data->oid.inode), .pg_num = op_data->pg_num }); if (op_data->st == 1) goto resume_1; else if (op_data->st == 2) goto resume_2; else if (op_data->st == 3) goto resume_3; @@ -582,7 +582,7 @@ resume_2: int dpg = 0; for (auto dirty_pg_num: dirty_pgs) { - pgs[dirty_pg_num].inflight++; + pgs.at(dirty_pg_num).inflight++; op_data->dirty_pgs[dpg++] = dirty_pg_num; } dirty_pgs.clear(); @@ -639,7 +639,7 @@ resume_6: .pool_id = INODE_POOL(w.oid.inode), .pg_num = map_to_pg(w.oid, st_cli.pool_config.at(INODE_POOL(w.oid.inode)).pg_stripe_size), }; - if (pgs[wpg].state & PG_ACTIVE) + if (pgs.at(wpg).state & PG_ACTIVE) { uint64_t & dest = this->unstable_writes[(osd_object_id_t){ .osd_num = unstable_osd.osd_num, @@ -750,7 +750,7 @@ void osd_t::continue_primary_del(osd_op_t *cur_op) return; } osd_primary_op_data_t *op_data = cur_op->op_data; - auto & pg = pgs[{ .pool_id = INODE_POOL(op_data->oid.inode), .pg_num = op_data->pg_num }]; + auto & pg = pgs.at({ .pool_id = INODE_POOL(op_data->oid.inode), .pg_num = op_data->pg_num }); if (op_data->st == 1) goto resume_1; else if (op_data->st == 2) goto resume_2; else if (op_data->st == 3) goto resume_3; diff --git a/src/osd_primary_subops.cpp b/src/osd_primary_subops.cpp index e888b7a2..c0ecb91b 100644 --- a/src/osd_primary_subops.cpp +++ b/src/osd_primary_subops.cpp @@ -40,7 +40,7 @@ void osd_t::finish_op(osd_op_t *cur_op, int retval) { if (cur_op->op_data->pg_num > 0) { - auto & pg = pgs[{ .pool_id = INODE_POOL(cur_op->op_data->oid.inode), .pg_num = cur_op->op_data->pg_num }]; + auto & pg = pgs.at({ .pool_id = INODE_POOL(cur_op->op_data->oid.inode), .pg_num = cur_op->op_data->pg_num }); pg.inflight--; assert(pg.inflight >= 0); if ((pg.state & PG_STOPPING) && pg.inflight == 0 && !pg.flush_batch)