Skip to content

Commit

Permalink
Merge pull request ceph#43803 from Matan-B/wip-matanb-pgstats-support
Browse files Browse the repository at this point in the history
crimson/osd: Fixing empty PG stats issue

Reviewed-by: Samuel Just <[email protected]>
  • Loading branch information
athanatos authored Nov 16, 2021
2 parents 788b810 + 7fe0fc9 commit 3182a81
Show file tree
Hide file tree
Showing 5 changed files with 259 additions and 141 deletions.
77 changes: 39 additions & 38 deletions src/crimson/osd/ops_executer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -456,12 +456,12 @@ OpsExecuter::execute_op(OSDOp& osd_op)
case CEPH_OSD_OP_SYNC_READ:
[[fallthrough]];
case CEPH_OSD_OP_READ:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.read(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.read(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_SPARSE_READ:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.sparse_read(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.sparse_read(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_CHECKSUM:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
Expand All @@ -472,68 +472,68 @@ OpsExecuter::execute_op(OSDOp& osd_op)
return backend.cmp_ext(os, osd_op);
});
case CEPH_OSD_OP_GETXATTR:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.getxattr(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.getxattr(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_GETXATTRS:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.get_xattrs(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.get_xattrs(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_CMPXATTR:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.cmp_xattr(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.cmp_xattr(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_RMXATTR:
return do_write_op(
[&osd_op] (auto& backend, auto& os, auto& txn) {
return backend.rm_xattr(os, osd_op, txn);
}, true);
case CEPH_OSD_OP_CREATE:
return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) {
return backend.create(os, osd_op, txn);
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.create(os, osd_op, txn, delta_stats);
}, true);
case CEPH_OSD_OP_WRITE:
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.write(os, osd_op, txn, *osd_op_params);
return backend.write(os, osd_op, txn, *osd_op_params, delta_stats);
}, true);
case CEPH_OSD_OP_WRITESAME:
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.write_same(os, osd_op, txn, *osd_op_params);
return backend.write_same(os, osd_op, txn, *osd_op_params, delta_stats);
}, true);
case CEPH_OSD_OP_WRITEFULL:
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.writefull(os, osd_op, txn, *osd_op_params);
return backend.writefull(os, osd_op, txn, *osd_op_params, delta_stats);
}, true);
case CEPH_OSD_OP_APPEND:
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.append(os, osd_op, txn, *osd_op_params);
return backend.append(os, osd_op, txn, *osd_op_params, delta_stats);
}, true);
case CEPH_OSD_OP_TRUNCATE:
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
// FIXME: rework needed. Move this out to do_write_op(), introduce
// do_write_op_no_user_modify()...
return backend.truncate(os, osd_op, txn, *osd_op_params);
return backend.truncate(os, osd_op, txn, *osd_op_params, delta_stats);
}, true);
case CEPH_OSD_OP_ZERO:
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.zero(os, osd_op, txn, *osd_op_params);
return backend.zero(os, osd_op, txn, *osd_op_params, delta_stats);
}, true);
case CEPH_OSD_OP_SETALLOCHINT:
return osd_op_errorator::now();
case CEPH_OSD_OP_SETXATTR:
return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) {
return backend.setxattr(os, osd_op, txn);
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.setxattr(os, osd_op, txn, delta_stats);
}, true);
case CEPH_OSD_OP_DELETE:
return do_write_op([] (auto& backend, auto& os, auto& txn) {
return backend.remove(os, txn);
return do_write_op([this] (auto& backend, auto& os, auto& txn) {
return backend.remove(os, txn, delta_stats);
}, true);
case CEPH_OSD_OP_CALL:
return this->do_op_call(osd_op);
case CEPH_OSD_OP_STAT:
// note: stat does not require RD
return do_const_op([&osd_op] (/* const */auto& backend, const auto& os) {
return backend.stat(os, osd_op);
return do_const_op([this, &osd_op] (/* const */auto& backend, const auto& os) {
return backend.stat(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_TMAPUP:
// TODO: there was an effort to kill TMAP in ceph-osd. According to
Expand All @@ -543,20 +543,20 @@ OpsExecuter::execute_op(OSDOp& osd_op)

// OMAP
case CEPH_OSD_OP_OMAPGETKEYS:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.omap_get_keys(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.omap_get_keys(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_OMAPGETVALS:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.omap_get_vals(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.omap_get_vals(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_OMAPGETHEADER:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.omap_get_header(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.omap_get_header(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_OMAPGETVALSBYKEYS:
return do_read_op([&osd_op] (auto& backend, const auto& os) {
return backend.omap_get_vals_by_keys(os, osd_op);
return do_read_op([this, &osd_op] (auto& backend, const auto& os) {
return backend.omap_get_vals_by_keys(os, osd_op, delta_stats);
});
case CEPH_OSD_OP_OMAPSETVALS:
#if 0
Expand All @@ -565,29 +565,30 @@ OpsExecuter::execute_op(OSDOp& osd_op)
}
#endif
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.omap_set_vals(os, osd_op, txn, *osd_op_params);
return backend.omap_set_vals(os, osd_op, txn, *osd_op_params, delta_stats);
}, true);
case CEPH_OSD_OP_OMAPSETHEADER:
#if 0
if (!pg.get_pool().info.supports_omap()) {
return crimson::ct_error::operation_not_supported::make();
}
#endif
return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) {
return backend.omap_set_header(os, osd_op, txn);
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.omap_set_header(os, osd_op, txn, *osd_op_params,
delta_stats);
}, true);
case CEPH_OSD_OP_OMAPRMKEYRANGE:
#if 0
if (!pg.get_pool().info.supports_omap()) {
return crimson::ct_error::operation_not_supported::make();
}
#endif
return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) {
return backend.omap_remove_range(os, osd_op, txn);
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.omap_remove_range(os, osd_op, txn, delta_stats);
}, true);
case CEPH_OSD_OP_OMAPCLEAR:
return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) {
return backend.omap_clear(os, osd_op, txn, *osd_op_params);
return backend.omap_clear(os, osd_op, txn, *osd_op_params, delta_stats);
}, true);

// watch/notify
Expand Down
5 changes: 5 additions & 0 deletions src/crimson/osd/ops_executer.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ class OpsExecuter : public seastar::enable_lw_shared_from_this<OpsExecuter> {

size_t num_read = 0; ///< count read ops
size_t num_write = 0; ///< count update ops
object_stat_sum_t delta_stats;

// this gizmo could be wrapped in std::optional for the sake of lazy
// initialization. we don't need it for ops that doesn't have effect
Expand Down Expand Up @@ -284,6 +285,10 @@ class OpsExecuter : public seastar::enable_lw_shared_from_this<OpsExecuter> {
bool has_seen_write() const {
return num_write > 0;
}

object_stat_sum_t& get_stats(){
return delta_stats;
}
};

template <class Context, class MainFunc, class EffectFunc>
Expand Down
2 changes: 2 additions & 0 deletions src/crimson/osd/pg.cc
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ void PG::on_activate_complete()
get_osdmap_epoch(),
PeeringState::AllReplicasRecovered{});
}
publish_stats_to_osd();
backend->on_activate_complete();
}

Expand Down Expand Up @@ -676,6 +677,7 @@ PG::do_osd_ops_execute(
logger().debug(
"do_osd_ops_execute: object {} all operations successful",
ox->get_target());
peering_state.apply_op_stats(ox->get_target(), ox->get_stats());
return std::move(*ox).flush_changes_n_do_ops_effects(
Ref<PG>{this},
[this, &op_info, &ops] (auto&& txn,
Expand Down
Loading

0 comments on commit 3182a81

Please sign in to comment.