]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
improve copying of Env in Options (#10666)
authorAlan Paxton <alan.paxton@gmail.com>
Tue, 22 Nov 2022 23:48:59 +0000 (15:48 -0800)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Tue, 22 Nov 2022 23:48:59 +0000 (15:48 -0800)
Summary:
Closes https://github.com/facebook/rocksdb/issues/9909

- Constructing an Options from a DBOptions should use the Env from the DBOptions
- DBOptions should be constructed with the default Env as the env_, rather than null. Why ever not ?

Pull Request resolved: https://github.com/facebook/rocksdb/pull/10666

Reviewed By: riversand963

Differential Revision: D40515418

Pulled By: ajkr

fbshipit-source-id: 4122ba3f537660720262694c21ab4bfb13b6f8de

java/src/main/java/org/rocksdb/DBOptions.java
java/src/main/java/org/rocksdb/Options.java
java/src/test/java/org/rocksdb/MixedOptionsTest.java

index 54322226203e58b1f8708a94c005bbbcb40e5cc5..9eb5ca8738ee249eaed990fdfefbda520ed9653d 100644 (file)
@@ -31,6 +31,7 @@ public class DBOptions extends RocksObject
   public DBOptions() {
     super(newDBOptions());
     numShardBits_ = DEFAULT_NUM_SHARD_BITS;
+    env_ = Env.getDefault();
   }
 
   /**
index 1f1e5507a56325c1ebfbf57cbe0ac1afcf85adbe..54f88262bd98b5fbb3538b469b8b3159af83f97d 100644 (file)
@@ -66,7 +66,7 @@ public class Options extends RocksObject
       final ColumnFamilyOptions columnFamilyOptions) {
     super(newOptions(dbOptions.nativeHandle_,
         columnFamilyOptions.nativeHandle_));
-    env_ = Env.getDefault();
+    env_ = dbOptions.getEnv() != null ? dbOptions.getEnv() : Env.getDefault();
   }
 
   /**
index 10c92d49dd8b5bf1da8b5898844d5ec99fe3742b..4e17d04ef386dfa3d1f5fd1b36c6257340923be2 100644 (file)
@@ -52,4 +52,34 @@ public class MixedOptionsTest {
       }
     }
   }
+
+  @Test
+  public void mixedOptionsEnvTest() {
+    try (final ColumnFamilyOptions cfOptions = new ColumnFamilyOptions();
+         final DBOptions dbOptions = new DBOptions()) {
+      assertThat(dbOptions.getEnv()).isNotNull();
+      assertThat(dbOptions.getEnv()).isSameAs(Env.getDefault());
+      final Env memEnv = new RocksMemEnv(Env.getDefault());
+
+      try (final Options options = new Options(dbOptions, cfOptions)) {
+        assertThat(options.getEnv()).isSameAs(Env.getDefault());
+      }
+
+      dbOptions.setEnv(memEnv);
+      memEnv.setBackgroundThreads(4, Priority.LOW);
+      Env.getDefault().setBackgroundThreads(2, Priority.HIGH);
+      assertThat(dbOptions.getEnv().getBackgroundThreads(Priority.LOW)).isEqualTo(4);
+      assertThat(dbOptions.getEnv().getBackgroundThreads(Priority.HIGH)).isEqualTo(2);
+      assertThat(Env.getDefault().getBackgroundThreads(Priority.LOW)).isEqualTo(4);
+      assertThat(Env.getDefault().getBackgroundThreads(Priority.HIGH)).isEqualTo(2);
+
+      try (final Options options = new Options(dbOptions, cfOptions)) {
+        assertThat(options.getEnv().getBackgroundThreads(Priority.LOW)).isEqualTo(4);
+        assertThat(options.getEnv().getBackgroundThreads(Priority.HIGH)).isEqualTo(2);
+
+        assertThat(options.getEnv()).isNotSameAs(Env.getDefault());
+        assertThat(options.getEnv()).isSameAs(memEnv);
+      }
+    }
+  }
 }