| 333 | } |
| 334 | |
| 335 | fs::path DataStorageController::AcquireRequestTempDir(const std::string& clientIp) |
| 336 | { |
| 337 | // Allocate directory before acquiring the lock (IO may be slow; no lock needed yet). |
| 338 | auto newDir = fs::path(IOUtil::CreateTemporaryDirectory("data_XXXXXX", m_TempDirectory)); |
| 339 | |
| 340 | std::lock_guard<std::mutex> lock(m_ActiveTempDirsMutex); |
| 341 | |
| 342 | auto& queue = m_ActiveTempDirsByIp[clientIp]; |
| 343 | |
| 344 | // Evict this client's oldest directory if the quota is reached. |
| 345 | while (queue.size() >= m_MaxActiveTempDirsPerIp && !queue.empty()) |
| 346 | { |
| 347 | fs::remove_all(queue.front()); // safe even if already deleted |
| 348 | queue.pop_front(); |
| 349 | } |
| 350 | |
| 351 | queue.push_back(newDir); |
| 352 | return newDir; |
| 353 | } |
| 354 | |
| 355 | void DataStorageController::ReleaseRequestTempDir(const std::string& clientIp, const fs::path& dir) |
| 356 | { |
no test coverage detected