]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: strip trailing slash for directory listings 41757/head
authorJonas Jelten <jj@sft.lol>
Mon, 15 Mar 2021 22:21:07 +0000 (23:21 +0100)
committerIgor Fedotov <ifedotov@suse.com>
Tue, 8 Jun 2021 11:20:44 +0000 (14:20 +0300)
Calls to BlueRocksEnv::GetChildren may contain a trailing / in the
queried directory, which is stripped away with this patch.

If it's not stripped, the directory entry is not found in BlueFS:
```
10 bluefs readdir db/
20 bluefs readdir dir db/ not found
 3 rocksdb: [db/db_impl/db_impl_open.cc:1785] Persisting Option File error: OK
```

Fixes: https://tracker.ceph.com/issues/49815
Signed-off-by: Jonas Jelten <jj@sft.lol>
(cherry picked from commit 3aa31813980d22719277a04797df48310acdff66)

src/os/bluestore/BlueFS.cc

index 06a5cd714e4911309573be91c6380aba426ea494..2aa8628e83451f44831dc555a78931cafbbd0203 100644 (file)
@@ -3719,6 +3719,10 @@ int BlueFS::unlock_file(FileLock *fl)
 
 int BlueFS::readdir(std::string_view dirname, vector<string> *ls)
 {
+  // dirname may contain a trailing /
+  if (!dirname.empty() && dirname.back() == '/') {
+    dirname.remove_suffix(1);
+  }
   std::lock_guard l(lock);
   dout(10) << __func__ << " " << dirname << dendl;
   if (dirname.empty()) {