diff --git a/src/VecSim/vec_sim_tiered_index.h b/src/VecSim/vec_sim_tiered_index.h index 61294b90b..d097b1ae4 100644 --- a/src/VecSim/vec_sim_tiered_index.h +++ b/src/VecSim/vec_sim_tiered_index.h @@ -423,14 +423,22 @@ VecSimDebugInfoIterator *VecSimTieredIndex::debugInfoIterato .fieldType = INFOFIELD_UINT64, .fieldValue = {FieldValue{.uintegerValue = info.tieredInfo.bufferLimit}}}); - infoIterator->addInfoField(VecSim_InfoField{ - .fieldName = VecSimCommonStrings::FRONTEND_INDEX_STRING, - .fieldType = INFOFIELD_ITERATOR, - .fieldValue = {FieldValue{.iteratorValue = this->frontendIndex->debugInfoIterator()}}}); + // Acquire shared locks to safely access each sub-index's debug info during background indexing. + // Only hold each lock while accessing its respective index to minimize contention. + { + std::shared_lock flat_lock(this->flatIndexGuard); + infoIterator->addInfoField(VecSim_InfoField{ + .fieldName = VecSimCommonStrings::FRONTEND_INDEX_STRING, + .fieldType = INFOFIELD_ITERATOR, + .fieldValue = {FieldValue{.iteratorValue = this->frontendIndex->debugInfoIterator()}}}); + } - infoIterator->addInfoField(VecSim_InfoField{ - .fieldName = VecSimCommonStrings::BACKEND_INDEX_STRING, - .fieldType = INFOFIELD_ITERATOR, - .fieldValue = {FieldValue{.iteratorValue = this->backendIndex->debugInfoIterator()}}}); + { + std::shared_lock main_lock(this->mainIndexGuard); + infoIterator->addInfoField(VecSim_InfoField{ + .fieldName = VecSimCommonStrings::BACKEND_INDEX_STRING, + .fieldType = INFOFIELD_ITERATOR, + .fieldValue = {FieldValue{.iteratorValue = this->backendIndex->debugInfoIterator()}}}); + } return infoIterator; };