Skip to content

Commit

Permalink
curvefs: fix list xattr miss someone
Browse files Browse the repository at this point in the history
Signed-off-by: wanghai01 <seanhaizi@163.com>
  • Loading branch information
SeanHai committed Dec 1, 2023
1 parent 1278ff2 commit dd8ce61
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
17 changes: 17 additions & 0 deletions curvefs/src/client/fuse_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1137,6 +1137,13 @@ CURVEFS_ERROR FuseClient::FuseOpListXattr(fuse_req_t req, fuse_ino_t ino,
// +1 because, the format is key\0key\0
*realSize += it.first.length() + 1;
}
// add summary xattr key
if (inodeAttr.type() == FsFileType::TYPE_DIRECTORY) {
*realSize += strlen(XATTR_DIR_RFILES) + 1;
*realSize += strlen(XATTR_DIR_RSUBDIRS) + 1;
*realSize += strlen(XATTR_DIR_RENTRIES) + 1;
*realSize += strlen(XATTR_DIR_RFBYTES) + 1;
}

if (size == 0) {
return CURVEFS_ERROR::OK;
Expand All @@ -1150,6 +1157,16 @@ CURVEFS_ERROR FuseClient::FuseOpListXattr(fuse_req_t req, fuse_ino_t ino,
memcpy(value, it.first.c_str(), tsize);
value += tsize;
}
if (inodeAttr.type() == FsFileType::TYPE_DIRECTORY) {
memcpy(value, XATTR_DIR_RFILES, strlen(XATTR_DIR_RFILES) + 1);
value += strlen(XATTR_DIR_RFILES) + 1;
memcpy(value, XATTR_DIR_RSUBDIRS, strlen(XATTR_DIR_RSUBDIRS) + 1);
value += strlen(XATTR_DIR_RSUBDIRS) + 1;
memcpy(value, XATTR_DIR_RENTRIES, strlen(XATTR_DIR_RENTRIES) + 1);
value += strlen(XATTR_DIR_RENTRIES) + 1;
memcpy(value, XATTR_DIR_RFBYTES, strlen(XATTR_DIR_RFBYTES) + 1);
value += strlen(XATTR_DIR_RFBYTES) + 1;
}
return CURVEFS_ERROR::OK;
}
return CURVEFS_ERROR::OUT_OF_RANGE;
Expand Down
5 changes: 4 additions & 1 deletion curvefs/test/client/test_fuse_s3_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4065,7 +4065,10 @@ TEST_F(TestFuseS3Client, FuseOpListXattr) {
.WillOnce(DoAll(SetArgPointee<1>(inode), Return(CURVEFS_ERROR::OK)));
ret = client_->FuseOpListXattr(req, ino, buf, size, &realSize);
ASSERT_EQ(CURVEFS_ERROR::OK, ret);
auto expected = key.length() + 1;
auto expected = key.length() + 1 + strlen(XATTR_DIR_RFILES) + 1 +
strlen(XATTR_DIR_RSUBDIRS) + 1 +
strlen(XATTR_DIR_RENTRIES) + 1 +
strlen(XATTR_DIR_RFBYTES) + 1;
ASSERT_EQ(realSize, expected);

realSize = 0;
Expand Down

0 comments on commit dd8ce61

Please sign in to comment.