Skip to content

Commit

Permalink
curvefs/client: fix client release read data cache core dump
Browse files Browse the repository at this point in the history
  • Loading branch information
baijiaruo1 committed Mar 3, 2022
1 parent 0700c93 commit d2dbd6e
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 9 deletions.
20 changes: 12 additions & 8 deletions curvefs/src/client/s3/client_s3_cache_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,16 +120,17 @@ void FsCacheManager::Get(std::list<DataCachePtr>::iterator iter) {
lruReadDataCacheList_, iter);
}

void FsCacheManager::Delete(std::list<DataCachePtr>::iterator iter) {
bool FsCacheManager::Delete(std::list<DataCachePtr>::iterator iter) {
std::lock_guard<std::mutex> lk(lruMtx_);

if (!(*iter)->InReadCache()) {
return;
return false;
}

(*iter)->SetReadCacheState(false);
lruByte_ -= (*iter)->GetActualLen();
lruReadDataCacheList_.erase(iter);
return true;
}

CURVEFS_ERROR FsCacheManager::FsSync(bool force) {
Expand Down Expand Up @@ -1249,8 +1250,9 @@ void ChunkCacheManager::AddReadDataCache(DataCachePtr dataCache) {
for (auto key : deleteKeyVec) {
auto iter = dataRCacheMap_.find(key);
std::list<DataCachePtr>::iterator dcpIter = iter->second;
s3ClientAdaptor_->GetFsCacheManager()->Delete(dcpIter);
dataRCacheMap_.erase(iter);
if (s3ClientAdaptor_->GetFsCacheManager()->Delete(dcpIter)) {
dataRCacheMap_.erase(iter);
}
}
std::list<DataCachePtr>::iterator outIter;
bool ret =
Expand Down Expand Up @@ -1287,9 +1289,10 @@ void ChunkCacheManager::ReleaseCache() {
WriteLockGuard writeLockGuard(rwLockRead_);
auto iter = dataRCacheMap_.begin();
for (; iter != dataRCacheMap_.end(); iter++) {
s3ClientAdaptor_->GetFsCacheManager()->Delete(iter->second);
if (s3ClientAdaptor_->GetFsCacheManager()->Delete(iter->second)) {
dataRCacheMap_.erase(iter);
}
}
dataRCacheMap_.clear();
}

void ChunkCacheManager::TruncateCache(uint64_t chunkPos) {
Expand Down Expand Up @@ -1331,8 +1334,9 @@ void ChunkCacheManager::TruncateReadCache(uint64_t chunkPos) {
uint64_t dcLen = (*rIter->second)->GetLen();
uint64_t dcActualLen = (*rIter->second)->GetActualLen();
if ((dcChunkPos + dcLen) > chunkPos) {
s3ClientAdaptor_->GetFsCacheManager()->Delete(rIter->second);
dataRCacheMap_.erase(next(rIter).base());
if (s3ClientAdaptor_->GetFsCacheManager()->Delete(rIter->second)) {
dataRCacheMap_.erase(next(rIter).base());
}
} else {
break;
}
Expand Down
2 changes: 1 addition & 1 deletion curvefs/src/client/s3/client_s3_cache_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ class FsCacheManager {

bool Set(DataCachePtr dataCache,
std::list<DataCachePtr>::iterator *outIter);
void Delete(std::list<DataCachePtr>::iterator iter);
bool Delete(std::list<DataCachePtr>::iterator iter);
void Get(std::list<DataCachePtr>::iterator iter);

CURVEFS_ERROR FsSync(bool force);
Expand Down

0 comments on commit d2dbd6e

Please sign in to comment.