diff --git a/curvefs/src/metaserver/metastore.cpp b/curvefs/src/metaserver/metastore.cpp index f0d04a2731..b3339e6193 100644 --- a/curvefs/src/metaserver/metastore.cpp +++ b/curvefs/src/metaserver/metastore.cpp @@ -533,17 +533,13 @@ MetaStatusCode MetaStoreImpl::GetOrModifyS3ChunkInfo( request->s3chunkinforemove(), request->returns3chunkinfomap(), iterator); - if (rc == MetaStatusCode::OK && !request->supportstreaming()) { + if (rc == MetaStatusCode::OK && + !request->supportstreaming() && + request->returns3chunkinfomap()) { rc = partition->PaddingInodeS3ChunkInfo( fsId, inodeId, response->mutable_s3chunkinfomap(), 0); } - if (rc == MetaStatusCode::OK && !request->supportstreaming()) { - rc = partition->PaddingInodeS3ChunkInfo( - request->fsid(), request->inodeid(), - response->mutable_s3chunkinfomap(), 0); - } - response->set_statuscode(rc); return rc; } diff --git a/curvefs/test/metaserver/metastore_test.cpp b/curvefs/test/metaserver/metastore_test.cpp index a6ecfde85b..367c8f1aef 100644 --- a/curvefs/test/metaserver/metastore_test.cpp +++ b/curvefs/test/metaserver/metastore_test.cpp @@ -1486,6 +1486,37 @@ TEST_F(MetastoreTest, GetOrModifyS3ChunkInfo) { ASSERT_EQ(response.statuscode(), rc); ASSERT_EQ(response.mutable_s3chunkinfomap()->size(), 2); } + + // CASE 4: GetOrModifyS3ChunkInfo success with unsupport streaming + // and without return s3chunkinfo + { + LOG(INFO) << "CASE 3: GetOrModifyS3ChunkInfo success" + << " with unsupport streaming"; + GetOrModifyS3ChunkInfoRequest request; + GetOrModifyS3ChunkInfoResponse response; + std::vector chunkIndexs{ 1, 2 }; + std::vector lists2add{ + GenS3ChunkInfoList(100, 200), + GenS3ChunkInfoList(300, 400), + }; + + request.set_partitionid(partitionId); + request.set_fsid(fsId); + request.set_inodeid(inodeId); + request.set_supportstreaming(false); + request.set_returns3chunkinfomap(false); + for (size_t i = 0; i < chunkIndexs.size(); i++) { + request.mutable_s3chunkinfoadd()->insert( + { chunkIndexs[i], lists2add[i] }); + } + + std::shared_ptr iterator; + MetaStatusCode rc = metastore.GetOrModifyS3ChunkInfo( + &request, &response, &iterator); + ASSERT_EQ(rc, MetaStatusCode::OK); + ASSERT_EQ(response.statuscode(), rc); + ASSERT_EQ(response.mutable_s3chunkinfomap()->size(), 0); + } } TEST_F(MetastoreTest, GetInodeWithPaddingS3Meta) {