MCPcopy Create free account
hub / github.com/Tencent/phxqueue / Init

Method Init

phxqueue/lock/lockmgr.cpp:60–155  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

58LockMgr::~LockMgr() {}
59
60comm::RetCode LockMgr::Init(const string &mirror_dir_path) {
61 impl_->groups.reserve(impl_->lock->GetLockOption()->nr_group);
62 for (int paxos_group_id{0};
63 impl_->lock->GetLockOption()->nr_group > paxos_group_id; ++paxos_group_id) {
64 impl_->groups.emplace_back();
65 auto &&group(impl_->groups[paxos_group_id]);
66
67 // recover leveldb
68 string group_directory{mirror_dir_path + to_string(paxos_group_id)};
69 comm::RetCode ret{group.leveldb.Init(LockDb::Type::LEVELDB, group_directory)};
70 if (comm::RetCode::RET_OK != ret) {
71 QLErr("paxos_group_id %d init leveldb err %d path \"%s\"", paxos_group_id, ret, group_directory.c_str());
72
73 assert(false);
74 }
75
76 // init map
77 ret = group.map.Init(LockDb::Type::MAP, "");
78 if (comm::RetCode::RET_OK != ret) {
79 QLErr("paxos_group_id %d init map err %d", paxos_group_id, ret);
80
81 assert(false);
82 }
83
84 // recover map
85 for (group.leveldb.SeekToFirst(); group.leveldb.Valid(); group.leveldb.Next()) {
86 string lock_key;
87 proto::LocalLockInfo local_lock_info;
88 comm::RetCode ret{group.leveldb.GetCurrent(lock_key, local_lock_info)};
89 if (comm::RetCode::RET_ERR_IGNORE == ret) {
90 QLInfo("paxos_group_id %d lock_key \"%s\" GetCurrent ignore", paxos_group_id, lock_key.c_str());
91
92 continue;
93 }
94
95 if (comm::RetCode::RET_OK != ret) {
96 QLErr("paxos_group_id %d lock_key \"%s\" GetCurrent err %d", paxos_group_id, lock_key.c_str(), ret);
97
98 assert(false);
99 }
100 // reset expire time
101 local_lock_info.set_expire_time_ms(comm::utils::Time::GetSteadyClockMS() +
102 local_lock_info.lease_time_ms());
103 group.map.Put(lock_key, move(local_lock_info));
104 }
105
106 // recover checkpoint
107 uint64_t checkpoint{phxpaxos::NoCheckpoint};
108 ret = ReadCheckpoint(paxos_group_id, checkpoint);
109 if (comm::RetCode::RET_ERR_KEY_NOT_EXIST == ret) {
110 QLErr("topic_id %d paxos_group_id %d ReadCheckpoint not exist",
111 impl_->lock->GetTopicID(), paxos_group_id);
112 } else if (comm::RetCode::RET_OK == ret) {
113 QLInfo("topic_id %d paxos_group_id %d ReadCheckpoint cp %llu ok",
114 impl_->lock->GetTopicID(), paxos_group_id, checkpoint);
115 } else {
116 QLErr("topic_id %d paxos_group_id %d ReadCheckpoint err %d",
117 impl_->lock->GetTopicID(), paxos_group_id, ret);

Callers

nothing calls this directly

Calls 9

GetLockOptionMethod · 0.80
SeekToFirstMethod · 0.80
ValidMethod · 0.80
GetCurrentMethod · 0.80
NextMethod · 0.45
PutMethod · 0.45
GetTopicIDMethod · 0.45
set_last_instance_idMethod · 0.45
checkpointMethod · 0.45

Tested by

no test coverage detected