trying to clean up using std c++11 other than current project library.
Signed-off-by: Xiaowei Chen <chen.xiaowei@h3c.com>
agent_stop_flag(false),
agent_timer_lock("OSDService::agent_timer_lock"),
agent_timer(osd->client_messenger->cct, agent_timer_lock),
- promote_probability_millis(1000),
last_recalibrate(ceph_clock_now(NULL)),
promote_max_objects(0),
promote_max_bytes(0),
next_notif_id(0),
backfill_request_lock("OSDService::backfill_request_lock"),
backfill_request_timer(cct, backfill_request_lock, false),
- last_tid(0),
reserver_finisher(cct),
local_reserver(&reserver_finisher, cct->_conf->osd_max_backfills,
cct->_conf->osd_min_recovery_priority),
cur_ratio(0),
epoch_lock("OSDService::epoch_lock"),
boot_epoch(0), up_epoch(0), bind_epoch(0),
- is_stopping_lock("OSDService::is_stopping_lock"),
- state(NOT_STOPPING)
+ is_stopping_lock("OSDService::is_stopping_lock")
#ifdef PG_DEBUG_REFS
, pgid_lock("OSDService::pgid_lock")
#endif
utime_t now = ceph_clock_now(NULL);
double dur = now - last_recalibrate;
last_recalibrate = now;
- unsigned prob = promote_probability_millis.read();
+ unsigned prob = promote_probability_millis;
uint64_t target_obj_sec = g_conf->osd_tier_promote_max_objects_sec;
uint64_t target_bytes_sec = g_conf->osd_tier_promote_max_bytes_sec;
dout(10) << __func__ << " actual " << actual
<< ", actual/prob ratio " << ratio
<< ", adjusted new_prob " << new_prob
- << ", prob " << promote_probability_millis.read() << " -> " << prob
+ << ", prob " << promote_probability_millis << " -> " << prob
<< dendl;
- promote_probability_millis.set(prob);
+ promote_probability_millis = prob;
// set hard limits for this interval to mitigate stampedes
promote_max_objects = target_obj_sec * OSD::OSD_TICK_INTERVAL * 2;
dev_path(dev), journal_path(jdev),
asok_hook(NULL),
osd_compat(get_osd_compat_set()),
- state(STATE_INITIALIZING),
osd_tp(cct, "OSD::osd_tp", "tp_osd", cct->_conf->osd_op_threads, "osd_op_threads"),
osd_op_tp(cct, "OSD::osd_op_tp", "tp_osd_tp",
cct->_conf->osd_op_num_threads_per_shard * cct->_conf->osd_op_num_shards),
++p) {
dout(20) << " kicking pg " << p->first << dendl;
p->second->lock();
- if (p->second->ref.read() != 1) {
+ if (p->second->ref != 1) {
derr << "pgid " << p->first << " has ref count of "
- << p->second->ref.read() << dendl;
+ << p->second->ref << dendl;
#ifdef PG_DEBUG_REFS
p->second->dump_live_ids();
#endif
private:
/// throttle promotion attempts
- atomic_t promote_probability_millis; ///< probability thousands. one word.
+ std::atomic_uint promote_probability_millis{1000}; ///< probability thousands. one word.
PromoteCounter promote_counter;
utime_t last_recalibrate;
unsigned long promote_max_objects, promote_max_bytes;
bool promote_throttle() {
// NOTE: lockless! we rely on the probability being a single word.
promote_counter.attempt();
- if ((unsigned)rand() % 1000 > promote_probability_millis.read())
+ if ((unsigned)rand() % 1000 > promote_probability_millis)
return true; // yes throttle (no promote)
if (promote_max_objects &&
- promote_counter.objects.read() > promote_max_objects)
+ promote_counter.objects > promote_max_objects)
return true; // yes throttle
if (promote_max_bytes &&
- promote_counter.bytes.read() > promote_max_bytes)
+ promote_counter.bytes > promote_max_bytes)
return true; // yes throttle
return false; // no throttle (promote)
}
// -- tids --
// for ops i issue
- atomic_t last_tid;
+ std::atomic_uint last_tid{0};
ceph_tid_t get_tid() {
- return (ceph_tid_t)last_tid.inc();
+ return (ceph_tid_t)last_tid++;
}
// -- backfill_reservation --
NOT_STOPPING,
PREPARING_TO_STOP,
STOPPING };
- atomic_t state;
+ std::atomic_int state{NOT_STOPPING};
int get_state() {
- return state.read();
+ return state;
}
void set_state(int s) {
- state.set(s);
+ state = s;
}
bool is_stopping() {
- return get_state() == STOPPING;
+ return state == STOPPING;
}
bool is_preparing_to_stop() {
- return get_state() == PREPARING_TO_STOP;
+ return state == PREPARING_TO_STOP;
}
bool prepare_to_stop();
void got_stop_ack();
}
private:
- atomic_t state;
+ std::atomic_int state{STATE_INITIALIZING};
public:
int get_state() {
- return state.read();
+ return state;
}
void set_state(int s) {
- state.set(s);
+ state = s;
}
bool is_initializing() {
- return get_state() == STATE_INITIALIZING;
+ return state == STATE_INITIALIZING;
}
bool is_preboot() {
- return get_state() == STATE_PREBOOT;
+ return state == STATE_PREBOOT;
}
bool is_booting() {
- return get_state() == STATE_BOOTING;
+ return state == STATE_BOOTING;
}
bool is_active() {
- return get_state() == STATE_ACTIVE;
+ return state == STATE_ACTIVE;
}
bool is_stopping() {
- return get_state() == STATE_STOPPING;
+ return state == STATE_STOPPING;
}
bool is_waiting_for_healthy() {
- return get_state() == STATE_WAITING_FOR_HEALTHY;
+ return state == STATE_WAITING_FOR_HEALTHY;
}
private:
void PG::get(const char* tag)
{
- ref.inc();
+ ref++;
#ifdef PG_DEBUG_REFS
Mutex::Locker l(_ref_id_lock);
if (!_tag_counts.count(tag)) {
}
}
#endif
- if (ref.dec() == 0)
+ if (--ref== 0)
delete this;
}
#ifdef PG_DEBUG_REFS
uint64_t PG::get_with_id()
{
- ref.inc();
+ ref++;
Mutex::Locker l(_ref_id_lock);
uint64_t id = ++_ref_id;
BackTrace bt(0);
assert(_live_ids.count(id));
_live_ids.erase(id);
}
- if (ref.dec() == 0)
+ if (--ref == 0)
delete this;
}
map_lock("PG::map_lock"),
osdmap_ref(curmap), last_persisted_osdmap_ref(curmap), pool(_pool),
_lock("PG::_lock"),
- ref(0),
#ifdef PG_DEBUG_REFS
_ref_id_lock("PG::_ref_id_lock"), _ref_id(0),
#endif
#include "include/stringify.h"
#include "osd_types.h"
#include "include/xlist.h"
-#include "include/atomic.h"
#include "SnapMapper.h"
#include "PGLog.h"
#include "include/str_list.h"
#include "PGBackend.h"
+#include <atomic>
#include <list>
#include <memory>
#include <string>
* put_unlock() when done with the current pointer (_most common_).
*/
mutable Mutex _lock;
- atomic_t ref;
+ std::atomic_uint ref{0};
#ifdef PG_DEBUG_REFS
Mutex _ref_id_lock;
#include "OpRequest.h"
#include "include/cmp.h"
#include "librados/ListObjectImpl.h"
+#include <atomic>
#define CEPH_OSD_ONDISK_MAGIC "ceph osd volume v026"
// PromoteCounter
struct PromoteCounter {
- atomic64_t attempts, objects, bytes;
+ std::atomic_ullong attempts{0};
+ std::atomic_ullong objects{0};
+ std::atomic_ullong bytes{0};
void attempt() {
- attempts.inc();
+ attempts++;
}
void finish(uint64_t size) {
- objects.inc();
- bytes.add(size);
+ objects++;
+ bytes += size;
}
void sample_and_attenuate(uint64_t *a, uint64_t *o, uint64_t *b) {
- *a = attempts.read();
- *o = objects.read();
- *b = bytes.read();
- attempts.set(*a / 2);
- objects.set(*o / 2);
- bytes.set(*b / 2);
+ *a = attempts;
+ *o = objects;
+ *b = bytes;
+ attempts = *a / 2;
+ objects = *o / 2;
+ bytes = *b / 2;
}
};