Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

common/TrackedOp: move ShardedTrackingData to .cc #10639

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
29 changes: 29 additions & 0 deletions src/common/TrackedOp.cc
Expand Up @@ -87,6 +87,35 @@ void OpHistory::dump_ops(utime_t now, Formatter *f)
f->close_section();
}

struct ShardedTrackingData {
Mutex ops_in_flight_lock_sharded;
xlist<TrackedOp *> ops_in_flight_sharded;
explicit ShardedTrackingData(string lock_name):
ops_in_flight_lock_sharded(lock_name.c_str()) {}
};

OpTracker::OpTracker(CephContext *cct_, bool tracking, uint32_t num_shards):
seq(0),
num_optracker_shards(num_shards),
complaint_time(0), log_threshold(0),
tracking_enabled(tracking),
lock("OpTracker::lock"), cct(cct_) {
for (uint32_t i = 0; i < num_optracker_shards; i++) {
char lock_name[32] = {0};
snprintf(lock_name, sizeof(lock_name), "%s:%d", "OpTracker::ShardedLock", i);
ShardedTrackingData* one_shard = new ShardedTrackingData(lock_name);
sharded_in_flight_list.push_back(one_shard);
}
}

OpTracker::~OpTracker() {
while (!sharded_in_flight_list.empty()) {
assert((sharded_in_flight_list.back())->ops_in_flight_sharded.empty());
delete sharded_in_flight_list.back();
sharded_in_flight_list.pop_back();
}
}

bool OpTracker::dump_historic_ops(Formatter *f)
{
RWLock::RLocker l(lock);
Expand Down
29 changes: 3 additions & 26 deletions src/common/TrackedOp.h
Expand Up @@ -53,6 +53,7 @@ class OpHistory {
}
};

struct ShardedTrackingData;
class OpTracker {
class RemoveOnDelete {
OpTracker *tracker;
Expand All @@ -63,12 +64,6 @@ class OpTracker {
friend class RemoveOnDelete;
friend class OpHistory;
atomic64_t seq;
struct ShardedTrackingData {
Mutex ops_in_flight_lock_sharded;
xlist<TrackedOp *> ops_in_flight_sharded;
explicit ShardedTrackingData(string lock_name):
ops_in_flight_lock_sharded(lock_name.c_str()) {}
};
vector<ShardedTrackingData*> sharded_in_flight_list;
uint32_t num_optracker_shards;
OpHistory history;
Expand All @@ -80,19 +75,7 @@ class OpTracker {

public:
CephContext *cct;
OpTracker(CephContext *cct_, bool tracking, uint32_t num_shards) : seq(0),
num_optracker_shards(num_shards),
complaint_time(0), log_threshold(0),
tracking_enabled(tracking),
lock("OpTracker::lock"), cct(cct_) {

for (uint32_t i = 0; i < num_optracker_shards; i++) {
char lock_name[32] = {0};
snprintf(lock_name, sizeof(lock_name), "%s:%d", "OpTracker::ShardedLock", i);
ShardedTrackingData* one_shard = new ShardedTrackingData(lock_name);
sharded_in_flight_list.push_back(one_shard);
}
}
OpTracker(CephContext *cct_, bool tracking, uint32_t num_shards);

void set_complaint_and_threshold(float time, int threshold) {
complaint_time = time;
Expand Down Expand Up @@ -127,13 +110,7 @@ class OpTracker {
void on_shutdown() {
history.on_shutdown();
}
~OpTracker() {
while (!sharded_in_flight_list.empty()) {
assert((sharded_in_flight_list.back())->ops_in_flight_sharded.empty());
delete sharded_in_flight_list.back();
sharded_in_flight_list.pop_back();
}
}
~OpTracker();

template <typename T, typename U>
typename T::Ref create_request(U params)
Expand Down