Skip to content

Commit 9a7ce4e

Browse files
authored
feat(client): pre-create ufs files in writeback cache mode (#485) (#544)
1 parent 7062c48 commit 9a7ce4e

File tree

4 files changed

+6
-5
lines changed

4 files changed

+6
-5
lines changed

curvine-client/src/unified/cache_sync_writer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ impl Writer for CacheSyncWriter {
181181
}
182182

183183
async fn seek(&mut self, pos: i64) -> FsResult<()> {
184-
if self.pos() != pos {
184+
if self.pos() != pos && !self.has_rand_write {
185185
self.has_rand_write = true;
186186
if let Err(e) = self.job_client.cancel_job(&self.job_res.job_id).await {
187187
warn!("cancel job {} failed: {}", self.job_res.job_id, e);

curvine-client/src/unified/unified_filesystem.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,9 @@ impl UnifiedFileSystem {
280280
}
281281

282282
_ => {
283+
// ufs creates an empty file to prevent errors when accessing metadata.
284+
mount.ufs.create(&ufs_path, true).await?;
285+
283286
let writer = CacheSyncWriter::new(self, path, &mount, flags).await?;
284287
Ok(UnifiedWriter::CacheSync(writer))
285288
}

curvine-fuse/src/fs/curvine_file_system.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,9 +1327,7 @@ impl fs::FileSystem for CurvineFileSystem {
13271327
};
13281328
let res = self.create(op).await?;
13291329
let handle = self.state.remove_handle(res.0.nodeid, res.1.fh);
1330-
if let Some(handle) = handle {
1331-
handle.complete(None).await?;
1332-
} else {
1330+
if handle.is_none() {
13331331
return err_fuse!(libc::EIO);
13341332
}
13351333
let out = fuse_entry_out {

curvine-server/src/master/fs/master_filesystem.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ impl MasterFilesystem {
268268

269269
let inode = match inp.get_last_inode() {
270270
None => {
271-
return if flags.create() {
271+
return if flags.create() || flags.append() {
272272
drop(fs_dir);
273273
let status = self.create_with_opts(path, opts, flags)?;
274274
Ok(FileBlocks::new(status, vec![]))

0 commit comments

Comments
 (0)