Commit b85e35e4 authored by Marc Vef's avatar Marc Vef
Browse files

Fix: dentry prefix bug

parent 0500cf97
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -64,8 +64,10 @@ void db_get_dentries(vector<Dentry>& dentries, const fuse_ino_t dir_inode) {
    auto dentry_iter = db->NewIterator(rocksdb::ReadOptions());
    for (dentry_iter->Seek(prefix);
         dentry_iter->Valid() && dentry_iter->key().starts_with(prefix); dentry_iter->Next()) {
        ADAFS_DATA->spdlogger()->trace("Dentry:");
        key = dentry_iter->key().ToString();
        val = dentry_iter->value().ToString();
        ADAFS_DATA->spdlogger()->trace("key '{}' value '{}'", key, val);

        // Retrieve filename from key
        key.erase(0, 2); // Erase prefix <d_>
@@ -79,7 +81,7 @@ void db_get_dentries(vector<Dentry>& dentries, const fuse_ino_t dir_inode) {
        val.erase(0, pos + 1); // Erase inode + delim
        dentry.mode(static_cast<mode_t>(stoul(val))); // val holds only mode
        // append dentry to dentries vector
        ADAFS_DATA->spdlogger()->trace("Retrieved dentry: name {} inode {} mode {}", dentry.name(), dentry.inode(),
        ADAFS_DATA->spdlogger()->trace("Formatted: name {} inode {} mode {:o}", dentry.name(), dentry.inode(),
                                       dentry.mode());
        dentries.push_back(dentry);
    }
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ string db_build_dentry_key(const fuse_ino_t inode, const string& name) {
 * @return
 */
string db_build_dentry_prefix(const fuse_ino_t inode) {
    return ("d_"s + fmt::FormatInt(inode).str());
    return ("d_"s + fmt::FormatInt(inode).str() + "_"s);
}

string db_build_dentry_value(const fuse_ino_t inode, const mode_t mode) {
+0 −2
Original line number Diff line number Diff line
@@ -141,8 +141,6 @@ void adafs_ll_readdir(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, st
        get_dentries(*dentries, ino);
        //getdentries here
        for (const auto& dentry : *dentries) {
            ADAFS_DATA->spdlogger()->trace("readdir dentry: name {} inode {} mode {:o}", dentry.name(), dentry.inode(), dentry.mode());

            /*
             * Generate tiny stat with inode and mode information.
             * This information is necessary so that the entry shows up later at all.