fix pcode calculate issue

This commit is contained in:
obdev
2023-02-21 09:17:05 +00:00
committed by ob-robot
parent e2fd831532
commit a3e918d57d

View File

@ -147,15 +147,22 @@ private:
template <int N>
void RpcStatBulk<N>::add_piece(const RpcStatPiece &piece)
{
const int64_t start = rand_.get(0, N - 1);
for (int64_t i = 0; ;i++) {
const int64_t idx = (i + start) % N;
if (common::OB_SUCCESS == items_[idx].lock_.trylock()) {
items_[idx].add_piece(piece);
if (OB_UNLIKELY(common::OB_SUCCESS != items_[idx].lock_.unlock())) {
RPC_LOG_RET(ERROR, common::OB_ERR_UNEXPECTED, "unlock fail");
if (piece.reset_dcount_){
for (int64_t i = 0; i < N; i++) {
// only reset dcount, no need lock
items_[i].add_piece(piece);
}
} else {
const int64_t start = rand_.get(0, N - 1);
for (int64_t i = 0;; i++) {
const int64_t idx = (i + start) % N;
if (common::OB_SUCCESS == items_[idx].lock_.trylock()) {
items_[idx].add_piece(piece);
if (OB_UNLIKELY(common::OB_SUCCESS != items_[idx].lock_.unlock())) {
RPC_LOG_RET(ERROR, common::OB_ERR_UNEXPECTED, "unlock fail");
}
break;
}
break;
}
}
}