Summary:
If dbname and db_log_dir are at different filesystems (one
local and one remote), creation of dbname will fail because that path
doesn't exist wrt to db_log_dir.
This patch will ignore the error returned on creation of dbname. If they
are on same filesystem, db_log_dir creation will automatically return
the error in case there is any error in creation of dbname.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/10292
Test Plan: Existing unit tests
Reviewed By: riversand963
Differential Revision:
D37567773
Pulled By: akankshamahajan15
fbshipit-source-id:
005d28c536208d4c126c8cb8e196d1d85b881100
# Rocksdb Change Log
+## Unreleased
+### Bug Fixes
+Fix a bug in Logger where if dbname and db_log_dir are on different filesystems, dbname creation would fail wrt to db_log_dir path returning an error and fails to open the DB.
+
## 7.4.1 (06/28/2022)
### Bug Fixes
* Pass `rate_limiter_priority` through filter block reader functions to `FileSystem`.
InfoLogFileName(dbname, db_absolute_path, options.db_log_dir);
const auto& clock = env->GetSystemClock();
- // In case it does not exist
+ // In case it does not exist.
s = env->CreateDirIfMissing(dbname);
if (!s.ok()) {
- return s;
+ if (options.db_log_dir.empty()) {
+ return s;
+ } else {
+ // Ignore the error returned during creation of dbname because dbname and
+ // db_log_dir can be on different filesystems in which case dbname will
+ // not exist and error should be ignored. db_log_dir creation will handle
+ // the error in case there is any error in the creation of dbname on same
+ // filesystem.
+ s = Status::OK();
+ }
}
+ assert(s.ok());
if (!options.db_log_dir.empty()) {
s = env->CreateDirIfMissing(options.db_log_dir);