fix pcode calculate issue
This commit is contained in:
23
deps/oblib/src/rpc/obrpc/ob_rpc_stat.h
vendored
23
deps/oblib/src/rpc/obrpc/ob_rpc_stat.h
vendored
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user