1 // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2 //  This source code is licensed under both the GPLv2 (found in the
3 //  COPYING file in the root directory) and Apache 2.0 License
4 //  (found in the LICENSE.Apache file in the root directory).
5 
6 package org.rocksdb;
7 
8 import org.junit.ClassRule;
9 import org.junit.Rule;
10 import org.junit.Test;
11 import org.junit.rules.TemporaryFolder;
12 
13 import java.util.Collection;
14 import java.util.List;
15 
16 import static org.assertj.core.api.Assertions.assertThat;
17 
18 public class DefaultEnvTest {
19 
20   @ClassRule
21   public static final RocksNativeLibraryResource ROCKS_NATIVE_LIBRARY_RESOURCE =
22       new RocksNativeLibraryResource();
23 
24   @Rule
25   public TemporaryFolder dbFolder = new TemporaryFolder();
26 
27   @Test
28   public void backgroundThreads() {
29     try (final Env defaultEnv = RocksEnv.getDefault()) {
30       defaultEnv.setBackgroundThreads(5, Priority.BOTTOM);
31       assertThat(defaultEnv.getBackgroundThreads(Priority.BOTTOM)).isEqualTo(5);
32 
33       defaultEnv.setBackgroundThreads(5);
34       assertThat(defaultEnv.getBackgroundThreads(Priority.LOW)).isEqualTo(5);
35 
36       defaultEnv.setBackgroundThreads(5, Priority.LOW);
37       assertThat(defaultEnv.getBackgroundThreads(Priority.LOW)).isEqualTo(5);
38 
39       defaultEnv.setBackgroundThreads(5, Priority.HIGH);
40       assertThat(defaultEnv.getBackgroundThreads(Priority.HIGH)).isEqualTo(5);
41     }
42   }
43 
44   @Test
45   public void threadPoolQueueLen() {
46     try (final Env defaultEnv = RocksEnv.getDefault()) {
47       assertThat(defaultEnv.getThreadPoolQueueLen(Priority.BOTTOM)).isEqualTo(0);
48       assertThat(defaultEnv.getThreadPoolQueueLen(Priority.LOW)).isEqualTo(0);
49       assertThat(defaultEnv.getThreadPoolQueueLen(Priority.HIGH)).isEqualTo(0);
50     }
51   }
52 
53   @Test
54   public void incBackgroundThreadsIfNeeded() {
55     try (final Env defaultEnv = RocksEnv.getDefault()) {
56       defaultEnv.incBackgroundThreadsIfNeeded(20, Priority.BOTTOM);
57       assertThat(defaultEnv.getBackgroundThreads(Priority.BOTTOM)).isGreaterThanOrEqualTo(20);
58 
59       defaultEnv.incBackgroundThreadsIfNeeded(20, Priority.LOW);
60       assertThat(defaultEnv.getBackgroundThreads(Priority.LOW)).isGreaterThanOrEqualTo(20);
61 
62       defaultEnv.incBackgroundThreadsIfNeeded(20, Priority.HIGH);
63       assertThat(defaultEnv.getBackgroundThreads(Priority.HIGH)).isGreaterThanOrEqualTo(20);
64     }
65   }
66 
67   @Test
68   public void lowerThreadPoolIOPriority() {
69     try (final Env defaultEnv = RocksEnv.getDefault()) {
70       defaultEnv.lowerThreadPoolIOPriority(Priority.BOTTOM);
71 
72       defaultEnv.lowerThreadPoolIOPriority(Priority.LOW);
73 
74       defaultEnv.lowerThreadPoolIOPriority(Priority.HIGH);
75     }
76   }
77 
78   @Test
79   public void lowerThreadPoolCPUPriority() {
80     try (final Env defaultEnv = RocksEnv.getDefault()) {
81       defaultEnv.lowerThreadPoolCPUPriority(Priority.BOTTOM);
82 
83       defaultEnv.lowerThreadPoolCPUPriority(Priority.LOW);
84 
85       defaultEnv.lowerThreadPoolCPUPriority(Priority.HIGH);
86     }
87   }
88 
89   @Test
90   public void threadList() throws RocksDBException {
91     try (final Env defaultEnv = RocksEnv.getDefault()) {
92       final Collection<ThreadStatus> threadList = defaultEnv.getThreadList();
93       assertThat(threadList.size()).isGreaterThan(0);
94     }
95   }
96 
97   @Test
98   public void threadList_integration() throws RocksDBException {
99     try (final Env env = RocksEnv.getDefault();
100         final Options opt = new Options()
101             .setCreateIfMissing(true)
102             .setCreateMissingColumnFamilies(true)
103             .setEnv(env)) {
104       // open database
105       try (final RocksDB db = RocksDB.open(opt,
106           dbFolder.getRoot().getAbsolutePath())) {
107 
108         final List<ThreadStatus> threadList = env.getThreadList();
109         assertThat(threadList.size()).isGreaterThan(0);
110       }
111     }
112   }
113 }
114