Skip to content

Commit dd8ce61

Browse files
committed
curvefs: fix list xattr miss someone
Signed-off-by: wanghai01 <[email protected]>
1 parent 1278ff2 commit dd8ce61

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

curvefs/src/client/fuse_client.cpp

+17
Original file line numberDiff line numberDiff line change
@@ -1137,6 +1137,13 @@ CURVEFS_ERROR FuseClient::FuseOpListXattr(fuse_req_t req, fuse_ino_t ino,
11371137
// +1 because, the format is key\0key\0
11381138
*realSize += it.first.length() + 1;
11391139
}
1140+
// add summary xattr key
1141+
if (inodeAttr.type() == FsFileType::TYPE_DIRECTORY) {
1142+
*realSize += strlen(XATTR_DIR_RFILES) + 1;
1143+
*realSize += strlen(XATTR_DIR_RSUBDIRS) + 1;
1144+
*realSize += strlen(XATTR_DIR_RENTRIES) + 1;
1145+
*realSize += strlen(XATTR_DIR_RFBYTES) + 1;
1146+
}
11401147

11411148
if (size == 0) {
11421149
return CURVEFS_ERROR::OK;
@@ -1150,6 +1157,16 @@ CURVEFS_ERROR FuseClient::FuseOpListXattr(fuse_req_t req, fuse_ino_t ino,
11501157
memcpy(value, it.first.c_str(), tsize);
11511158
value += tsize;
11521159
}
1160+
if (inodeAttr.type() == FsFileType::TYPE_DIRECTORY) {
1161+
memcpy(value, XATTR_DIR_RFILES, strlen(XATTR_DIR_RFILES) + 1);
1162+
value += strlen(XATTR_DIR_RFILES) + 1;
1163+
memcpy(value, XATTR_DIR_RSUBDIRS, strlen(XATTR_DIR_RSUBDIRS) + 1);
1164+
value += strlen(XATTR_DIR_RSUBDIRS) + 1;
1165+
memcpy(value, XATTR_DIR_RENTRIES, strlen(XATTR_DIR_RENTRIES) + 1);
1166+
value += strlen(XATTR_DIR_RENTRIES) + 1;
1167+
memcpy(value, XATTR_DIR_RFBYTES, strlen(XATTR_DIR_RFBYTES) + 1);
1168+
value += strlen(XATTR_DIR_RFBYTES) + 1;
1169+
}
11531170
return CURVEFS_ERROR::OK;
11541171
}
11551172
return CURVEFS_ERROR::OUT_OF_RANGE;

curvefs/test/client/test_fuse_s3_client.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -4065,7 +4065,10 @@ TEST_F(TestFuseS3Client, FuseOpListXattr) {
40654065
.WillOnce(DoAll(SetArgPointee<1>(inode), Return(CURVEFS_ERROR::OK)));
40664066
ret = client_->FuseOpListXattr(req, ino, buf, size, &realSize);
40674067
ASSERT_EQ(CURVEFS_ERROR::OK, ret);
4068-
auto expected = key.length() + 1;
4068+
auto expected = key.length() + 1 + strlen(XATTR_DIR_RFILES) + 1 +
4069+
strlen(XATTR_DIR_RSUBDIRS) + 1 +
4070+
strlen(XATTR_DIR_RENTRIES) + 1 +
4071+
strlen(XATTR_DIR_RFBYTES) + 1;
40694072
ASSERT_EQ(realSize, expected);
40704073

40714074
realSize = 0;

0 commit comments

Comments
 (0)