| 175 | } |
| 176 | |
| 177 | int64_t MemTracker::GetPoolMemReserved() { |
| 178 | // Pool trackers should have a pool_name_ and no limit. |
| 179 | DCHECK(!pool_name_.empty()); |
| 180 | DCHECK_EQ(limit_, -1) << LogUsage(UNLIMITED_DEPTH); |
| 181 | |
| 182 | int64_t mem_reserved = 0L; |
| 183 | lock_guard<SpinLock> l(child_trackers_lock_); |
| 184 | for (MemTracker* child : child_trackers_) { |
| 185 | int64_t child_limit = child->limit(); |
| 186 | bool query_exec_finished = child->query_exec_finished_.Load() != 0; |
| 187 | if (child_limit > 0 && !query_exec_finished) { |
| 188 | // Make sure we don't overflow if the query limits are set to ridiculous values. |
| 189 | mem_reserved += std::min(child_limit, MemInfo::physical_mem()); |
| 190 | } else { |
| 191 | DCHECK(query_exec_finished || child_limit == -1) |
| 192 | << child->LogUsage(UNLIMITED_DEPTH); |
| 193 | mem_reserved += child->consumption(); |
| 194 | } |
| 195 | } |
| 196 | return mem_reserved; |
| 197 | } |
| 198 | |
| 199 | MemTracker* PoolMemTrackerRegistry::GetRequestPoolMemTracker( |
| 200 | const string& pool_name, bool create_if_not_present) { |
no test coverage detected