@@ -31,6 +31,7 @@ namespace ROCKSDB_NAMESPACE {
31
31
namespace {
32
32
static std::shared_ptr<ROCKSDB_NAMESPACE::Env> env_guard;
33
33
static std::shared_ptr<ROCKSDB_NAMESPACE::Env> env_wrapper_guard;
34
+ static std::shared_ptr<ROCKSDB_NAMESPACE::Env> legacy_env_wrapper_guard;
34
35
static std::shared_ptr<ROCKSDB_NAMESPACE::CompositeEnvWrapper>
35
36
dbsl_env_wrapper_guard;
36
37
static std::shared_ptr<CompositeEnvWrapper> fault_env_guard;
@@ -99,6 +100,17 @@ int db_stress_tool(int argc, char** argv) {
99
100
100
101
env_wrapper_guard = std::make_shared<CompositeEnvWrapper>(
101
102
raw_env, std::make_shared<DbStressFSWrapper>(raw_env->GetFileSystem ()));
103
+ if (!env_opts && !FLAGS_use_io_uring) {
104
+ // If using the default Env (Posix), wrap DbStressEnvWrapper with the
105
+ // legacy EnvWrapper. This is a workaround to prevent MultiGet and scans
106
+ // from failing when IO uring is disabled. The EnvWrapper
107
+ // has a default implementation of ReadAsync that redirects to Read.
108
+ legacy_env_wrapper_guard = std::make_shared<EnvWrapper>(raw_env);
109
+ env_wrapper_guard = std::make_shared<CompositeEnvWrapper>(
110
+ legacy_env_wrapper_guard,
111
+ std::make_shared<DbStressFSWrapper>(
112
+ legacy_env_wrapper_guard->GetFileSystem ()));
113
+ }
102
114
db_stress_env = env_wrapper_guard.get ();
103
115
104
116
FLAGS_rep_factory = StringToRepFactory (FLAGS_memtablerep.c_str ());
0 commit comments