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