| 148 | LockSM::~LockSM() {} |
| 149 | |
| 150 | bool LockSM::Execute(const int paxos_group_id, const uint64_t instance_id, |
| 151 | const string &paxos_value, phxpaxos::SMCtx *sm_ctx) { |
| 152 | comm::LockSMBP::GetThreadInstance()-> |
| 153 | OnExecute(impl_->lock->GetTopicID(), paxos_group_id, |
| 154 | instance_id, paxos_value); |
| 155 | QLVerb("topic_id %d paxos_group_id %d instance_id %llu", |
| 156 | impl_->lock->GetTopicID(), paxos_group_id, instance_id); |
| 157 | |
| 158 | proto::LockPaxosArgs args; |
| 159 | bool succ{args.ParseFromString(paxos_value)}; |
| 160 | if (!succ) { |
| 161 | QLErr("topic_id %d paxos_group_id %d instance_id %llu ParseFromString err", |
| 162 | impl_->lock->GetTopicID(), paxos_group_id, instance_id); |
| 163 | |
| 164 | return false; |
| 165 | } |
| 166 | |
| 167 | int ret{DoExecute(impl_->lock, LockDb::Type::MAP, paxos_group_id, |
| 168 | instance_id, args, false, sm_ctx)}; |
| 169 | |
| 170 | if (!args.master_addr().ip().empty()) { |
| 171 | auto opt(impl_->lock->GetLockOption()); |
| 172 | |
| 173 | comm::proto::Addr addr; |
| 174 | addr.set_ip(opt->ip); |
| 175 | addr.set_port(opt->port); |
| 176 | addr.set_paxos_port(opt->paxos_port); |
| 177 | |
| 178 | if (!(addr.ip() == args.master_addr().ip() && |
| 179 | addr.port() == args.master_addr().port() && |
| 180 | addr.paxos_port() == args.master_addr().paxos_port())) { |
| 181 | QLInfo("topic_id %d paxos_group_id %d DropMaster self_addr %s master_addr %s", |
| 182 | impl_->lock->GetTopicID(), paxos_group_id, addr.ip().c_str(), |
| 183 | args.master_addr().ip().c_str()); |
| 184 | auto &&node(impl_->lock->GetNode()); |
| 185 | if (node) { |
| 186 | node->DropMaster(paxos_group_id); |
| 187 | } else { |
| 188 | // init should not drop master |
| 189 | QLInfo("topic_id %d paxos_group_id %d node null self_addr %s master_addr %s", |
| 190 | impl_->lock->GetTopicID(), paxos_group_id, addr.ip().c_str(), |
| 191 | args.master_addr().ip().c_str()); |
| 192 | } |
| 193 | } |
| 194 | } |
| 195 | |
| 196 | return ret; |
| 197 | } |
| 198 | |
| 199 | bool LockSM::ExecuteForCheckpoint(const int paxos_group_id, const uint64_t instance_id, |
| 200 | const string &paxos_value) { |
nothing calls this directly
no test coverage detected