Skip to content

Commit c553928

Browse files
committed
[feat]: curvefs: merge two rpc into one when delete dentry
Signed-off-by: swj <1186093704@qq.com>
1 parent 505cc7a commit c553928

File tree

12 files changed

+31
-68
lines changed

12 files changed

+31
-68
lines changed

curvefs/proto/metaserver.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ message DeleteDentryRequest {
131131
required uint64 parentInodeId = 6;
132132
required string name = 7;
133133
optional FsFileType type = 8;
134+
optional Time time = 9;
134135
}
135136

136137
message DeleteDentryResponse {

curvefs/src/client/fuse_client.cpp

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -349,35 +349,6 @@ CURVEFS_ERROR FuseClient::FuseOpOpen(fuse_req_t req,
349349
return HandleOpenFlags(req, ino, fi, fileOut);
350350
}
351351

352-
CURVEFS_ERROR FuseClient::UpdateParentMCTimeAndNlink(
353-
fuse_ino_t parent, FsFileType type, NlinkChange nlink) {
354-
355-
std::shared_ptr<InodeWrapper> parentInodeWrapper;
356-
auto ret = inodeManager_->GetInode(parent, parentInodeWrapper);
357-
if (ret != CURVEFS_ERROR::OK) {
358-
LOG(ERROR) << "inodeManager get inode fail, ret = " << ret
359-
<< ", inodeid = " << parent;
360-
return ret;
361-
}
362-
363-
{
364-
curve::common::UniqueLock lk = parentInodeWrapper->GetUniqueLock();
365-
parentInodeWrapper->UpdateTimestampLocked(kModifyTime | kChangeTime);
366-
367-
if (FsFileType::TYPE_DIRECTORY == type) {
368-
parentInodeWrapper->UpdateNlinkLocked(nlink);
369-
}
370-
371-
if (option_.fileSystemOption.deferSyncOption.deferDirMtime) {
372-
inodeManager_->ShipToFlush(parentInodeWrapper);
373-
} else {
374-
return parentInodeWrapper->SyncAttr();
375-
}
376-
}
377-
378-
return CURVEFS_ERROR::OK;
379-
}
380-
381352
CURVEFS_ERROR FuseClient::MakeNode(
382353
fuse_req_t req,
383354
fuse_ino_t parent,
@@ -515,15 +486,6 @@ CURVEFS_ERROR FuseClient::DeleteNode(uint64_t ino, fuse_ino_t parent,
515486
return ret;
516487
}
517488

518-
ret = UpdateParentMCTimeAndNlink(parent, type, NlinkChange::kSubOne);
519-
if (ret != CURVEFS_ERROR::OK) {
520-
LOG(ERROR) << "UpdateParentMCTimeAndNlink failed"
521-
<< ", parent: " << parent
522-
<< ", name: " << name
523-
<< ", type: " << type;
524-
return ret;
525-
}
526-
527489
std::shared_ptr<InodeWrapper> inodeWrapper;
528490
ret = inodeManager_->GetInode(ino, inodeWrapper);
529491
if (ret != CURVEFS_ERROR::OK) {

curvefs/src/client/fuse_client.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,9 +415,6 @@ class FuseClient {
415415
private:
416416
virtual void FlushData() = 0;
417417

418-
CURVEFS_ERROR UpdateParentMCTimeAndNlink(
419-
fuse_ino_t parent, FsFileType type, NlinkChange nlink);
420-
421418
std::string GenerateNewRecycleName(fuse_ino_t ino,
422419
fuse_ino_t parent, const char* name) {
423420
std::string newName(name);

curvefs/src/client/rpcclient/metaserver_client.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,12 @@ MetaStatusCode MetaServerClientImpl::DeleteDentry(uint32_t fsId,
321321
request.set_name(name);
322322
request.set_txid(txId);
323323
request.set_type(type);
324-
324+
struct timespec now;
325+
clock_gettime(CLOCK_REALTIME, &now);
326+
Time* tm = new Time();
327+
tm->set_sec(now.tv_sec);
328+
tm->set_nsec(now.tv_nsec);
329+
request.set_allocated_time(tm);
325330
curvefs::metaserver::MetaServerService_Stub stub(channel);
326331
stub.DeleteDentry(cntl, &request, &response, nullptr);
327332

curvefs/src/metaserver/inode_manager.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -536,10 +536,11 @@ MetaStatusCode InodeManager::PaddingInodeS3ChunkInfo(int32_t fsId,
536536
}
537537

538538
MetaStatusCode InodeManager::UpdateInodeWhenCreateOrRemoveSubNode(
539-
const Dentry& dentry, uint64_t now, uint32_t now_ns, bool isCreate,
540-
int64_t logIndex) {
539+
const Dentry& dentry, const Time& tm, bool isCreate, int64_t logIndex) {
541540
uint64_t fsId = dentry.fsid();
542541
uint64_t parentInodeId = dentry.parentinodeid();
542+
uint64_t now = tm.sec();
543+
uint32_t now_ns = tm.nsec();
543544
FsFileType type = dentry.type();
544545
MetaStatusCode ret = MetaStatusCode::OK;
545546

curvefs/src/metaserver/inode_manager.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,7 @@ class InodeManager {
106106
uint64_t limit = 0);
107107

108108
MetaStatusCode UpdateInodeWhenCreateOrRemoveSubNode(const Dentry& dentry,
109-
uint64_t now,
110-
uint32_t now_ns,
109+
const Time& tm,
111110
bool isCreate,
112111
int64_t logIndex);
113112

curvefs/src/metaserver/metastore.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,16 @@ MetaStatusCode MetaStoreImpl::DeleteDentry(const DeleteDentryRequest* request,
428428
dentry.set_txid(txId);
429429
dentry.set_type(request->type());
430430

431-
auto rc = partition->DeleteDentry(dentry, logIndex);
431+
uint64_t now = 0;
432+
uint32_t now_ns = 0;
433+
if (request->has_time()) {
434+
now = request->time().sec();
435+
now_ns = request->time().nsec();
436+
}
437+
Time tm;
438+
tm.set_sec(now);
439+
tm.set_nsec(now_ns);
440+
auto rc = partition->DeleteDentry(dentry, tm, logIndex);
432441
response->set_statuscode(rc);
433442
return rc;
434443
}

curvefs/src/metaserver/partition.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ MetaStatusCode Partition::CreateDentry(const Dentry& dentry, const Time& tm,
117117
if (MetaStatusCode::OK == ret) {
118118
if (dentry.has_type()) {
119119
return inodeManager_->UpdateInodeWhenCreateOrRemoveSubNode(
120-
dentry, tm.sec(), tm.nsec(), true, logIndex);
120+
dentry, tm, true, logIndex);
121121
} else {
122122
LOG(ERROR) << "CreateDentry does not have type, "
123123
<< dentry.ShortDebugString();
@@ -155,14 +155,15 @@ MetaStatusCode Partition::LoadDentry(const DentryVec& vec, bool merge,
155155
return rc;
156156
}
157157

158-
MetaStatusCode Partition::DeleteDentry(const Dentry& dentry, int64_t logIndex) {
158+
MetaStatusCode Partition::DeleteDentry(const Dentry& dentry, const Time& tm,
159+
int64_t logIndex) {
159160
PRECHECK(dentry.fsid(), dentry.parentinodeid());
160161

161162
MetaStatusCode ret = dentryManager_->DeleteDentry(dentry, logIndex);
162163
if (MetaStatusCode::OK == ret) {
163164
if (dentry.has_type()) {
164165
return inodeManager_->UpdateInodeWhenCreateOrRemoveSubNode(
165-
dentry, 0, 0, false, logIndex);
166+
dentry, tm, false, logIndex);
166167
} else {
167168
LOG(ERROR) << "DeleteDentry does not have type, "
168169
<< dentry.ShortDebugString();

curvefs/src/metaserver/partition.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ class Partition {
6464
MetaStatusCode LoadDentry(const DentryVec& vec, bool merge,
6565
int64_t logIndex);
6666

67-
MetaStatusCode DeleteDentry(const Dentry& dentry, int64_t logIndex);
67+
MetaStatusCode DeleteDentry(const Dentry& dentry, const Time& tm,
68+
int64_t logIndex);
6869

6970
MetaStatusCode GetDentry(Dentry* dentry);
7071

curvefs/test/client/test_fuse_s3_client.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3939,8 +3939,6 @@ TEST_F(TestFuseS3Client, FuseOpUnlink_EnableSummary) {
39393939
std::make_shared<InodeWrapper>(parentInode, metaClient_);
39403940

39413941
EXPECT_CALL(*inodeManager_, GetInode(_, _))
3942-
.WillOnce(DoAll(SetArgReferee<1>(parentInodeWrapper),
3943-
Return(CURVEFS_ERROR::OK)))
39443942
.WillOnce(
39453943
DoAll(SetArgReferee<1>(inodeWrapper), Return(CURVEFS_ERROR::OK)))
39463944
.WillOnce(DoAll(SetArgReferee<1>(parentInodeWrapper),
@@ -3950,12 +3948,8 @@ TEST_F(TestFuseS3Client, FuseOpUnlink_EnableSummary) {
39503948
EXPECT_CALL(*metaClient_, UpdateInodeAttr(_, _, _))
39513949
.WillRepeatedly(Return(MetaStatusCode::OK));
39523950

3953-
EXPECT_CALL(*inodeManager_, ShipToFlush(_)).Times(1);
3954-
39553951
CURVEFS_ERROR ret = client_->FuseOpUnlink(req, parent, name.c_str());
39563952
ASSERT_EQ(CURVEFS_ERROR::OK, ret);
3957-
Inode inode2 = inodeWrapper->GetInode();
3958-
ASSERT_EQ(nlink - 1, inode2.nlink());
39593953

39603954
auto p = parentInodeWrapper->GetInode();
39613955
ASSERT_EQ(3, p.nlink());

curvefs/test/client/test_fuse_volume_client.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -569,8 +569,6 @@ TEST_F(TestFuseVolumeClient, FuseOpUnlink) {
569569
std::make_shared<InodeWrapper>(parentInode, metaClient_);
570570

571571
EXPECT_CALL(*inodeManager_, GetInode(_, _))
572-
.WillOnce(DoAll(SetArgReferee<1>(parentInodeWrapper),
573-
Return(CURVEFS_ERROR::OK)))
574572
.WillOnce(
575573
DoAll(SetArgReferee<1>(inodeWrapper), Return(CURVEFS_ERROR::OK)));
576574
EXPECT_CALL(*metaClient_, GetInodeAttr(_, _, _))
@@ -630,8 +628,6 @@ TEST_F(TestFuseVolumeClient, FuseOpRmDir) {
630628
std::make_shared<InodeWrapper>(parentInode, metaClient_);
631629

632630
EXPECT_CALL(*inodeManager_, GetInode(_, _))
633-
.WillOnce(DoAll(SetArgReferee<1>(parentInodeWrapper),
634-
Return(CURVEFS_ERROR::OK)))
635631
.WillOnce(
636632
DoAll(SetArgReferee<1>(inodeWrapper), Return(CURVEFS_ERROR::OK)));
637633
EXPECT_CALL(*metaClient_, GetInodeAttr(_, _, _))
@@ -695,11 +691,7 @@ TEST_F(TestFuseVolumeClient, FuseOpUnlinkFailed) {
695691
std::make_shared<InodeWrapper>(parentInode, metaClient_);
696692

697693
EXPECT_CALL(*inodeManager_, GetInode(_, _))
698-
.WillOnce(DoAll(SetArgReferee<1>(parentInodeWrapper),
699-
Return(CURVEFS_ERROR::OK)))
700694
.WillOnce(Return(CURVEFS_ERROR::INTERNAL))
701-
.WillOnce(DoAll(SetArgReferee<1>(parentInodeWrapper),
702-
Return(CURVEFS_ERROR::OK)))
703695
.WillOnce(
704696
DoAll(SetArgReferee<1>(inodeWrapper), Return(CURVEFS_ERROR::OK)));
705697
EXPECT_CALL(*metaClient_, GetInodeAttr(_, _, _))

curvefs/test/metaserver/partition_test.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,8 @@ TEST_F(PartitionTest, dentrynum) {
296296
MetaStatusCode::OK);
297297
ASSERT_EQ(partition1.GetDentryNum(), 1);
298298

299-
ASSERT_EQ(partition1.DeleteDentry(dentry, logIndex_++), MetaStatusCode::OK);
299+
ASSERT_EQ(partition1.DeleteDentry(dentry, tm, logIndex_++),
300+
MetaStatusCode::OK);
300301
ASSERT_EQ(partition1.GetDentryNum(), 0);
301302
}
302303

@@ -331,9 +332,9 @@ TEST_F(PartitionTest, PARTITION_ID_MISSMATCH_ERROR) {
331332
MetaStatusCode::PARTITION_ID_MISSMATCH);
332333

333334
// test DeleteDentry
334-
ASSERT_EQ(partition1.DeleteDentry(dentry1, logIndex_++),
335+
ASSERT_EQ(partition1.DeleteDentry(dentry1, tm, logIndex_++),
335336
MetaStatusCode::PARTITION_ID_MISSMATCH);
336-
ASSERT_EQ(partition1.DeleteDentry(dentry2, logIndex_++),
337+
ASSERT_EQ(partition1.DeleteDentry(dentry2, tm, logIndex_++),
337338
MetaStatusCode::PARTITION_ID_MISSMATCH);
338339

339340
// test GetDentry

0 commit comments

Comments
 (0)