54bool OpenFile(
const std::string &entity, std::string &open_error_message);
57void Apply(
int reqsize,
int reqops,
int uid);
59bool IsThrottling() {
return (m_ops_per_second > 0) || (m_bytes_per_second > 0);}
61void SetThrottles(
float reqbyterate,
float reqoprate,
int concurrency,
float interval_length)
62 {m_interval_length_seconds = interval_length; m_bytes_per_second = reqbyterate;
63 m_ops_per_second = reqoprate; m_concurrency_limit = concurrency;}
65void SetLoadShed(std::string &hostname,
unsigned port,
unsigned frequency)
66 {m_loadshed_host = hostname; m_loadshed_port = port; m_loadshed_frequency = frequency;}
68void SetMaxOpen(
unsigned long max_open) {m_max_open = max_open;}
70void SetMaxConns(
unsigned long max_conns) {m_max_conns = max_conns;}
77int GetUid(
const char *username);
81void PrepLoadShed(
const char *opaque, std::string &lsOpaque);
85void PerformLoadShed(
const std::string &opaque, std::string &host,
unsigned &port);
99void RecomputeInternal();
102void * RecomputeBootstrap(
void *pp);
106void GetShares(
int &shares,
int &request);
108void StealShares(
int uid,
int &reqsize,
int &reqops);
116float m_interval_length_seconds;
117float m_bytes_per_second;
118float m_ops_per_second;
119int m_concurrency_limit;
124std::vector<int> m_primary_bytes_shares;
125std::vector<int> m_secondary_bytes_shares;
126std::vector<int> m_primary_ops_shares;
127std::vector<int> m_secondary_ops_shares;
128int m_last_round_allocation;
132struct timespec m_io_wait;
133unsigned m_io_total{0};
135int m_stable_io_active;
136int m_stable_io_total{0};
137struct timespec m_stable_io_wait;
140std::string m_loadshed_host;
141unsigned m_loadshed_port;
142unsigned m_loadshed_frequency;
143int m_loadshed_limit_hit;
146unsigned long m_max_open{0};
147unsigned long m_max_conns{0};
148std::unordered_map<std::string, unsigned long> m_file_counters;
149std::unordered_map<std::string, unsigned long> m_conn_counters;
150std::unordered_map<std::string, std::unique_ptr<std::unordered_map<pid_t, unsigned long>>> m_active_conns;
151std::mutex m_file_mutex;
156static const char *TraceID;