Loading lfs/src/adafs_ops/mdata_ops.cpp +19 −5 Original line number Diff line number Diff line Loading @@ -131,11 +131,25 @@ int get_metadata(Metadata& md, const fuse_ino_t inode) { */ int get_attr(struct stat& attr, const fuse_ino_t inode) { // XXX look in cache first auto md = make_shared<Metadata>(); auto err = get_metadata(*md, inode); metadata_to_stat(*md, attr); // XXX look in attribute cache first Metadata md{}; int err; if (ADAFS_DATA->host_size() > 1) { // multiple node operation auto recipient = RPC_DATA->get_rpc_node(fmt::FormatInt(inode).str()); if (ADAFS_DATA->is_local_op(recipient) || inode == ADAFS_ROOT_INODE) { // local, root inode is locally available err = get_metadata(md, inode); if (err == 0) metadata_to_stat(md, attr); } else { err = rpc_send_get_attr(recipient, inode, attr); } } else { // single node operation err = get_metadata(md, inode); if (err == 0) metadata_to_stat(md, attr); } if (err != 0) ADAFS_DATA->spdlogger()->error("Failed to get attributes."); return err; } Loading lfs/src/fuse_ops/directory.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -47,13 +47,16 @@ void adafs_ll_lookup(fuse_req_t req, fuse_ino_t parent, const char* name) { return; } auto fep = make_shared<struct fuse_entry_param>(); get_attr(fep->attr, inode); fep->ino = fep->attr.st_ino; fep->entry_timeout = 1.0; fep->attr_timeout = 1.0; struct fuse_entry_param fep{}; err = get_attr(fep.attr, inode); fep.ino = fep.attr.st_ino; fep.entry_timeout = 1.0; fep.attr_timeout = 1.0; fuse_reply_entry(req, fep.get()); if (err == 0) fuse_reply_entry(req, &fep); else fuse_reply_err(req, err); /* for ENOENTs Loading lfs/src/fuse_ops/file.cpp +1 −15 Original line number Diff line number Diff line Loading @@ -36,22 +36,8 @@ void adafs_ll_getattr(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info* fi) ADAFS_DATA->spdlogger()->debug("adafs_ll_getattr() enter: inode {}", ino); struct stat attr{}; int err; if (ADAFS_DATA->host_size() > 1) { // multiple node operation auto recipient = RPC_DATA->get_rpc_node(fmt::FormatInt(ino).str()); if (ADAFS_DATA->is_local_op(recipient) || ino == ADAFS_ROOT_INODE) { // local, root inode is locally available err = get_attr(attr, ino); } else { // remote err = rpc_send_get_attr(recipient, ino, attr); } } else { // single node operation err = get_attr(attr, ino); } auto err = get_attr(attr, ino); // auto attr = make_shared<struct stat>(); if (err == 0) { // XXX take a look into timeout value later fuse_reply_attr(req, &attr, 1.0); Loading Loading
lfs/src/adafs_ops/mdata_ops.cpp +19 −5 Original line number Diff line number Diff line Loading @@ -131,11 +131,25 @@ int get_metadata(Metadata& md, const fuse_ino_t inode) { */ int get_attr(struct stat& attr, const fuse_ino_t inode) { // XXX look in cache first auto md = make_shared<Metadata>(); auto err = get_metadata(*md, inode); metadata_to_stat(*md, attr); // XXX look in attribute cache first Metadata md{}; int err; if (ADAFS_DATA->host_size() > 1) { // multiple node operation auto recipient = RPC_DATA->get_rpc_node(fmt::FormatInt(inode).str()); if (ADAFS_DATA->is_local_op(recipient) || inode == ADAFS_ROOT_INODE) { // local, root inode is locally available err = get_metadata(md, inode); if (err == 0) metadata_to_stat(md, attr); } else { err = rpc_send_get_attr(recipient, inode, attr); } } else { // single node operation err = get_metadata(md, inode); if (err == 0) metadata_to_stat(md, attr); } if (err != 0) ADAFS_DATA->spdlogger()->error("Failed to get attributes."); return err; } Loading
lfs/src/fuse_ops/directory.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -47,13 +47,16 @@ void adafs_ll_lookup(fuse_req_t req, fuse_ino_t parent, const char* name) { return; } auto fep = make_shared<struct fuse_entry_param>(); get_attr(fep->attr, inode); fep->ino = fep->attr.st_ino; fep->entry_timeout = 1.0; fep->attr_timeout = 1.0; struct fuse_entry_param fep{}; err = get_attr(fep.attr, inode); fep.ino = fep.attr.st_ino; fep.entry_timeout = 1.0; fep.attr_timeout = 1.0; fuse_reply_entry(req, fep.get()); if (err == 0) fuse_reply_entry(req, &fep); else fuse_reply_err(req, err); /* for ENOENTs Loading
lfs/src/fuse_ops/file.cpp +1 −15 Original line number Diff line number Diff line Loading @@ -36,22 +36,8 @@ void adafs_ll_getattr(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info* fi) ADAFS_DATA->spdlogger()->debug("adafs_ll_getattr() enter: inode {}", ino); struct stat attr{}; int err; if (ADAFS_DATA->host_size() > 1) { // multiple node operation auto recipient = RPC_DATA->get_rpc_node(fmt::FormatInt(ino).str()); if (ADAFS_DATA->is_local_op(recipient) || ino == ADAFS_ROOT_INODE) { // local, root inode is locally available err = get_attr(attr, ino); } else { // remote err = rpc_send_get_attr(recipient, ino, attr); } } else { // single node operation err = get_attr(attr, ino); } auto err = get_attr(attr, ino); // auto attr = make_shared<struct stat>(); if (err == 0) { // XXX take a look into timeout value later fuse_reply_attr(req, &attr, 1.0); Loading